| 
									
										
										
										
											2023-01-05 13:25:55 +01:00
										 |  |  | /**************************************************************************/ | 
					
						
							|  |  |  | /*  audio_stream_player.cpp                                               */ | 
					
						
							|  |  |  | /**************************************************************************/ | 
					
						
							|  |  |  | /*                         This file is part of:                          */ | 
					
						
							|  |  |  | /*                             GODOT ENGINE                               */ | 
					
						
							|  |  |  | /*                        https://godotengine.org                         */ | 
					
						
							|  |  |  | /**************************************************************************/ | 
					
						
							|  |  |  | /* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */ | 
					
						
							|  |  |  | /* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur.                  */ | 
					
						
							|  |  |  | /*                                                                        */ | 
					
						
							|  |  |  | /* Permission is hereby granted, free of charge, to any person obtaining  */ | 
					
						
							|  |  |  | /* a copy of this software and associated documentation files (the        */ | 
					
						
							|  |  |  | /* "Software"), to deal in the Software without restriction, including    */ | 
					
						
							|  |  |  | /* without limitation the rights to use, copy, modify, merge, publish,    */ | 
					
						
							|  |  |  | /* distribute, sublicense, and/or sell copies of the Software, and to     */ | 
					
						
							|  |  |  | /* permit persons to whom the Software is furnished to do so, subject to  */ | 
					
						
							|  |  |  | /* the following conditions:                                              */ | 
					
						
							|  |  |  | /*                                                                        */ | 
					
						
							|  |  |  | /* The above copyright notice and this permission notice shall be         */ | 
					
						
							|  |  |  | /* included in all copies or substantial portions of the Software.        */ | 
					
						
							|  |  |  | /*                                                                        */ | 
					
						
							|  |  |  | /* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,        */ | 
					
						
							|  |  |  | /* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF     */ | 
					
						
							|  |  |  | /* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */ | 
					
						
							|  |  |  | /* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY   */ | 
					
						
							|  |  |  | /* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,   */ | 
					
						
							|  |  |  | /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE      */ | 
					
						
							|  |  |  | /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                 */ | 
					
						
							|  |  |  | /**************************************************************************/ | 
					
						
							| 
									
										
										
										
											2018-01-05 00:50:27 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-12 17:18:13 +01:00
										 |  |  | #include "audio_stream_player.h"
 | 
					
						
							| 
									
										
										
										
											2024-01-06 20:29:43 -06:00
										 |  |  | #include "audio_stream_player.compat.inc"
 | 
					
						
							| 
									
										
										
										
											2017-01-21 19:00:25 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-10 21:48:16 +01:00
										 |  |  | #include "scene/audio/audio_stream_player_internal.h"
 | 
					
						
							|  |  |  | #include "servers/audio/audio_stream.h"
 | 
					
						
							| 
									
										
										
										
											2023-12-23 17:30:32 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-18 21:07:32 -03:00
										 |  |  | void AudioStreamPlayer::_notification(int p_what) { | 
					
						
							| 
									
										
										
										
											2024-01-10 21:48:16 +01:00
										 |  |  | 	internal->notification(p_what); | 
					
						
							| 
									
										
										
										
											2023-12-23 17:30:32 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-18 21:07:32 -03:00
										 |  |  | void AudioStreamPlayer::set_stream(Ref<AudioStream> p_stream) { | 
					
						
							| 
									
										
										
										
											2024-01-10 21:48:16 +01:00
										 |  |  | 	internal->set_stream(p_stream); | 
					
						
							| 
									
										
										
										
											2023-12-23 17:30:32 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | bool AudioStreamPlayer::_set(const StringName &p_name, const Variant &p_value) { | 
					
						
							| 
									
										
										
										
											2024-01-10 21:48:16 +01:00
										 |  |  | 	return internal->set(p_name, p_value); | 
					
						
							| 
									
										
										
										
											2023-12-23 17:30:32 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | bool AudioStreamPlayer::_get(const StringName &p_name, Variant &r_ret) const { | 
					
						
							| 
									
										
										
										
											2024-01-10 21:48:16 +01:00
										 |  |  | 	return internal->get(p_name, r_ret); | 
					
						
							| 
									
										
										
										
											2023-12-23 17:30:32 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void AudioStreamPlayer::_get_property_list(List<PropertyInfo> *p_list) const { | 
					
						
							| 
									
										
										
										
											2024-01-10 21:48:16 +01:00
										 |  |  | 	internal->get_property_list(p_list); | 
					
						
							| 
									
										
										
										
											2017-01-21 19:00:25 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-18 21:07:32 -03:00
										 |  |  | Ref<AudioStream> AudioStreamPlayer::get_stream() const { | 
					
						
							| 
									
										
										
										
											2024-01-10 21:48:16 +01:00
										 |  |  | 	return internal->stream; | 
					
						
							| 
									
										
										
										
											2017-01-21 19:00:25 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-18 21:07:32 -03:00
										 |  |  | void AudioStreamPlayer::set_volume_db(float p_volume) { | 
					
						
							| 
									
										
										
										
											2024-04-18 11:28:57 -04:00
										 |  |  | 	ERR_FAIL_COND_MSG(Math::is_nan(p_volume), "Volume can't be set to NaN."); | 
					
						
							| 
									
										
										
										
											2024-01-10 21:48:16 +01:00
										 |  |  | 	internal->volume_db = p_volume; | 
					
						
							| 
									
										
										
										
											2021-08-27 10:28:23 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-27 21:51:03 -07:00
										 |  |  | 	Vector<AudioFrame> volume_vector = _get_volume_vector(); | 
					
						
							| 
									
										
										
										
											2024-01-10 21:48:16 +01:00
										 |  |  | 	for (Ref<AudioStreamPlayback> &playback : internal->stream_playbacks) { | 
					
						
							| 
									
										
										
										
											2021-08-27 21:51:03 -07:00
										 |  |  | 		AudioServer::get_singleton()->set_playback_all_bus_volumes_linear(playback, volume_vector); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-01-21 19:00:25 -03:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2020-05-14 14:29:06 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-18 21:07:32 -03:00
										 |  |  | float AudioStreamPlayer::get_volume_db() const { | 
					
						
							| 
									
										
										
										
											2024-01-10 21:48:16 +01:00
										 |  |  | 	return internal->volume_db; | 
					
						
							| 
									
										
										
										
											2017-01-21 19:00:25 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-11-13 22:06:46 -08:00
										 |  |  | void AudioStreamPlayer::set_volume_linear(float p_volume) { | 
					
						
							|  |  |  | 	set_volume_db(Math::linear_to_db(p_volume)); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | float AudioStreamPlayer::get_volume_linear() const { | 
					
						
							|  |  |  | 	return Math::db_to_linear(get_volume_db()); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-01 22:23:16 +01:00
										 |  |  | void AudioStreamPlayer::set_pitch_scale(float p_pitch_scale) { | 
					
						
							| 
									
										
										
										
											2024-01-10 21:48:16 +01:00
										 |  |  | 	internal->set_pitch_scale(p_pitch_scale); | 
					
						
							| 
									
										
										
										
											2018-01-01 22:23:16 +01:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2020-05-14 14:29:06 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-01 22:23:16 +01:00
										 |  |  | float AudioStreamPlayer::get_pitch_scale() const { | 
					
						
							| 
									
										
										
										
											2024-01-10 21:48:16 +01:00
										 |  |  | 	return internal->pitch_scale; | 
					
						
							| 
									
										
										
										
											2018-01-01 22:23:16 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-27 21:51:03 -07:00
										 |  |  | void AudioStreamPlayer::set_max_polyphony(int p_max_polyphony) { | 
					
						
							| 
									
										
										
										
											2024-01-10 21:48:16 +01:00
										 |  |  | 	internal->set_max_polyphony(p_max_polyphony); | 
					
						
							| 
									
										
										
										
											2021-08-27 21:51:03 -07:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int AudioStreamPlayer::get_max_polyphony() const { | 
					
						
							| 
									
										
										
										
											2024-01-10 21:48:16 +01:00
										 |  |  | 	return internal->max_polyphony; | 
					
						
							| 
									
										
										
										
											2021-08-27 21:51:03 -07:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-18 21:07:32 -03:00
										 |  |  | void AudioStreamPlayer::play(float p_from_pos) { | 
					
						
							| 
									
										
										
										
											2024-01-10 21:48:16 +01:00
										 |  |  | 	Ref<AudioStreamPlayback> stream_playback = internal->play_basic(); | 
					
						
							|  |  |  | 	if (stream_playback.is_null()) { | 
					
						
							| 
									
										
										
										
											2021-08-27 21:51:03 -07:00
										 |  |  | 		return; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2024-01-10 21:48:16 +01:00
										 |  |  | 	AudioServer::get_singleton()->start_playback_stream(stream_playback, internal->bus, _get_volume_vector(), p_from_pos, internal->pitch_scale); | 
					
						
							|  |  |  | 	internal->ensure_playback_limit(); | 
					
						
							| 
									
										
										
										
											2024-04-18 10:50:34 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// Sample handling.
 | 
					
						
							|  |  |  | 	if (stream_playback->get_is_sample() && stream_playback->get_sample_playback().is_valid()) { | 
					
						
							|  |  |  | 		Ref<AudioSamplePlayback> sample_playback = stream_playback->get_sample_playback(); | 
					
						
							|  |  |  | 		sample_playback->offset = p_from_pos; | 
					
						
							|  |  |  | 		sample_playback->volume_vector = _get_volume_vector(); | 
					
						
							|  |  |  | 		sample_playback->bus = get_bus(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		AudioServer::get_singleton()->start_sample_playback(sample_playback); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-01-21 19:00:25 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-18 21:07:32 -03:00
										 |  |  | void AudioStreamPlayer::seek(float p_seconds) { | 
					
						
							| 
									
										
										
										
											2024-01-10 21:48:16 +01:00
										 |  |  | 	internal->seek(p_seconds); | 
					
						
							| 
									
										
										
										
											2017-01-21 19:00:25 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-18 21:07:32 -03:00
										 |  |  | void AudioStreamPlayer::stop() { | 
					
						
							| 
									
										
										
										
											2024-08-11 20:27:15 +08:00
										 |  |  | 	internal->stop_basic(); | 
					
						
							| 
									
										
										
										
											2017-01-21 19:00:25 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-18 21:07:32 -03:00
										 |  |  | bool AudioStreamPlayer::is_playing() const { | 
					
						
							| 
									
										
										
										
											2024-01-10 21:48:16 +01:00
										 |  |  | 	return internal->is_playing(); | 
					
						
							| 
									
										
										
										
											2017-01-21 19:00:25 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-21 00:31:36 -03:00
										 |  |  | float AudioStreamPlayer::get_playback_position() { | 
					
						
							| 
									
										
										
										
											2024-01-10 21:48:16 +01:00
										 |  |  | 	return internal->get_playback_position(); | 
					
						
							| 
									
										
										
										
											2017-01-21 19:00:25 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-18 21:07:32 -03:00
										 |  |  | void AudioStreamPlayer::set_bus(const StringName &p_bus) { | 
					
						
							| 
									
										
										
										
											2024-01-10 21:48:16 +01:00
										 |  |  | 	internal->bus = p_bus; | 
					
						
							|  |  |  | 	for (const Ref<AudioStreamPlayback> &playback : internal->stream_playbacks) { | 
					
						
							| 
									
										
										
										
											2021-08-27 21:51:03 -07:00
										 |  |  | 		AudioServer::get_singleton()->set_playback_bus_exclusive(playback, p_bus, _get_volume_vector()); | 
					
						
							| 
									
										
										
										
											2021-08-27 10:28:23 -07:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-01-21 19:00:25 -03:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2020-05-14 14:29:06 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-18 21:07:32 -03:00
										 |  |  | StringName AudioStreamPlayer::get_bus() const { | 
					
						
							| 
									
										
										
										
											2024-01-10 21:48:16 +01:00
										 |  |  | 	return internal->get_bus(); | 
					
						
							| 
									
										
										
										
											2017-01-21 19:00:25 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-18 21:07:32 -03:00
										 |  |  | void AudioStreamPlayer::set_autoplay(bool p_enable) { | 
					
						
							| 
									
										
										
										
											2024-01-10 21:48:16 +01:00
										 |  |  | 	internal->autoplay = p_enable; | 
					
						
							| 
									
										
										
										
											2017-01-21 19:00:25 -03:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2020-05-14 14:29:06 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-06 20:29:43 -06:00
										 |  |  | bool AudioStreamPlayer::is_autoplay_enabled() const { | 
					
						
							| 
									
										
										
										
											2024-01-10 21:48:16 +01:00
										 |  |  | 	return internal->autoplay; | 
					
						
							| 
									
										
										
										
											2017-01-21 19:00:25 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-18 21:07:32 -03:00
										 |  |  | void AudioStreamPlayer::set_mix_target(MixTarget p_target) { | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	mix_target = p_target; | 
					
						
							| 
									
										
										
										
											2017-01-21 19:00:25 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-18 21:07:32 -03:00
										 |  |  | AudioStreamPlayer::MixTarget AudioStreamPlayer::get_mix_target() const { | 
					
						
							| 
									
										
										
										
											2017-01-21 19:00:25 -03:00
										 |  |  | 	return mix_target; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-18 21:07:32 -03:00
										 |  |  | void AudioStreamPlayer::_set_playing(bool p_enable) { | 
					
						
							| 
									
										
										
										
											2024-01-10 21:48:16 +01:00
										 |  |  | 	internal->set_playing(p_enable); | 
					
						
							| 
									
										
										
										
											2017-01-21 19:00:25 -03:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2020-05-14 14:29:06 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-27 15:29:10 -03:00
										 |  |  | void AudioStreamPlayer::set_stream_paused(bool p_pause) { | 
					
						
							| 
									
										
										
										
											2024-01-10 21:48:16 +01:00
										 |  |  | 	internal->set_stream_paused(p_pause); | 
					
						
							| 
									
										
										
										
											2018-05-27 15:29:10 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | bool AudioStreamPlayer::get_stream_paused() const { | 
					
						
							| 
									
										
										
										
											2024-01-10 21:48:16 +01:00
										 |  |  | 	return internal->get_stream_paused(); | 
					
						
							| 
									
										
										
										
											2021-08-27 10:28:23 -07:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Vector<AudioFrame> AudioStreamPlayer::_get_volume_vector() { | 
					
						
							|  |  |  | 	Vector<AudioFrame> volume_vector; | 
					
						
							|  |  |  | 	// We need at most four stereo pairs (for 7.1 systems).
 | 
					
						
							|  |  |  | 	volume_vector.resize(4); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Initialize the volume vector to zero.
 | 
					
						
							|  |  |  | 	for (AudioFrame &channel_volume_db : volume_vector) { | 
					
						
							|  |  |  | 		channel_volume_db = AudioFrame(0, 0); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-10 21:48:16 +01:00
										 |  |  | 	float volume_linear = Math::db_to_linear(internal->volume_db); | 
					
						
							| 
									
										
										
										
											2021-08-27 10:28:23 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// Set the volume vector up according to the speaker mode and mix target.
 | 
					
						
							|  |  |  | 	// TODO do we need to scale the volume down when we output to more channels?
 | 
					
						
							|  |  |  | 	if (AudioServer::get_singleton()->get_speaker_mode() == AudioServer::SPEAKER_MODE_STEREO) { | 
					
						
							|  |  |  | 		volume_vector.write[0] = AudioFrame(volume_linear, volume_linear); | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		switch (mix_target) { | 
					
						
							|  |  |  | 			case MIX_TARGET_STEREO: { | 
					
						
							|  |  |  | 				volume_vector.write[0] = AudioFrame(volume_linear, volume_linear); | 
					
						
							|  |  |  | 			} break; | 
					
						
							|  |  |  | 			case MIX_TARGET_SURROUND: { | 
					
						
							|  |  |  | 				// TODO Make sure this is right.
 | 
					
						
							|  |  |  | 				volume_vector.write[0] = AudioFrame(volume_linear, volume_linear); | 
					
						
							|  |  |  | 				volume_vector.write[1] = AudioFrame(volume_linear, /* LFE= */ 1.0f); | 
					
						
							|  |  |  | 				volume_vector.write[2] = AudioFrame(volume_linear, volume_linear); | 
					
						
							|  |  |  | 				volume_vector.write[3] = AudioFrame(volume_linear, volume_linear); | 
					
						
							|  |  |  | 			} break; | 
					
						
							|  |  |  | 			case MIX_TARGET_CENTER: { | 
					
						
							|  |  |  | 				// TODO Make sure this is right.
 | 
					
						
							|  |  |  | 				volume_vector.write[1] = AudioFrame(volume_linear, /* LFE= */ 1.0f); | 
					
						
							|  |  |  | 			} break; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return volume_vector; | 
					
						
							| 
									
										
										
										
											2018-05-27 15:29:10 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-12 23:57:11 +03:00
										 |  |  | void AudioStreamPlayer::_validate_property(PropertyInfo &p_property) const { | 
					
						
							| 
									
										
										
										
											2024-01-10 21:48:16 +01:00
										 |  |  | 	internal->validate_property(p_property); | 
					
						
							| 
									
										
										
										
											2017-01-21 19:00:25 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-28 03:25:49 +09:00
										 |  |  | bool AudioStreamPlayer::has_stream_playback() { | 
					
						
							| 
									
										
										
										
											2024-01-10 21:48:16 +01:00
										 |  |  | 	return internal->has_stream_playback(); | 
					
						
							| 
									
										
										
										
											2023-01-28 03:25:49 +09:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-10 12:57:03 -03:00
										 |  |  | Ref<AudioStreamPlayback> AudioStreamPlayer::get_stream_playback() { | 
					
						
							| 
									
										
										
										
											2024-01-10 21:48:16 +01:00
										 |  |  | 	return internal->get_stream_playback(); | 
					
						
							| 
									
										
										
										
											2019-04-10 12:57:03 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-18 10:50:34 -04:00
										 |  |  | AudioServer::PlaybackType AudioStreamPlayer::get_playback_type() const { | 
					
						
							|  |  |  | 	return internal->get_playback_type(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void AudioStreamPlayer::set_playback_type(AudioServer::PlaybackType p_playback_type) { | 
					
						
							|  |  |  | 	internal->set_playback_type(p_playback_type); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-18 21:07:32 -03:00
										 |  |  | void AudioStreamPlayer::_bind_methods() { | 
					
						
							| 
									
										
										
										
											2017-08-09 13:19:41 +02:00
										 |  |  | 	ClassDB::bind_method(D_METHOD("set_stream", "stream"), &AudioStreamPlayer::set_stream); | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("get_stream"), &AudioStreamPlayer::get_stream); | 
					
						
							| 
									
										
										
										
											2017-01-21 19:00:25 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-18 21:07:32 -03:00
										 |  |  | 	ClassDB::bind_method(D_METHOD("set_volume_db", "volume_db"), &AudioStreamPlayer::set_volume_db); | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("get_volume_db"), &AudioStreamPlayer::get_volume_db); | 
					
						
							| 
									
										
										
										
											2017-01-21 19:00:25 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-11-13 22:06:46 -08:00
										 |  |  | 	ClassDB::bind_method(D_METHOD("set_volume_linear", "volume_linear"), &AudioStreamPlayer::set_volume_linear); | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("get_volume_linear"), &AudioStreamPlayer::get_volume_linear); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-01 22:23:16 +01:00
										 |  |  | 	ClassDB::bind_method(D_METHOD("set_pitch_scale", "pitch_scale"), &AudioStreamPlayer::set_pitch_scale); | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("get_pitch_scale"), &AudioStreamPlayer::get_pitch_scale); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-10 15:37:49 +02:00
										 |  |  | 	ClassDB::bind_method(D_METHOD("play", "from_position"), &AudioStreamPlayer::play, DEFVAL(0.0)); | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("seek", "to_position"), &AudioStreamPlayer::seek); | 
					
						
							| 
									
										
										
										
											2017-06-18 21:07:32 -03:00
										 |  |  | 	ClassDB::bind_method(D_METHOD("stop"), &AudioStreamPlayer::stop); | 
					
						
							| 
									
										
										
										
											2017-01-21 19:00:25 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-18 21:07:32 -03:00
										 |  |  | 	ClassDB::bind_method(D_METHOD("is_playing"), &AudioStreamPlayer::is_playing); | 
					
						
							| 
									
										
										
										
											2017-09-21 00:31:36 -03:00
										 |  |  | 	ClassDB::bind_method(D_METHOD("get_playback_position"), &AudioStreamPlayer::get_playback_position); | 
					
						
							| 
									
										
										
										
											2017-01-21 19:00:25 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-18 21:07:32 -03:00
										 |  |  | 	ClassDB::bind_method(D_METHOD("set_bus", "bus"), &AudioStreamPlayer::set_bus); | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("get_bus"), &AudioStreamPlayer::get_bus); | 
					
						
							| 
									
										
										
										
											2017-01-21 19:00:25 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-18 21:07:32 -03:00
										 |  |  | 	ClassDB::bind_method(D_METHOD("set_autoplay", "enable"), &AudioStreamPlayer::set_autoplay); | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("is_autoplay_enabled"), &AudioStreamPlayer::is_autoplay_enabled); | 
					
						
							| 
									
										
										
										
											2017-01-21 19:00:25 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-18 21:07:32 -03:00
										 |  |  | 	ClassDB::bind_method(D_METHOD("set_mix_target", "mix_target"), &AudioStreamPlayer::set_mix_target); | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("get_mix_target"), &AudioStreamPlayer::get_mix_target); | 
					
						
							| 
									
										
										
										
											2017-01-21 19:00:25 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-15 16:22:57 +02:00
										 |  |  | 	ClassDB::bind_method(D_METHOD("set_playing", "enable"), &AudioStreamPlayer::_set_playing); | 
					
						
							| 
									
										
										
										
											2017-01-21 19:00:25 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-27 15:29:10 -03:00
										 |  |  | 	ClassDB::bind_method(D_METHOD("set_stream_paused", "pause"), &AudioStreamPlayer::set_stream_paused); | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("get_stream_paused"), &AudioStreamPlayer::get_stream_paused); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-27 21:51:03 -07:00
										 |  |  | 	ClassDB::bind_method(D_METHOD("set_max_polyphony", "max_polyphony"), &AudioStreamPlayer::set_max_polyphony); | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("get_max_polyphony"), &AudioStreamPlayer::get_max_polyphony); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-28 03:25:49 +09:00
										 |  |  | 	ClassDB::bind_method(D_METHOD("has_stream_playback"), &AudioStreamPlayer::has_stream_playback); | 
					
						
							| 
									
										
										
										
											2019-04-10 12:57:03 -03:00
										 |  |  | 	ClassDB::bind_method(D_METHOD("get_stream_playback"), &AudioStreamPlayer::get_stream_playback); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-18 10:50:34 -04:00
										 |  |  | 	ClassDB::bind_method(D_METHOD("set_playback_type", "playback_type"), &AudioStreamPlayer::set_playback_type); | 
					
						
							|  |  |  | 	ClassDB::bind_method(D_METHOD("get_playback_type"), &AudioStreamPlayer::get_playback_type); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "stream", PROPERTY_HINT_RESOURCE_TYPE, "AudioStream"), "set_stream", "get_stream"); | 
					
						
							| 
									
										
										
										
											2021-12-02 18:09:19 -06:00
										 |  |  | 	ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "volume_db", PROPERTY_HINT_RANGE, "-80,24,suffix:dB"), "set_volume_db", "get_volume_db"); | 
					
						
							| 
									
										
										
										
											2024-11-13 22:06:46 -08:00
										 |  |  | 	ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "volume_linear", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NONE), "set_volume_linear", "get_volume_linear"); | 
					
						
							| 
									
										
										
											
												Variant: Added 64-bit packed arrays, renamed Variant::REAL to FLOAT.
- Renames PackedIntArray to PackedInt32Array.
- Renames PackedFloatArray to PackedFloat32Array.
- Adds PackedInt64Array and PackedFloat64Array.
- Renames Variant::REAL to Variant::FLOAT for consistency.
Packed arrays are for storing large amount of data and creating stuff like
meshes, buffers. textures, etc. Forcing them to be 64 is a huge waste of
memory. That said, many users requested the ability to have 64 bits packed
arrays for their games, so this is just an optional added type.
For Variant, the float datatype is always 64 bits, and exposed as `float`.
We still have `real_t` which is the datatype that can change from 32 to 64
bits depending on a compile flag (not entirely working right now, but that's
the idea). It affects math related datatypes and code only.
Neither Variant nor PackedArray make use of real_t, which is only intended
for math precision, so the term is removed from there to keep only float.
											
										 
											2020-02-24 15:20:53 -03:00
										 |  |  | 	ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "pitch_scale", PROPERTY_HINT_RANGE, "0.01,4,0.01,or_greater"), "set_pitch_scale", "get_pitch_scale"); | 
					
						
							| 
									
										
										
										
											2024-08-18 04:00:43 +09:00
										 |  |  | 	ADD_PROPERTY(PropertyInfo(Variant::BOOL, "playing", PROPERTY_HINT_ONESHOT, "", PROPERTY_USAGE_EDITOR), "set_playing", "is_playing"); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	ADD_PROPERTY(PropertyInfo(Variant::BOOL, "autoplay"), "set_autoplay", "is_autoplay_enabled"); | 
					
						
							| 
									
										
										
										
											2018-05-27 15:29:10 -03:00
										 |  |  | 	ADD_PROPERTY(PropertyInfo(Variant::BOOL, "stream_paused", PROPERTY_HINT_NONE, ""), "set_stream_paused", "get_stream_paused"); | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	ADD_PROPERTY(PropertyInfo(Variant::INT, "mix_target", PROPERTY_HINT_ENUM, "Stereo,Surround,Center"), "set_mix_target", "get_mix_target"); | 
					
						
							| 
									
										
										
										
											2021-08-27 21:51:03 -07:00
										 |  |  | 	ADD_PROPERTY(PropertyInfo(Variant::INT, "max_polyphony", PROPERTY_HINT_NONE, ""), "set_max_polyphony", "get_max_polyphony"); | 
					
						
							| 
									
										
										
										
											2020-02-20 18:58:05 -03:00
										 |  |  | 	ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "bus", PROPERTY_HINT_ENUM, ""), "set_bus", "get_bus"); | 
					
						
							| 
									
										
										
										
											2024-04-18 10:50:34 -04:00
										 |  |  | 	ADD_PROPERTY(PropertyInfo(Variant::INT, "playback_type", PROPERTY_HINT_ENUM, "Default,Stream,Sample"), "set_playback_type", "get_playback_type"); | 
					
						
							| 
									
										
										
										
											2017-08-25 11:58:21 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	ADD_SIGNAL(MethodInfo("finished")); | 
					
						
							| 
									
										
										
										
											2017-09-12 22:09:06 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	BIND_ENUM_CONSTANT(MIX_TARGET_STEREO); | 
					
						
							|  |  |  | 	BIND_ENUM_CONSTANT(MIX_TARGET_SURROUND); | 
					
						
							|  |  |  | 	BIND_ENUM_CONSTANT(MIX_TARGET_CENTER); | 
					
						
							| 
									
										
										
										
											2017-01-21 19:00:25 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-18 21:07:32 -03:00
										 |  |  | AudioStreamPlayer::AudioStreamPlayer() { | 
					
						
							| 
									
										
										
										
											2024-08-11 20:27:15 +08:00
										 |  |  | 	internal = memnew(AudioStreamPlayerInternal(this, callable_mp(this, &AudioStreamPlayer::play), callable_mp(this, &AudioStreamPlayer::stop), false)); | 
					
						
							| 
									
										
										
										
											2017-01-21 19:00:25 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-18 21:07:32 -03:00
										 |  |  | AudioStreamPlayer::~AudioStreamPlayer() { | 
					
						
							| 
									
										
										
										
											2024-01-10 21:48:16 +01:00
										 |  |  | 	memdelete(internal); | 
					
						
							| 
									
										
										
										
											2017-01-21 19:00:25 -03:00
										 |  |  | } |