Loading...
Searching...
No Matches
WASMMiniAudioInterface.hpp
1#pragma once
2#if defined(__EMSCRIPTEN__)
3#include <Audio/AudioInterface.hpp>
4#include <Audio/Settings/Model.hpp>
5
6#include <ossia/audio/miniaudio_protocol.hpp>
7
8#if OSSIA_ENABLE_MINIAUDIO
9
10namespace Audio
11{
12
13class WASMMiniAudioFactory final : public AudioFactory
14{
15 SCORE_CONCRETE("a2e8b688-521c-4755-b0b2-4e3d01807b8e")
16public:
17 ~WASMMiniAudioFactory() override { }
18 bool available() const noexcept override { return true; }
19 void
20 initialize(Audio::Settings::Model& set, const score::ApplicationContext& ctx) override
21 {
22 }
23
24 QString prettyName() const override { return QObject::tr("Web Audio (MiniAudio)"); }
25
26 std::shared_ptr<ossia::audio_engine> make_engine(
27 const Audio::Settings::Model& set, const score::ApplicationContext& ctx) override
28 {
29 auto context = std::make_shared<ossia::miniaudio_context>();
30 auto cfg = ma_context_config_init();
31 ma_context_init(nullptr, 0, &cfg, &context->context);
32
33 ma_device_id in_id{}, out_id{};
34
35 // Request microphone input so the miniaudio WebAudio backend opens a
36 // duplex device (ma_device_type_duplex) and calls getUserMedia(). With 0
37 // inputs it would be playback-only and capture would never be requested.
38 // The browser prompts for mic permission on the first duplex device; the
39 // first buffers are silent until the user grants it.
40 int inputs = set.getDefaultIn();
41 if(inputs <= 0)
42 inputs = 2;
43 int outputs = set.getDefaultOut();
44 if(outputs <= 0)
45 outputs = 2;
46
47 return std::make_shared<ossia::miniaudio_engine>(
48 std::move(context), "ossia score", in_id, out_id, inputs, outputs, 48000, 1024);
49 }
50
51 QWidget* make_settings(
53 score::SettingsCommandDispatcher& m_disp, QWidget* parent) override
54 {
55 return nullptr;
56 }
57};
58
59}
60#endif
61#endif
Definition score-plugin-audio/Audio/Settings/Model.hpp:22
Definition score-plugin-audio/Audio/Settings/View.hpp:19
Definition SettingsCommandDispatcher.hpp:10
Used to access all the application-wide state and structures.
Definition ApplicationContext.hpp:25