Skip to content

Commit a88ed32

Browse files
committed
Add singer info fundementals
1 parent 5382d37 commit a88ed32

35 files changed

Lines changed: 1972 additions & 5 deletions

‎src/plugins/audio/CMakeLists.txt‎

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,16 @@ diffscope_add_builtin_plugin(${PROJECT_NAME}
3030
internal/**
3131
)
3232

33-
file(GLOB _res_icons res/soundfx/*)
34-
33+
file(GLOB _res_soundfx res/soundfx/*)
3534
qt_add_resources(${PROJECT_NAME} soundfx
3635
PREFIX /diffscope/audio/soundfx
3736
BASE res/soundfx
38-
FILES ${_res_icons}
37+
FILES ${_res_soundfx}
38+
)
39+
40+
file(GLOB _res_singeravatar res/singeravatar/*)
41+
qt_add_resources(${PROJECT_NAME} singeravatar
42+
PREFIX /diffscope/audio/singeravatar
43+
BASE res/singeravatar
44+
FILES ${_res_singeravatar}
3945
)

‎src/plugins/audio/internal/AudioSystem.cpp‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
#include "AudioSystem.h"
22

33
#include <audio/internal/OutputSystem.h>
4+
#include <audio/internal/WaveformSingerMetadata.h>
5+
6+
#include <coreplugin/CoreInterface.h>
47

58
namespace Audio::Internal {
69

@@ -10,6 +13,7 @@ namespace Audio::Internal {
1013
Q_ASSERT(!m_instance);
1114
m_instance = this;
1215
m_outputSystem = new OutputSystem(this);
16+
m_singerRegistrationSuccessful = WaveformSingerMetadata::registerAll(Core::CoreInterface::singerRegistry());
1317
}
1418

1519
AudioSystem::~AudioSystem() {
@@ -24,4 +28,9 @@ namespace Audio::Internal {
2428
Q_ASSERT(m_instance);
2529
return m_instance->m_outputSystem;
2630
}
31+
32+
bool AudioSystem::isSingerRegistrationSuccessful() {
33+
Q_ASSERT(m_instance);
34+
return m_instance->m_singerRegistrationSuccessful;
35+
}
2736
}

‎src/plugins/audio/internal/AudioSystem.h‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,11 @@ namespace Audio::Internal {
1717

1818
static OutputSystem *outputSystem();
1919

20+
static bool isSingerRegistrationSuccessful();
21+
2022
private:
2123
OutputSystem *m_outputSystem;
24+
bool m_singerRegistrationSuccessful{};
2225
};
2326

2427
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
#include "WaveformSingerMetadata.h"
2+
3+
#include <coreplugin/SingerRegistry.h>
4+
5+
namespace Audio::Internal {
6+
7+
QString WaveformSingerMetadata::architectureId() {
8+
return QStringLiteral("org.diffscope.waveform");
9+
}
10+
11+
Core::ArchitectureInfo WaveformSingerMetadata::architectureInfo() {
12+
Core::ArchitectureInfo info;
13+
info.setName(tr("Waveform"));
14+
15+
Core::ArchitectureInfo::Parameter directParameter;
16+
Core::ArchitectureInfo::ParameterMap parameters;
17+
parameters.insert(QStringLiteral("pitch"), directParameter);
18+
parameters.insert(QStringLiteral("energy"), directParameter);
19+
info.setParameters(parameters);
20+
return info;
21+
}
22+
23+
QList<WaveformSingerMetadata::SingerEntry> WaveformSingerMetadata::singers() {
24+
const auto createSinger = [](const QString &name, const QUrl &avatar) {
25+
Core::SingerInfo info;
26+
info.setName(name);
27+
info.setMixGroup(QStringLiteral("waveform"));
28+
info.setAvatarUrl(avatar);
29+
return info;
30+
};
31+
32+
return {
33+
{QStringLiteral("piano"), createSinger(tr("Electric Piano"), QUrl("qrc:/diffscope/audio/singeravatar/piano.png"))},
34+
{QStringLiteral("sinewave"), createSinger(tr("Sine Wave"), QUrl("qrc:/diffscope/audio/singeravatar/sinewave.png"))},
35+
{QStringLiteral("choir"), createSinger(tr("Choir"), QUrl("qrc:/diffscope/audio/singeravatar/choir.png"))},
36+
};
37+
}
38+
39+
bool WaveformSingerMetadata::registerAll(Core::SingerRegistry *registry) {
40+
if (!registry)
41+
return false;
42+
43+
const auto id = architectureId();
44+
if (!registry->registerArchitecture(id, architectureInfo()))
45+
return false;
46+
47+
bool success = true;
48+
for (const auto &singer : singers()) {
49+
const bool singerRegistered = registry->registerSinger(id, singer.id, singer.info);
50+
success = singerRegistered && success;
51+
}
52+
return success;
53+
}
54+
55+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
#ifndef DIFFSCOPE_AUDIO_WAVEFORMSINGERMETADATA_H
2+
#define DIFFSCOPE_AUDIO_WAVEFORMSINGERMETADATA_H
3+
4+
#include <QCoreApplication>
5+
#include <QList>
6+
#include <QString>
7+
8+
#include <coreplugin/ArchitectureInfo.h>
9+
#include <coreplugin/SingerInfo.h>
10+
11+
namespace Core {
12+
class SingerRegistry;
13+
}
14+
15+
namespace Audio::Internal {
16+
17+
class WaveformSingerMetadata {
18+
Q_DECLARE_TR_FUNCTIONS(Audio::Internal::WaveformSingerMetadata)
19+
20+
public:
21+
struct SingerEntry {
22+
QString id;
23+
Core::SingerInfo info;
24+
};
25+
26+
static QString architectureId();
27+
static Core::ArchitectureInfo architectureInfo();
28+
static QList<SingerEntry> singers();
29+
30+
static bool registerAll(Core::SingerRegistry *registry);
31+
};
32+
33+
}
34+
35+
#endif // DIFFSCOPE_AUDIO_WAVEFORMSINGERMETADATA_H
55.2 KB
Loading
62.6 KB
Loading
96.3 KB
Loading

‎src/plugins/coreplugin/core/CoreInterface.cpp‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
#include <coreplugin/ProjectWindowInterface.h>
5050
#include <coreplugin/TrackColorSchema.h>
5151
#include <coreplugin/DefaultLyricManager.h>
52+
#include <coreplugin/SingerRegistry.h>
5253

5354
namespace Core {
5455

@@ -65,6 +66,7 @@ namespace Core {
6566
DspxCheckerRegistry *dspxCheckerRegistry;
6667
TrackColorSchema *trackColorSchema;
6768
DefaultLyricManager *defaultLyricManager;
69+
SingerRegistry *singerRegistry;
6870

6971
void init() {
7072
Q_Q(CoreInterface);
@@ -73,6 +75,7 @@ namespace Core {
7375
dspxCheckerRegistry = new DspxCheckerRegistry(q);
7476
trackColorSchema = new TrackColorSchema(q);
7577
defaultLyricManager = new DefaultLyricManager(q);
78+
singerRegistry = new SingerRegistry(q);
7679
}
7780
};
7881

@@ -107,6 +110,11 @@ namespace Core {
107110
return instance()->d_func()->defaultLyricManager;
108111
}
109112

113+
SingerRegistry *CoreInterface::singerRegistry() {
114+
Q_ASSERT(instance());
115+
return instance()->d_func()->singerRegistry;
116+
}
117+
110118
int CoreInterface::execSettingsDialog(const QString &id, QWindow *parent) {
111119
static std::unique_ptr<QWindow> dlg;
112120

‎src/plugins/coreplugin/core/CoreInterface.h‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ namespace Core {
2828
class PropertyEditorManager;
2929
class TrackColorSchema;
3030
class DefaultLyricManager;
31+
class SingerRegistry;
3132

3233
class CoreInterfacePrivate;
3334

@@ -39,6 +40,7 @@ namespace Core {
3940
Q_PROPERTY(QAK::ActionRegistry *actionRegistry READ actionRegistry CONSTANT)
4041
Q_PROPERTY(TrackColorSchema *trackColorSchema READ trackColorSchema CONSTANT)
4142
Q_PROPERTY(DefaultLyricManager *defaultLyricManager READ defaultLyricManager CONSTANT)
43+
Q_PROPERTY(SingerRegistry *singerRegistry READ singerRegistry CONSTANT)
4244
public:
4345
static CoreInterface *instance();
4446
static inline CoreInterface *create(QQmlEngine *, QJSEngine *) { return instance(); }
@@ -51,6 +53,8 @@ namespace Core {
5153

5254
static DefaultLyricManager *defaultLyricManager();
5355

56+
static SingerRegistry *singerRegistry();
57+
5458
static constexpr const char *dspxEditorId() {
5559
return "org.diffscope.diffscope";
5660
}

0 commit comments

Comments
 (0)