diff options
Diffstat (limited to 'servers/audio_server.cpp')
-rw-r--r-- | servers/audio_server.cpp | 106 |
1 files changed, 0 insertions, 106 deletions
diff --git a/servers/audio_server.cpp b/servers/audio_server.cpp index 146e70f38d..ff5439b596 100644 --- a/servers/audio_server.cpp +++ b/servers/audio_server.cpp @@ -47,17 +47,14 @@ AudioDriver *AudioDriver::singleton = nullptr; AudioDriver *AudioDriver::get_singleton() { - return singleton; } void AudioDriver::set_singleton() { - singleton = this; } void AudioDriver::audio_server_process(int p_frames, int32_t *p_buffer, bool p_update_mix_time) { - if (p_update_mix_time) update_mix_time(p_frames); @@ -66,26 +63,22 @@ void AudioDriver::audio_server_process(int p_frames, int32_t *p_buffer, bool p_u } void AudioDriver::update_mix_time(int p_frames) { - _last_mix_frames = p_frames; if (OS::get_singleton()) _last_mix_time = OS::get_singleton()->get_ticks_usec(); } double AudioDriver::get_time_since_last_mix() const { - return (OS::get_singleton()->get_ticks_usec() - _last_mix_time) / 1000000.0; } double AudioDriver::get_time_to_next_mix() const { - double total = (OS::get_singleton()->get_ticks_usec() - _last_mix_time) / 1000000.0; double mix_buffer = _last_mix_frames / (double)get_mix_rate(); return mix_buffer - total; } void AudioDriver::input_buffer_init(int driver_buffer_frames) { - const int input_buffer_channels = 2; input_buffer.resize(driver_buffer_frames * input_buffer_channels * 4); input_position = 0; @@ -93,7 +86,6 @@ void AudioDriver::input_buffer_init(int driver_buffer_frames) { } void AudioDriver::input_buffer_write(int32_t sample) { - if ((int)input_position < input_buffer.size()) { input_buffer.write[input_position++] = sample; if ((int)input_position >= input_buffer.size()) { @@ -157,7 +149,6 @@ Array AudioDriver::capture_get_device_list() { } AudioDriver::AudioDriver() { - _last_mix_time = 0; _last_mix_frames = 0; input_position = 0; @@ -175,7 +166,6 @@ AudioDriver *AudioDriverManager::drivers[MAX_DRIVERS] = { int AudioDriverManager::driver_count = 1; void AudioDriverManager::add_driver(AudioDriver *p_driver) { - ERR_FAIL_COND(driver_count >= MAX_DRIVERS); drivers[driver_count - 1] = p_driver; @@ -184,7 +174,6 @@ void AudioDriverManager::add_driver(AudioDriver *p_driver) { } int AudioDriverManager::get_driver_count() { - return driver_count; } @@ -221,7 +210,6 @@ void AudioDriverManager::initialize(int p_driver) { } AudioDriver *AudioDriverManager::get_driver(int p_driver) { - ERR_FAIL_INDEX_V(p_driver, driver_count, nullptr); return drivers[p_driver]; } @@ -232,7 +220,6 @@ AudioDriver *AudioDriverManager::get_driver(int p_driver) { ////////////////////////////////////////////// void AudioServer::_driver_process(int p_frames, int32_t *p_buffer) { - int todo = p_frames; #ifdef DEBUG_ENABLED @@ -246,7 +233,6 @@ void AudioServer::_driver_process(int p_frames, int32_t *p_buffer) { } while (todo) { - if (to_mix == 0) { _mix_step(); } @@ -261,13 +247,10 @@ void AudioServer::_driver_process(int p_frames, int32_t *p_buffer) { //master master, send to output int cs = master->channels.size(); for (int k = 0; k < cs; k++) { - if (master->channels[k].active) { - const AudioFrame *buf = master->channels[k].buffer.ptr(); for (int j = 0; j < to_copy; j++) { - float l = CLAMP(buf[from + j].l, -1.0, 1.0); int32_t vl = l * ((1 << 20) - 1); int32_t vl2 = (vl < 0 ? -1 : 1) * (ABS(vl) << 11); @@ -281,7 +264,6 @@ void AudioServer::_driver_process(int p_frames, int32_t *p_buffer) { } else { for (int j = 0; j < to_copy; j++) { - p_buffer[(from_buf + j) * (cs * 2) + k * 2 + 0] = 0; p_buffer[(from_buf + j) * (cs * 2) + k * 2 + 1] = 0; } @@ -298,14 +280,12 @@ void AudioServer::_driver_process(int p_frames, int32_t *p_buffer) { } void AudioServer::_mix_step() { - bool solo_mode = false; for (int i = 0; i < buses.size(); i++) { Bus *bus = buses[i]; bus->index_cache = i; //might be moved around by editor, so.. for (int k = 0; k < bus->channels.size(); k++) { - bus->channels.write[k].used = false; } @@ -314,7 +294,6 @@ void AudioServer::_mix_step() { solo_mode = true; bus->soloed = true; do { - if (bus != buses[0]) { //everything has a send save for master bus if (!bus_map.has(bus->send)) { @@ -340,7 +319,6 @@ void AudioServer::_mix_step() { //make callbacks for mixing the audio for (Set<CallbackItem>::Element *E = callbacks.front(); E; E = E->next()) { - E->get().callback(E->get().userdata); } @@ -349,13 +327,11 @@ void AudioServer::_mix_step() { Bus *bus = buses[i]; for (int k = 0; k < bus->channels.size(); k++) { - if (bus->channels[k].active && !bus->channels[k].used) { //buffer was not used, but it's still active, so it must be cleaned AudioFrame *buf = bus->channels.write[k].buffer.ptrw(); for (uint32_t j = 0; j < buffer_size; j++) { - buf[j] = AudioFrame(0, 0); } } @@ -364,7 +340,6 @@ void AudioServer::_mix_step() { //process effects if (!bus->bypass) { for (int j = 0; j < bus->effects.size(); j++) { - if (!bus->effects[j].enabled) continue; @@ -373,7 +348,6 @@ void AudioServer::_mix_step() { #endif for (int k = 0; k < bus->channels.size(); k++) { - if (!(bus->channels[k].active || bus->channels[k].effect_instances[j]->process_silence())) continue; bus->channels.write[k].effect_instances.write[j]->process(bus->channels[k].buffer.ptr(), temp_buffer.write[k].ptrw(), buffer_size); @@ -381,7 +355,6 @@ void AudioServer::_mix_step() { //swap buffers, so internal buffer always has the right data for (int k = 0; k < bus->channels.size(); k++) { - if (!(buses[i]->channels[k].active || bus->channels[k].effect_instances[j]->process_silence())) continue; SWAP(bus->channels.write[k].buffer, temp_buffer.write[k]); @@ -410,7 +383,6 @@ void AudioServer::_mix_step() { } for (int k = 0; k < bus->channels.size(); k++) { - if (!bus->channels[k].active) continue; @@ -432,7 +404,6 @@ void AudioServer::_mix_step() { //apply volume and compute peak for (uint32_t j = 0; j < buffer_size; j++) { - buf[j] *= volume; float l = ABS(buf[j].l); @@ -482,7 +453,6 @@ bool AudioServer::thread_has_channel_mix_buffer(int p_bus, int p_buffer) const { } AudioFrame *AudioServer::thread_get_channel_mix_buffer(int p_bus, int p_buffer) { - ERR_FAIL_INDEX_V(p_bus, buses.size(), nullptr); ERR_FAIL_INDEX_V(p_buffer, buses[p_bus]->channels.size(), nullptr); @@ -501,12 +471,10 @@ AudioFrame *AudioServer::thread_get_channel_mix_buffer(int p_bus, int p_buffer) } int AudioServer::thread_get_mix_buffer_size() const { - return buffer_size; } int AudioServer::thread_find_bus_index(const StringName &p_name) { - if (bus_map.has(p_name)) { return bus_map[p_name]->index_cache; } else { @@ -515,7 +483,6 @@ int AudioServer::thread_find_bus_index(const StringName &p_name) { } void AudioServer::set_bus_count(int p_count) { - ERR_FAIL_COND(p_count < 1); ERR_FAIL_INDEX(p_count, 256); @@ -534,14 +501,11 @@ void AudioServer::set_bus_count(int p_count) { buses.resize(p_count); for (int i = cb; i < buses.size(); i++) { - String attempt = "New Bus"; int attempts = 1; while (true) { - bool name_free = true; for (int j = 0; j < i; j++) { - if (buses[j]->name == attempt) { name_free = false; break; @@ -579,7 +543,6 @@ void AudioServer::set_bus_count(int p_count) { } void AudioServer::remove_bus(int p_index) { - ERR_FAIL_INDEX(p_index, buses.size()); ERR_FAIL_COND(p_index == 0); @@ -595,7 +558,6 @@ void AudioServer::remove_bus(int p_index) { } void AudioServer::add_bus(int p_at_pos) { - MARK_EDITED if (p_at_pos >= buses.size()) { @@ -610,10 +572,8 @@ void AudioServer::add_bus(int p_at_pos) { String attempt = "New Bus"; int attempts = 1; while (true) { - bool name_free = true; for (int j = 0; j < buses.size(); j++) { - if (buses[j]->name == attempt) { name_free = false; break; @@ -650,7 +610,6 @@ void AudioServer::add_bus(int p_at_pos) { } void AudioServer::move_bus(int p_bus, int p_to_pos) { - ERR_FAIL_COND(p_bus < 1 || p_bus >= buses.size()); ERR_FAIL_COND(p_to_pos != -1 && (p_to_pos < 1 || p_to_pos > buses.size())); @@ -674,12 +633,10 @@ void AudioServer::move_bus(int p_bus, int p_to_pos) { } int AudioServer::get_bus_count() const { - return buses.size(); } void AudioServer::set_bus_name(int p_bus, const String &p_name) { - ERR_FAIL_INDEX(p_bus, buses.size()); if (p_bus == 0 && p_name != "Master") return; //bus 0 is always master @@ -697,10 +654,8 @@ void AudioServer::set_bus_name(int p_bus, const String &p_name) { int attempts = 1; while (true) { - bool name_free = true; for (int i = 0; i < buses.size(); i++) { - if (buses[i]->name == attempt) { name_free = false; break; @@ -722,7 +677,6 @@ void AudioServer::set_bus_name(int p_bus, const String &p_name) { emit_signal("bus_layout_changed"); } String AudioServer::get_bus_name(int p_bus) const { - ERR_FAIL_INDEX_V(p_bus, buses.size(), String()); return buses[p_bus]->name; } @@ -737,7 +691,6 @@ int AudioServer::get_bus_index(const StringName &p_bus_name) const { } void AudioServer::set_bus_volume_db(int p_bus, float p_volume_db) { - ERR_FAIL_INDEX(p_bus, buses.size()); MARK_EDITED @@ -745,19 +698,16 @@ void AudioServer::set_bus_volume_db(int p_bus, float p_volume_db) { buses[p_bus]->volume_db = p_volume_db; } float AudioServer::get_bus_volume_db(int p_bus) const { - ERR_FAIL_INDEX_V(p_bus, buses.size(), 0); return buses[p_bus]->volume_db; } int AudioServer::get_bus_channels(int p_bus) const { - ERR_FAIL_INDEX_V(p_bus, buses.size(), 0); return buses[p_bus]->channels.size(); } void AudioServer::set_bus_send(int p_bus, const StringName &p_send) { - ERR_FAIL_INDEX(p_bus, buses.size()); MARK_EDITED @@ -766,13 +716,11 @@ void AudioServer::set_bus_send(int p_bus, const StringName &p_send) { } StringName AudioServer::get_bus_send(int p_bus) const { - ERR_FAIL_INDEX_V(p_bus, buses.size(), StringName()); return buses[p_bus]->send; } void AudioServer::set_bus_solo(int p_bus, bool p_enable) { - ERR_FAIL_INDEX(p_bus, buses.size()); MARK_EDITED @@ -781,14 +729,12 @@ void AudioServer::set_bus_solo(int p_bus, bool p_enable) { } bool AudioServer::is_bus_solo(int p_bus) const { - ERR_FAIL_INDEX_V(p_bus, buses.size(), false); return buses[p_bus]->solo; } void AudioServer::set_bus_mute(int p_bus, bool p_enable) { - ERR_FAIL_INDEX(p_bus, buses.size()); MARK_EDITED @@ -796,14 +742,12 @@ void AudioServer::set_bus_mute(int p_bus, bool p_enable) { buses[p_bus]->mute = p_enable; } bool AudioServer::is_bus_mute(int p_bus) const { - ERR_FAIL_INDEX_V(p_bus, buses.size(), false); return buses[p_bus]->mute; } void AudioServer::set_bus_bypass_effects(int p_bus, bool p_enable) { - ERR_FAIL_INDEX(p_bus, buses.size()); MARK_EDITED @@ -811,14 +755,12 @@ void AudioServer::set_bus_bypass_effects(int p_bus, bool p_enable) { buses[p_bus]->bypass = p_enable; } bool AudioServer::is_bus_bypassing_effects(int p_bus) const { - ERR_FAIL_INDEX_V(p_bus, buses.size(), false); return buses[p_bus]->bypass; } void AudioServer::_update_bus_effects(int p_bus) { - for (int i = 0; i < buses[p_bus]->channels.size(); i++) { buses.write[p_bus]->channels.write[i].effect_instances.resize(buses[p_bus]->effects.size()); for (int j = 0; j < buses[p_bus]->effects.size(); j++) { @@ -832,7 +774,6 @@ void AudioServer::_update_bus_effects(int p_bus) { } void AudioServer::add_bus_effect(int p_bus, const Ref<AudioEffect> &p_effect, int p_at_pos) { - ERR_FAIL_COND(p_effect.is_null()); ERR_FAIL_INDEX(p_bus, buses.size()); @@ -860,7 +801,6 @@ void AudioServer::add_bus_effect(int p_bus, const Ref<AudioEffect> &p_effect, in } void AudioServer::remove_bus_effect(int p_bus, int p_effect) { - ERR_FAIL_INDEX(p_bus, buses.size()); MARK_EDITED @@ -874,14 +814,12 @@ void AudioServer::remove_bus_effect(int p_bus, int p_effect) { } int AudioServer::get_bus_effect_count(int p_bus) { - ERR_FAIL_INDEX_V(p_bus, buses.size(), 0); return buses[p_bus]->effects.size(); } Ref<AudioEffectInstance> AudioServer::get_bus_effect_instance(int p_bus, int p_effect, int p_channel) { - ERR_FAIL_INDEX_V(p_bus, buses.size(), Ref<AudioEffectInstance>()); ERR_FAIL_INDEX_V(p_effect, buses[p_bus]->effects.size(), Ref<AudioEffectInstance>()); ERR_FAIL_INDEX_V(p_channel, buses[p_bus]->channels.size(), Ref<AudioEffectInstance>()); @@ -890,7 +828,6 @@ Ref<AudioEffectInstance> AudioServer::get_bus_effect_instance(int p_bus, int p_e } Ref<AudioEffect> AudioServer::get_bus_effect(int p_bus, int p_effect) { - ERR_FAIL_INDEX_V(p_bus, buses.size(), Ref<AudioEffect>()); ERR_FAIL_INDEX_V(p_effect, buses[p_bus]->effects.size(), Ref<AudioEffect>()); @@ -898,7 +835,6 @@ Ref<AudioEffect> AudioServer::get_bus_effect(int p_bus, int p_effect) { } void AudioServer::swap_bus_effects(int p_bus, int p_effect, int p_by_effect) { - ERR_FAIL_INDEX(p_bus, buses.size()); ERR_FAIL_INDEX(p_effect, buses[p_bus]->effects.size()); ERR_FAIL_INDEX(p_by_effect, buses[p_bus]->effects.size()); @@ -912,7 +848,6 @@ void AudioServer::swap_bus_effects(int p_bus, int p_effect, int p_by_effect) { } void AudioServer::set_bus_effect_enabled(int p_bus, int p_effect, bool p_enabled) { - ERR_FAIL_INDEX(p_bus, buses.size()); ERR_FAIL_INDEX(p_effect, buses[p_bus]->effects.size()); @@ -921,21 +856,18 @@ void AudioServer::set_bus_effect_enabled(int p_bus, int p_effect, bool p_enabled buses.write[p_bus]->effects.write[p_effect].enabled = p_enabled; } bool AudioServer::is_bus_effect_enabled(int p_bus, int p_effect) const { - ERR_FAIL_INDEX_V(p_bus, buses.size(), false); ERR_FAIL_INDEX_V(p_effect, buses[p_bus]->effects.size(), false); return buses[p_bus]->effects[p_effect].enabled; } float AudioServer::get_bus_peak_volume_left_db(int p_bus, int p_channel) const { - ERR_FAIL_INDEX_V(p_bus, buses.size(), 0); ERR_FAIL_INDEX_V(p_channel, buses[p_bus]->channels.size(), 0); return buses[p_bus]->channels[p_channel].peak_volume.l; } float AudioServer::get_bus_peak_volume_right_db(int p_bus, int p_channel) const { - ERR_FAIL_INDEX_V(p_bus, buses.size(), 0); ERR_FAIL_INDEX_V(p_channel, buses[p_bus]->channels.size(), 0); @@ -943,7 +875,6 @@ float AudioServer::get_bus_peak_volume_right_db(int p_bus, int p_channel) const } bool AudioServer::is_bus_channel_active(int p_bus, int p_channel) const { - ERR_FAIL_INDEX_V(p_bus, buses.size(), false); ERR_FAIL_INDEX_V(p_channel, buses[p_bus]->channels.size(), false); @@ -951,11 +882,9 @@ bool AudioServer::is_bus_channel_active(int p_bus, int p_channel) const { } void AudioServer::set_global_rate_scale(float p_scale) { - global_rate_scale = p_scale; } float AudioServer::get_global_rate_scale() const { - return global_rate_scale; } @@ -976,7 +905,6 @@ void AudioServer::init_channels_and_buffers() { } void AudioServer::init() { - channel_disable_threshold_db = GLOBAL_DEF_RST("audio/channel_disable_threshold_db", -60.0); channel_disable_frames = float(GLOBAL_DEF_RST("audio/channel_disable_time", 2.0)) * get_mix_rate(); ProjectSettings::get_singleton()->set_custom_property_info("audio/channel_disable_time", PropertyInfo(Variant::FLOAT, "audio/channel_disable_time", PROPERTY_HINT_RANGE, "0,5,0.01,or_greater")); @@ -1001,7 +929,6 @@ void AudioServer::init() { void AudioServer::update() { #ifdef DEBUG_ENABLED if (EngineDebugger::is_profiling("servers")) { - // Driver time includes server time + effects times // Server time includes effects times uint64_t driver_time = AudioDriver::get_singleton()->get_profiling_time(); @@ -1061,13 +988,11 @@ void AudioServer::update() { #endif for (Set<CallbackItem>::Element *E = update_callbacks.front(); E; E = E->next()) { - E->get().callback(E->get().userdata); } } void AudioServer::load_default_bus_layout() { - String layout_path = ProjectSettings::get_singleton()->get("audio/default_bus_layout"); if (ResourceLoader::exists(layout_path)) { @@ -1079,7 +1004,6 @@ void AudioServer::load_default_bus_layout() { } void AudioServer::finish() { - for (int i = 0; i < AudioDriverManager::get_driver_count(); i++) { AudioDriverManager::get_driver(i)->finish(); } @@ -1094,45 +1018,36 @@ void AudioServer::finish() { /* MISC config */ void AudioServer::lock() { - AudioDriver::get_singleton()->lock(); } void AudioServer::unlock() { - AudioDriver::get_singleton()->unlock(); } AudioServer::SpeakerMode AudioServer::get_speaker_mode() const { - return (AudioServer::SpeakerMode)AudioDriver::get_singleton()->get_speaker_mode(); } float AudioServer::get_mix_rate() const { - return AudioDriver::get_singleton()->get_mix_rate(); } float AudioServer::read_output_peak_db() const { - return 0; } AudioServer *AudioServer::get_singleton() { - return singleton; } double AudioServer::get_output_latency() const { - return AudioDriver::get_singleton()->get_latency(); } double AudioServer::get_time_to_next_mix() const { - return AudioDriver::get_singleton()->get_time_to_next_mix(); } double AudioServer::get_time_since_last_mix() const { - return AudioDriver::get_singleton()->get_time_since_last_mix(); } @@ -1148,7 +1063,6 @@ void AudioServer::add_callback(AudioCallback p_callback, void *p_userdata) { } void AudioServer::remove_callback(AudioCallback p_callback, void *p_userdata) { - lock(); CallbackItem ci; ci.callback = p_callback; @@ -1167,7 +1081,6 @@ void AudioServer::add_update_callback(AudioCallback p_callback, void *p_userdata } void AudioServer::remove_update_callback(AudioCallback p_callback, void *p_userdata) { - lock(); CallbackItem ci; ci.callback = p_callback; @@ -1177,7 +1090,6 @@ void AudioServer::remove_update_callback(AudioCallback p_callback, void *p_userd } void AudioServer::set_bus_layout(const Ref<AudioBusLayout> &p_bus_layout) { - ERR_FAIL_COND(p_bus_layout.is_null() || p_bus_layout->buses.size() == 0); lock(); @@ -1201,11 +1113,9 @@ void AudioServer::set_bus_layout(const Ref<AudioBusLayout> &p_bus_layout) { bus->volume_db = p_bus_layout->buses[i].volume_db; for (int j = 0; j < p_bus_layout->buses[i].effects.size(); j++) { - Ref<AudioEffect> fx = p_bus_layout->buses[i].effects[j].effect; if (fx.is_valid()) { - Bus::Effect bfx; bfx.effect = fx; bfx.enabled = p_bus_layout->buses[i].effects[j].enabled; @@ -1229,14 +1139,12 @@ void AudioServer::set_bus_layout(const Ref<AudioBusLayout> &p_bus_layout) { } Ref<AudioBusLayout> AudioServer::generate_bus_layout() const { - Ref<AudioBusLayout> state; state.instance(); state->buses.resize(buses.size()); for (int i = 0; i < buses.size(); i++) { - state->buses.write[i].name = buses[i]->name; state->buses.write[i].send = buses[i]->send; state->buses.write[i].mute = buses[i]->mute; @@ -1255,37 +1163,30 @@ Ref<AudioBusLayout> AudioServer::generate_bus_layout() const { } Array AudioServer::get_device_list() { - return AudioDriver::get_singleton()->get_device_list(); } String AudioServer::get_device() { - return AudioDriver::get_singleton()->get_device(); } void AudioServer::set_device(String device) { - AudioDriver::get_singleton()->set_device(device); } Array AudioServer::capture_get_device_list() { - return AudioDriver::get_singleton()->capture_get_device_list(); } String AudioServer::capture_get_device() { - return AudioDriver::get_singleton()->capture_get_device(); } void AudioServer::capture_set_device(const String &p_name) { - AudioDriver::get_singleton()->capture_set_device(p_name); } void AudioServer::_bind_methods() { - ClassDB::bind_method(D_METHOD("set_bus_count", "amount"), &AudioServer::set_bus_count); ClassDB::bind_method(D_METHOD("get_bus_count"), &AudioServer::get_bus_count); @@ -1364,7 +1265,6 @@ void AudioServer::_bind_methods() { } AudioServer::AudioServer() { - singleton = this; mix_frames = 0; channel_count = 0; @@ -1378,14 +1278,12 @@ AudioServer::AudioServer() { } AudioServer::~AudioServer() { - singleton = nullptr; } ///////////////////////////////// bool AudioBusLayout::_set(const StringName &p_name, const Variant &p_value) { - String s = p_name; if (s.begins_with("bus/")) { int index = s.get_slice("/", 1).to_int(); @@ -1438,10 +1336,8 @@ bool AudioBusLayout::_set(const StringName &p_name, const Variant &p_value) { } bool AudioBusLayout::_get(const StringName &p_name, Variant &r_ret) const { - String s = p_name; if (s.begins_with("bus/")) { - int index = s.get_slice("/", 1).to_int(); if (index < 0 || index >= buses.size()) return false; @@ -1490,7 +1386,6 @@ bool AudioBusLayout::_get(const StringName &p_name, Variant &r_ret) const { return false; } void AudioBusLayout::_get_property_list(List<PropertyInfo> *p_list) const { - for (int i = 0; i < buses.size(); i++) { p_list->push_back(PropertyInfo(Variant::STRING, "bus/" + itos(i) + "/name", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL)); p_list->push_back(PropertyInfo(Variant::BOOL, "bus/" + itos(i) + "/solo", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL)); @@ -1507,7 +1402,6 @@ void AudioBusLayout::_get_property_list(List<PropertyInfo> *p_list) const { } AudioBusLayout::AudioBusLayout() { - buses.resize(1); buses.write[0].name = "Master"; } |