2021-01-28 20:47:50 +01:00
<?xml version="1.0" encoding="UTF-8" ?>
2023-07-06 10:08:05 +02:00
<class name= "AudioEffectCapture" inherits= "AudioEffect" xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation= "../class.xsd" >
2021-01-28 20:47:50 +01:00
<brief_description >
Captures audio from an audio bus in real-time.
</brief_description>
<description >
AudioEffectCapture is an AudioEffect which copies all audio frames from the attached audio effect bus into its internal ring buffer.
2023-11-07 16:51:43 +01:00
Application code should consume these audio frames from this ring buffer using [method get_buffer] and process it as needed, for example to capture data from an [AudioStreamMicrophone], implement application-defined effects, or to transmit audio over the network. When capturing audio data from a microphone, the format of the samples will be stereo 32-bit floating-point PCM.
2023-11-28 13:59:12 +01:00
Unlike [AudioEffectRecord], this effect only returns the raw audio samples instead of encoding them into an [AudioStream].
2021-01-28 20:47:50 +01:00
</description>
<tutorials >
2022-06-20 01:11:11 +02:00
<link title= "Audio buses" > $DOCS_URL/tutorials/audio/audio_buses.html</link>
2021-01-28 20:47:50 +01:00
</tutorials>
<methods >
<method name= "can_get_buffer" qualifiers= "const" >
2021-07-30 15:28:05 +02:00
<return type= "bool" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "frames" type= "int" />
2021-01-28 20:47:50 +01:00
<description >
2022-08-12 19:51:01 +02:00
Returns [code]true[/code] if at least [param frames] audio frames are available to read in the internal ring buffer.
2021-01-28 20:47:50 +01:00
</description>
</method>
<method name= "clear_buffer" >
2021-07-30 15:28:05 +02:00
<return type= "void" />
2021-01-28 20:47:50 +01:00
<description >
Clears the internal ring buffer.
2023-11-07 16:51:43 +01:00
[b]Note:[/b] Calling this during a capture can cause the loss of samples which causes popping in the playback.
2021-01-28 20:47:50 +01:00
</description>
</method>
<method name= "get_buffer" >
2021-07-30 15:28:05 +02:00
<return type= "PackedVector2Array" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "frames" type= "int" />
2021-01-28 20:47:50 +01:00
<description >
2022-08-12 19:51:01 +02:00
Gets the next [param frames] audio samples from the internal ring buffer.
Returns a [PackedVector2Array] containing exactly [param frames] audio samples if available, or an empty [PackedVector2Array] if insufficient data was available.
2023-11-07 16:51:43 +01:00
The samples are signed floating-point PCM between [code]-1[/code] and [code]1[/code]. You will have to scale them if you want to use them as 8 or 16-bit integer samples. ([code]v = 0x7fff * samples[0].x[/code])
2021-01-28 20:47:50 +01:00
</description>
</method>
<method name= "get_buffer_length_frames" qualifiers= "const" >
2021-07-30 15:28:05 +02:00
<return type= "int" />
2021-01-28 20:47:50 +01:00
<description >
Returns the total size of the internal ring buffer in frames.
</description>
</method>
<method name= "get_discarded_frames" qualifiers= "const" >
2021-07-30 15:28:05 +02:00
<return type= "int" />
2021-01-28 20:47:50 +01:00
<description >
Returns the number of audio frames discarded from the audio bus due to full buffer.
</description>
</method>
<method name= "get_frames_available" qualifiers= "const" >
2021-07-30 15:28:05 +02:00
<return type= "int" />
2021-01-28 20:47:50 +01:00
<description >
Returns the number of frames available to read using [method get_buffer].
</description>
</method>
<method name= "get_pushed_frames" qualifiers= "const" >
2021-07-30 15:28:05 +02:00
<return type= "int" />
2021-01-28 20:47:50 +01:00
<description >
Returns the number of audio frames inserted from the audio bus.
</description>
</method>
</methods>
<members >
<member name= "buffer_length" type= "float" setter= "set_buffer_length" getter= "get_buffer_length" default= "0.1" >
2021-03-17 19:18:22 +01:00
Length of the internal ring buffer, in seconds. Setting the buffer length will have no effect if already initialized.
2021-01-28 20:47:50 +01:00
</member>
</members>
</class>