-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTestAudioPlugin.cpp
More file actions
88 lines (74 loc) · 2.64 KB
/
Copy pathTestAudioPlugin.cpp
File metadata and controls
88 lines (74 loc) · 2.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include <voicesmith/plug/TestAudioPlugin.h>
#include <voicesmith/Source.h>
#include <voicesmith/io/AudioSink.h>
#include <voicesmith/io/AudioSource.h>
#include <voicesmith/fx/BypassEffect.h>
#include <voicesmith/fx/NoiseEffect.h>
#include <voicesmith/fx/NullEffect.h>
#include <voicesmith/fx/SineEffect.h>
#include <voicesmith/fx/SweepEffect.h>
#include <voicesmith/fx/VadEffect.h>
TestAudioPlugin::TestAudioPlugin(jna_callback* callback) :
callback(callback) {
state.effects = std::make_shared<StereoChainEffect<DelayEffect, PitchTimbreShiftEffect>>();
}
TestAudioPlugin::~TestAudioPlugin() {
stop();
}
void TestAudioPlugin::setup(const std::optional<int> input,
const std::optional<int> output,
const std::optional<float> samplerate,
const std::optional<size_t> blocksize,
const std::optional<size_t> channels) {
config.input = input;
config.output = output;
config.samplerate = samplerate;
config.blocksize = blocksize;
config.channels = channels;
}
void TestAudioPlugin::set(const std::string& param,
const std::string& value) {
if (param == "delay") {
state.effects->get<DelayEffect>([value](auto effect){
effect->delay(value);
});
}
if (param == "pitch") {
state.effects->get<PitchTimbreShiftEffect>([value](auto effect){
effect->pitch(value);
});
}
if (param == "timbre") {
state.effects->get<PitchTimbreShiftEffect>([value](auto effect){
effect->timbre(value);
});
}
}
void TestAudioPlugin::start() {
if (state.pipeline != nullptr) {
return;
}
// auto bypass = std::make_shared<BypassEffect>();
// auto noise = std::make_shared<NoiseEffect>(1.f);
// auto null = std::make_shared<NullEffect>();
// auto sine = std::make_shared<SineEffect>(1.f, 440.f);
// auto sweep = std::make_shared<SweepEffect>(1.f, std::make_pair(440.f, 2*440.f), 2.f);
// auto vad = std::make_shared<VadEffect>();
auto source = std::make_shared<AudioSource>(config.input, config.samplerate, config.blocksize, config.channels);
auto sink = std::make_shared<AudioSink>(config.output, config.samplerate, config.blocksize, config.channels);
auto pipe = std::make_shared<AudioPipeline>(source, sink, state.effects);
pipe->subscribe([&](const AudioEventCode code, const std::string& data){
callback(!code, data.c_str());
});
state.pipeline = pipe;
state.pipeline->open();
state.pipeline->start();
}
void TestAudioPlugin::stop() {
if (state.pipeline == nullptr) {
return;
}
state.pipeline->stop();
state.pipeline->close();
state.pipeline = nullptr;
}