summaryrefslogtreecommitdiff
path: root/servers
diff options
context:
space:
mode:
Diffstat (limited to 'servers')
-rw-r--r--servers/audio/audio_stream.cpp42
-rw-r--r--servers/audio/audio_stream.h2
-rw-r--r--servers/audio_server.cpp65
-rw-r--r--servers/audio_server.h25
4 files changed, 45 insertions, 89 deletions
diff --git a/servers/audio/audio_stream.cpp b/servers/audio/audio_stream.cpp
index 6b286e09e9..58742c82d4 100644
--- a/servers/audio/audio_stream.cpp
+++ b/servers/audio/audio_stream.cpp
@@ -134,31 +134,31 @@ AudioStreamMicrophone::AudioStreamMicrophone() {
void AudioStreamPlaybackMicrophone::_mix_internal(AudioFrame *p_buffer, int p_frames) {
- AudioServer::get_singleton()->lock();
+ AudioDriver::get_singleton()->lock();
- PoolVector<int32_t> capture_buffer = AudioServer::get_singleton()->get_capture_buffer();
- unsigned int capture_size = AudioServer::get_singleton()->get_capture_size();
- int mix_rate = AudioServer::get_singleton()->get_mix_rate();
- unsigned int playback_delay = MIN(((50 * mix_rate) / 1000) * 2, capture_buffer.size() >> 1);
+ Vector<int32_t> buf = AudioDriver::get_singleton()->get_input_buffer();
+ unsigned int input_size = AudioDriver::get_singleton()->get_input_size();
+ int mix_rate = AudioDriver::get_singleton()->get_mix_rate();
+ unsigned int playback_delay = MIN(((50 * mix_rate) / 1000) * 2, buf.size() >> 1);
#ifdef DEBUG_ENABLED
- unsigned int capture_position = AudioServer::get_singleton()->get_capture_position();
+ unsigned int input_position = AudioDriver::get_singleton()->get_input_position();
#endif
- if (playback_delay > capture_size) {
+ if (playback_delay > input_size) {
for (int i = 0; i < p_frames; i++) {
p_buffer[i] = AudioFrame(0.0f, 0.0f);
}
- capture_ofs = 0;
+ input_ofs = 0;
} else {
for (int i = 0; i < p_frames; i++) {
- if (capture_size > capture_ofs && (int)capture_ofs < capture_buffer.size()) {
- float l = (capture_buffer[capture_ofs++] >> 16) / 32768.f;
- if ((int)capture_ofs >= capture_buffer.size()) {
- capture_ofs = 0;
+ if (input_size > input_ofs && (int)input_ofs < buf.size()) {
+ float l = (buf[input_ofs++] >> 16) / 32768.f;
+ if ((int)input_ofs >= buf.size()) {
+ input_ofs = 0;
}
- float r = (capture_buffer[capture_ofs++] >> 16) / 32768.f;
- if ((int)capture_ofs >= capture_buffer.size()) {
- capture_ofs = 0;
+ float r = (buf[input_ofs++] >> 16) / 32768.f;
+ if ((int)input_ofs >= buf.size()) {
+ input_ofs = 0;
}
p_buffer[i] = AudioFrame(l, r);
@@ -169,12 +169,12 @@ void AudioStreamPlaybackMicrophone::_mix_internal(AudioFrame *p_buffer, int p_fr
}
#ifdef DEBUG_ENABLED
- if (capture_ofs > capture_position && (int)(capture_ofs - capture_position) < (p_frames * 2)) {
- print_verbose(String(get_class_name()) + " buffer underrun: capture_position=" + itos(capture_position) + " capture_ofs=" + itos(capture_ofs) + " capture_size=" + itos(capture_size));
+ if (input_ofs > input_position && (int)(input_ofs - input_position) < (p_frames * 2)) {
+ print_verbose(String(get_class_name()) + " buffer underrun: input_position=" + itos(input_position) + " input_ofs=" + itos(input_ofs) + " input_size=" + itos(input_size));
}
#endif
- AudioServer::get_singleton()->unlock();
+ AudioDriver::get_singleton()->unlock();
}
void AudioStreamPlaybackMicrophone::mix(AudioFrame *p_buffer, float p_rate_scale, int p_frames) {
@@ -196,9 +196,9 @@ void AudioStreamPlaybackMicrophone::start(float p_from_pos) {
return;
}
- capture_ofs = 0;
+ input_ofs = 0;
- if (AudioServer::get_singleton()->capture_start() == OK) {
+ if (AudioDriver::get_singleton()->capture_start() == OK) {
active = true;
_begin_resample();
}
@@ -206,7 +206,7 @@ void AudioStreamPlaybackMicrophone::start(float p_from_pos) {
void AudioStreamPlaybackMicrophone::stop() {
if (active) {
- AudioServer::get_singleton()->capture_stop();
+ AudioDriver::get_singleton()->capture_stop();
active = false;
}
}
diff --git a/servers/audio/audio_stream.h b/servers/audio/audio_stream.h
index 58775c3d94..6d62eabec1 100644
--- a/servers/audio/audio_stream.h
+++ b/servers/audio/audio_stream.h
@@ -123,7 +123,7 @@ class AudioStreamPlaybackMicrophone : public AudioStreamPlaybackResampled {
friend class AudioStreamMicrophone;
bool active;
- unsigned int capture_ofs;
+ unsigned int input_ofs;
Ref<AudioStreamMicrophone> microphone;
diff --git a/servers/audio_server.cpp b/servers/audio_server.cpp
index ccb406bf9a..6ce07fb7b8 100644
--- a/servers/audio_server.cpp
+++ b/servers/audio_server.cpp
@@ -85,26 +85,26 @@ double AudioDriver::get_time_to_next_mix() const {
return mix_buffer - total;
}
-void AudioDriver::capture_buffer_init(int driver_buffer_frames) {
+void AudioDriver::input_buffer_init(int driver_buffer_frames) {
- const int capture_buffer_channels = 2;
- capture_buffer.resize(driver_buffer_frames * capture_buffer_channels * 4);
- capture_position = 0;
- capture_size = 0;
+ const int input_buffer_channels = 2;
+ input_buffer.resize(driver_buffer_frames * input_buffer_channels * 4);
+ input_position = 0;
+ input_size = 0;
}
-void AudioDriver::capture_buffer_write(int32_t sample) {
+void AudioDriver::input_buffer_write(int32_t sample) {
- if ((int)capture_position < capture_buffer.size()) {
- capture_buffer.write()[capture_position++] = sample;
- if ((int)capture_position >= capture_buffer.size()) {
- capture_position = 0;
+ if ((int)input_position < input_buffer.size()) {
+ input_buffer.write[input_position++] = sample;
+ if ((int)input_position >= input_buffer.size()) {
+ input_position = 0;
}
- if ((int)capture_size < capture_buffer.size()) {
- capture_size++;
+ if ((int)input_size < input_buffer.size()) {
+ input_size++;
}
} else {
- WARN_PRINTS("capture_buffer_write: Invalid capture_position=" + itos(capture_position) + " capture_buffer.size()=" + itos(capture_buffer.size()));
+ WARN_PRINTS("input_buffer_write: Invalid input_position=" + itos(input_position) + " input_buffer.size()=" + itos(input_buffer.size()));
}
}
@@ -154,8 +154,8 @@ AudioDriver::AudioDriver() {
_last_mix_time = 0;
_last_mix_frames = 0;
- capture_position = 0;
- capture_size = 0;
+ input_position = 0;
+ input_size = 0;
#ifdef DEBUG_ENABLED
prof_time = 0;
@@ -338,8 +338,6 @@ void AudioServer::_mix_step() {
E->get().callback(E->get().userdata);
}
- emit_signal("audio_mix_callback");
-
for (int i = buses.size() - 1; i >= 0; i--) {
//go bus by bus
Bus *bus = buses[i];
@@ -1059,8 +1057,6 @@ void AudioServer::update() {
E->get().callback(E->get().userdata);
}
-
- emit_signal("audio_update_callback");
}
void AudioServer::load_default_bus_layout() {
@@ -1079,7 +1075,6 @@ void AudioServer::finish() {
for (int i = 0; i < AudioDriverManager::get_driver_count(); i++) {
AudioDriverManager::get_driver(i)->finish();
- AudioDriverManager::get_driver(i)->clear_capture_buffer();
}
for (int i = 0; i < buses.size(); i++) {
@@ -1307,14 +1302,6 @@ void AudioServer::set_device(String device) {
AudioDriver::get_singleton()->set_device(device);
}
-Error AudioServer::capture_start() {
- return AudioDriver::get_singleton()->capture_start();
-}
-
-Error AudioServer::capture_stop() {
- return AudioDriver::get_singleton()->capture_stop();
-}
-
Array AudioServer::capture_get_device_list() {
return AudioDriver::get_singleton()->capture_get_device_list();
@@ -1330,18 +1317,6 @@ void AudioServer::capture_set_device(const String &p_name) {
AudioDriver::get_singleton()->capture_set_device(p_name);
}
-PoolVector<int32_t> AudioServer::get_capture_buffer() {
- return AudioDriver::get_singleton()->get_capture_buffer();
-}
-
-unsigned int AudioServer::get_capture_position() {
- return AudioDriver::get_singleton()->get_capture_position();
-}
-
-unsigned int AudioServer::get_capture_size() {
- return AudioDriver::get_singleton()->get_capture_size();
-}
-
void AudioServer::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_bus_count", "amount"), &AudioServer::set_bus_count);
@@ -1402,28 +1377,18 @@ void AudioServer::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_time_since_last_mix"), &AudioServer::get_time_since_last_mix);
ClassDB::bind_method(D_METHOD("get_output_latency"), &AudioServer::get_output_latency);
- ClassDB::bind_method(D_METHOD("capture_start"), &AudioServer::capture_start);
- ClassDB::bind_method(D_METHOD("capture_stop"), &AudioServer::capture_stop);
-
ClassDB::bind_method(D_METHOD("capture_get_device_list"), &AudioServer::capture_get_device_list);
ClassDB::bind_method(D_METHOD("capture_get_device"), &AudioServer::capture_get_device);
ClassDB::bind_method(D_METHOD("capture_set_device", "name"), &AudioServer::capture_set_device);
- ClassDB::bind_method(D_METHOD("get_capture_buffer"), &AudioServer::get_capture_buffer);
- ClassDB::bind_method(D_METHOD("get_capture_position"), &AudioServer::get_capture_position);
- ClassDB::bind_method(D_METHOD("get_capture_size"), &AudioServer::get_capture_size);
-
ClassDB::bind_method(D_METHOD("set_bus_layout", "bus_layout"), &AudioServer::set_bus_layout);
ClassDB::bind_method(D_METHOD("generate_bus_layout"), &AudioServer::generate_bus_layout);
ADD_PROPERTY(PropertyInfo(Variant::INT, "bus_count"), "set_bus_count", "get_bus_count");
ADD_PROPERTY(PropertyInfo(Variant::STRING, "device"), "set_device", "get_device");
- ADD_PROPERTY(PropertyInfo(Variant::STRING, "capture_device"), "capture_set_device", "capture_get_device");
ADD_PROPERTY(PropertyInfo(Variant::REAL, "global_rate_scale"), "set_global_rate_scale", "get_global_rate_scale");
ADD_SIGNAL(MethodInfo("bus_layout_changed"));
- ADD_SIGNAL(MethodInfo("audio_mix_callback"));
- ADD_SIGNAL(MethodInfo("audio_update_callback"));
BIND_ENUM_CONSTANT(SPEAKER_MODE_STEREO);
BIND_ENUM_CONSTANT(SPEAKER_SURROUND_31);
diff --git a/servers/audio_server.h b/servers/audio_server.h
index 8037c7feed..13d6abbc8d 100644
--- a/servers/audio_server.h
+++ b/servers/audio_server.h
@@ -53,14 +53,14 @@ class AudioDriver {
#endif
protected:
- PoolVector<int32_t> capture_buffer;
- unsigned int capture_position;
- unsigned int capture_size;
+ Vector<int32_t> input_buffer;
+ unsigned int input_position;
+ unsigned int input_size;
void audio_server_process(int p_frames, int32_t *p_buffer, bool p_update_mix_time = true);
void update_mix_time(int p_frames);
- void capture_buffer_init(int driver_buffer_frames);
- void capture_buffer_write(int32_t sample);
+ void input_buffer_init(int driver_buffer_frames);
+ void input_buffer_write(int32_t sample);
#ifdef DEBUG_ENABLED
_FORCE_INLINE_ void start_counting_ticks() { prof_ticks = OS::get_singleton()->get_ticks_usec(); }
@@ -111,11 +111,9 @@ public:
SpeakerMode get_speaker_mode_by_total_channels(int p_channels) const;
int get_total_channels_by_speaker_mode(SpeakerMode) const;
- PoolVector<int32_t> get_capture_buffer() { return capture_buffer; }
- unsigned int get_capture_position() { return capture_position; }
- unsigned int get_capture_size() { return capture_size; }
-
- void clear_capture_buffer() { capture_buffer.resize(0); }
+ Vector<int32_t> get_input_buffer() { return input_buffer; }
+ unsigned int get_input_position() { return input_position; }
+ unsigned int get_input_size() { return input_size; }
#ifdef DEBUG_ENABLED
uint64_t get_profiling_time() const { return prof_time; }
@@ -386,17 +384,10 @@ public:
String get_device();
void set_device(String device);
- Error capture_start();
- Error capture_stop();
-
Array capture_get_device_list();
String capture_get_device();
void capture_set_device(const String &p_name);
- PoolVector<int32_t> get_capture_buffer();
- unsigned int get_capture_position();
- unsigned int get_capture_size();
-
AudioServer();
virtual ~AudioServer();
};