Download presentation
Presentation is loading. Please wait.
Published byAmelia Charles Modified over 9 years ago
2
The Audio Processing Graph © Allan C. Milne Abertay University v14.2.14
3
Agenda. The audio processing graph. Submix voices. Using submix voices.
4
The audio graph. The audio processing graph is the set of –All voices, with their contained effects; and –the interconnections between these voices. The entry points to this graph are the client-supplied audio streams; –As submitted to a source voice. Exit from the graph is to the audio device; –via the mastering voice.
5
Graph processing. The audio graph is maintained and processed by the XAudio2 engine. All processing is on a separate thread. Periodicity of this graph is currently –10ms for Windows; –5 1/3ms on Xbox.
6
Graph state changes. Creating and destroying voices. Starting or stopping voices. Changing the destinations of a voice. Modifying effect chains. Enabling or disabling effects. Setting parameters on effects, built-in SRCs, filters, volumes, and mixers.
7
Internal representation. Audio data is stored and processed in 32-bit floating point PCM form. Channel count and sample rate can vary within the graph. –Determined by the voice type and parameters. Sample rate and channel conversions between voices are handled by the XAudio2 engine as the audio data travels through the graph.
8
Voice type parameters. IXAudio2SourceVoice: –Channel count and sample rate of destination voices. IXaudio2SubmixVoice and IXAudio2MasteringVoice: –Input channels and sample rate used to create the voice.
9
Configuration limitations. All destination voices for a voice must have the same sample rate. Effects can change a voice’s channel count but not its sample rate. An effect chain's output channel count must match that of the voices to which it sends.
10
Source voice sample rates. Variable sample rate conversion (SRC) converts data from the input sample rate to the rate required for the send list. –NULL send list: target will be the mastering voice's input sample rate. –Send list with one voice: Target is that voice's input sample rate. Send list with multiple voices: –all the output voices must be running at the same input sample rate.
11
Submix voices. Send their output to 1 or more submix voices and /or the mastering voice. Can have multiple voices feeding them. Mix all inputs and operate on the result. Can apply volume adjustment, matrix mix, filters and effect chains. Have a fixed SRC to convert from input to required output sample rate.
12
Why use a submix voice? Performance improvements. Applying the same processing to a collection of sounds. Abstracting some or all processing from a source voice. Provide a single voice output for a game component.
13
Creating a submix voice. IXaudio2SubmixVoice *submix; HRESULT hr; hr = engine->CreateSubmixVoice (&submix, 2, 48000, XAUDIO2_VOICE_USEFILTER); if (FAILED (hr)) {... … } 2 = number of input channels. 48000 = input sample rate. Flag = enable filtering. No send list so destination will be the mastering voice.
14
CreateSubmixVoice(…) This factory method is overloaded: –Processing stage (see next slide). –Send list; –default is to send to mastering voice. –Effect chain.
15
Submix processing stage. The stage parameter specifies when this submix voice is processed: –Before submix voices with a larger value; –After submix voices with a smaller value. Submix voices with the same value are processed in any order. A submix voice cannot send to a submix voice with a lower or equal value. –Prevents audio being lost due to a submix cycle. Implies a hierarchical design strategy when creating complex audio scenes.
16
A simple scenario. route a source voice (source) –to a single submix voice (submix); –Add a filter to the submix voice. The source voice is no longer connected to the mastering voice; –So cannot be heard directly. The submix voice will be connected to the mastering voice via its send list; –Only the output from this submix voice will be heard.
17
Applying the filter. XAUDIO2_FILTER_PARAMETERS filterParameters; filterParameters.Frequency = 0.75f; filterParameters.OneOverQ = 1.0f; filterParameters.Type = LowPassFilter; submix->SetFilterParameters(&filterParameters); This is the same as applying a filter to a source voice.
18
Routing to a submix voice. XAUDIO2_SEND_DESCRIPTOR sendDesc = { 0, submix }; XAUDIO2_VOICE_SENDS sendList = { 1, &sendDesc }; source ->SetOutputVoices (&sendList); XAUDIO2_SEND_DESCRIPTOR : –A voice to send to. XAUDIO2_VOICE_SENDS : –List of individual send descriptors.
19
Notes on routing. XAUDIO2_SEND_DESCRIPTOR : –A voice to send to, defined by flag (= 0 or XAUDIO2_SEND_USEFILTER); Pointer to XAudio2 voice. XAUDIO2_VOICE_SENDS : –list of individual send descriptors, defined by Number of sends; Array of send descriptor structs. source ->SetOutputVoices (NULL); –routes to the default mastering voice.
20
Some notes. This seperates the source voice from the filtering process. Multiple source voices can send to this submix voice, –resulting in all of them having the same filtering applied. Switch off filtering by rerouting the source voice to the mastering voice. –Source->SetOutputVoices(NULL);
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.