Skip to content

Commit b1413f8

Browse files
committed
Update audio
1 parent 30b2ac0 commit b1413f8

26 files changed

Lines changed: 745 additions & 22 deletions

src/libs/3rdparty/talcs

src/libs/application/dspxmodel/src/AudioClip.cpp

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ namespace dspx {
2626
Q_ASSERT(model->strategy()->getEntityType(handle) == ModelStrategy::EI_AudioClip);
2727
d->q_ptr = this;
2828
d->pModel = ModelPrivate::get(model);
29+
d->path = d->pModel->strategy->getEntityProperty(handle, ModelStrategy::P_Path).value<AudioPathInfo>();
2930
}
3031

3132
AudioClip::~AudioClip() = default;
@@ -69,7 +70,8 @@ namespace dspx {
6970
{"relativeDir", audioPathInfo.relativeDir.toStdString()},
7071
{"fileName", audioPathInfo.fileName.toStdString()},
7172
{"formatEntryClassName", audioPathInfo.formatEntryClassName.toStdString()},
72-
{"userData", encodeUserData(audioPathInfo.userData)}
73+
{"userData", encodeUserData(audioPathInfo.userData)},
74+
{"sha512", audioPathInfo.sha512.toStdString()}
7375
});
7476
return clip;
7577
}
@@ -79,14 +81,16 @@ namespace dspx {
7981
control()->fromOpenDspx(clip.control);
8082
time()->fromOpenDspx(clip.time);
8183
workspace()->fromOpenDspx(clip.workspace);
82-
auto diffscopeWorkspace = clip.workspace.contains("diffscope") ? QJsonObject() : JsonUtils::toQJsonValue(clip.workspace.at("diffscope")).toObject();
84+
auto diffscopeWorkspace = clip.workspace.contains("diffscope") ? JsonUtils::toQJsonValue(clip.workspace.at("diffscope")).toObject() : QJsonObject();
8385
if (diffscopeWorkspace.contains("audio")) {
86+
auto audio = diffscopeWorkspace["audio"].toObject();
8487
setPath({
85-
.absoluteDir = diffscopeWorkspace["absoluteDir"].toString(),
86-
.relativeDir = diffscopeWorkspace["relativeDir"].toString(),
87-
.fileName = diffscopeWorkspace["fileName"].toString(),
88-
.formatEntryClassName = diffscopeWorkspace["formatEntryClassName"].toString(),
89-
.userData = decodeUserData(diffscopeWorkspace["userData"].toString().toUtf8())
88+
.absoluteDir = audio["absoluteDir"].toString(),
89+
.relativeDir = audio["relativeDir"].toString(),
90+
.fileName = audio["fileName"].toString(),
91+
.formatEntryClassName = audio["formatEntryClassName"].toString(),
92+
.userData = decodeUserData(audio["userData"].toString().toUtf8()),
93+
.sha512 = audio["sha512"].toString()
9094
});
9195
} else {
9296
auto fileInfo = QFileInfo(QString::fromStdString(clip.path));
@@ -95,7 +99,8 @@ namespace dspx {
9599
.relativeDir = {},
96100
.fileName = fileInfo.fileName(),
97101
.formatEntryClassName = {},
98-
.userData = {}
102+
.userData = {},
103+
.sha512 = {}
99104
});
100105
}
101106
}

src/libs/application/dspxmodel/src/AudioClip.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ namespace dspx {
2727
QString fileName;
2828
QString formatEntryClassName;
2929
QVariant userData;
30+
QString sha512;
3031
};
3132

3233
class DSPX_MODEL_EXPORT AudioClip : public Clip {

src/libs/application/dspxmodel/src/ModelStrategy.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,7 @@ namespace dspx {
306306
{P_Length, QMetaType::Int, validateIntGreaterOrEqualZero},
307307
{P_ClipStart, QMetaType::Int, validateIntGreaterOrEqualZero},
308308
{P_ClipLength, QMetaType::Int, validateIntGreaterOrEqualZero},
309-
{P_Path, QMetaType::QString}
309+
{P_Path, QMetaType::UnknownType}
310310
};
311311
case EI_Global: return {
312312
{P_Name, QMetaType::QString},

src/plugins/audio/audiocontext/AudioClipAudioContext.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,16 @@ namespace Audio {
5252
return d->clip;
5353
}
5454

55+
AudioClipAudioContext::Status AudioClipAudioContext::status() const {
56+
Q_D(const AudioClipAudioContext);
57+
return d->status;
58+
}
59+
60+
QString AudioClipAudioContext::realAudioPath() const {
61+
Q_D(const AudioClipAudioContext);
62+
return d->realAudioPath;
63+
}
64+
5565
talcs::PositionableMixerAudioSource *AudioClipAudioContext::controlMixer() const {
5666
Q_D(const AudioClipAudioContext);
5767
return d->clipContext->controlMixer();
@@ -75,6 +85,24 @@ namespace Audio {
7585
return q->d_func();
7686
}
7787

88+
void AudioClipAudioContextPrivate::setStatus(AudioClipAudioContext::Status status_) {
89+
Q_Q(AudioClipAudioContext);
90+
if (status == status_) {
91+
return;
92+
}
93+
status = status_;
94+
Q_EMIT q->statusChanged(status);
95+
}
96+
97+
void AudioClipAudioContextPrivate::setRealAudioPath(const QString &realAudioPath_) {
98+
Q_Q(AudioClipAudioContext);
99+
if (realAudioPath == realAudioPath_) {
100+
return;
101+
}
102+
realAudioPath = realAudioPath_;
103+
Q_EMIT q->realAudioPathChanged(realAudioPath);
104+
}
105+
78106
}
79107

80108
#include "moc_AudioClipAudioContext.cpp"

src/plugins/audio/audiocontext/AudioClipAudioContext.h

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#define DIFFSCOPE_AUDIO_AUDIOCLIPAUDIOCONTEXT_H
33

44
#include <QObject>
5+
#include <QString>
56

67
namespace Core {
78
class ProjectWindowInterface;
@@ -30,19 +31,38 @@ namespace Audio {
3031
Q_DECLARE_PRIVATE(AudioClipAudioContext)
3132
Q_PROPERTY(Core::ProjectWindowInterface *windowHandle READ windowHandle CONSTANT)
3233
Q_PROPERTY(dspx::AudioClip *clip READ clip CONSTANT)
34+
Q_PROPERTY(Status status READ status NOTIFY statusChanged)
35+
Q_PROPERTY(QString realAudioPath READ realAudioPath NOTIFY realAudioPathChanged)
3336

3437
public:
38+
enum Status {
39+
Unknown,
40+
Ready,
41+
FileNotFound,
42+
FileLoadFailed,
43+
FileMoved,
44+
FileContentChanged,
45+
};
46+
Q_ENUM(Status)
47+
3548
~AudioClipAudioContext() override;
3649

3750
static AudioClipAudioContext *of(dspx::AudioClip *clip);
3851

3952
Core::ProjectWindowInterface *windowHandle() const;
4053
dspx::AudioClip *clip() const;
4154

55+
Status status() const;
56+
QString realAudioPath() const;
57+
4258
talcs::PositionableMixerAudioSource *controlMixer() const;
4359
talcs::PositionableMixerAudioSource *clipMixer() const;
4460
talcs::PositionableAudioSource *contentSource() const;
4561

62+
Q_SIGNALS:
63+
void statusChanged(Status status);
64+
void realAudioPathChanged(const QString &realAudioPath);
65+
4666
private:
4767
friend class AudioClipAudioContextPrivate;
4868
friend class Internal::ProjectAudioAddOn;

src/plugins/audio/audiocontext/AudioClipAudioContext_p.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@ namespace Audio {
1818
dspx::AudioClip *clip{};
1919
talcs::DspxTrackContext *trackContext{};
2020
talcs::DspxAudioClipContext *clipContext{};
21+
AudioClipAudioContext::Status status = AudioClipAudioContext::Unknown;
22+
QString realAudioPath;
23+
24+
void setStatus(AudioClipAudioContext::Status status);
25+
void setRealAudioPath(const QString &realAudioPath);
2126

2227
static AudioClipAudioContext *create(Core::ProjectWindowInterface *windowHandle, dspx::AudioClip *clip, talcs::DspxTrackContext *trackContext);
2328
static AudioClipAudioContextPrivate *of(AudioClipAudioContext *q);

src/plugins/audio/audiocontext/ProjectAudioContext.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,20 @@ namespace Audio {
2626
return d->windowHandle;
2727
}
2828

29+
ProjectAudioContext::PlaybackStatus ProjectAudioContext::status() const {
30+
Q_D(const ProjectAudioContext);
31+
return d->status;
32+
}
33+
34+
void ProjectAudioContext::setStatus(PlaybackStatus status) {
35+
Q_D(ProjectAudioContext);
36+
if (d->status == status) {
37+
return;
38+
}
39+
d->status = status;
40+
Q_EMIT statusChanged(status);
41+
}
42+
2943
talcs::MixerAudioSource *ProjectAudioContext::preMixer() const {
3044
Q_D(const ProjectAudioContext);
3145
return d->projectContext->preMixer();

src/plugins/audio/audiocontext/ProjectAudioContext.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ namespace Audio {
2525
Q_OBJECT
2626
Q_DECLARE_PRIVATE(ProjectAudioContext)
2727
Q_PROPERTY(Core::ProjectWindowInterface *windowHandle READ windowHandle CONSTANT)
28+
Q_PROPERTY(PlaybackStatus status READ status WRITE setStatus NOTIFY statusChanged)
2829

2930
public:
3031
~ProjectAudioContext() override;
@@ -33,12 +34,24 @@ namespace Audio {
3334

3435
Core::ProjectWindowInterface *windowHandle() const;
3536

37+
enum PlaybackStatus {
38+
Stopped,
39+
Playing,
40+
Paused,
41+
};
42+
Q_ENUM(PlaybackStatus)
43+
PlaybackStatus status() const;
44+
void setStatus(PlaybackStatus status);
45+
3646
talcs::MixerAudioSource *preMixer() const;
3747
talcs::TransportAudioSource *transport() const;
3848
talcs::PositionableMixerAudioSource *postMixer() const;
3949
talcs::PositionableMixerAudioSource *masterControlMixer() const;
4050
talcs::PositionableMixerAudioSource *masterTrackMixer() const;
4151

52+
Q_SIGNALS:
53+
void statusChanged(PlaybackStatus status);
54+
4255
private:
4356
friend class ProjectAudioContextPrivate;
4457
friend class Internal::ProjectAudioAddOn;

src/plugins/audio/audiocontext/ProjectAudioContext_p.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ namespace Audio {
1616
public:
1717
ProjectAudioContext *q_ptr{};
1818
Core::ProjectWindowInterface *windowHandle{};
19+
ProjectAudioContext::PlaybackStatus status{ProjectAudioContext::Stopped};
1920
std::unique_ptr<talcs::DspxProjectContext> projectContext;
2021

2122
static ProjectAudioContext *create(Core::ProjectWindowInterface *windowHandle);

0 commit comments

Comments
 (0)