Поделиться через


Практическое руководство. Динамическое добавление или удаление голосов из звукового графа

Вы можете изменять звуковые графы в любое время, чтобы добавлять или удалять голоса или целые подграфы. В этом разделе показано, как добавить или удалить субмиксы из графа, созданного следуя шагам в 'Практическое руководство: создание базового графа обработки звука'. Один голос может отправлять выходные данные на несколько голосов или в длинную цепочку голосов. Удаление или добавление одного голоса может иметь большое влияние на звуковой граф.

Динамическое изменение звукового графа

Добавление и удаление голосов из звукового графа очень похоже на добавление или удаление узлов из одного связанного списка или графа.

  • Добавление голоса или подграфа в звуковой граф

    Настройте выходные данные родительского голоса в графе на голос, который будет добавлен, используя функцию SetOutputVoices. Установите выходные данные нового голоса на исходную дочернюю версию родительского голоса.

    XAUDIO2_SEND_DESCRIPTOR send = {0, pNewVoice};
    XAUDIO2_VOICE_SENDS sendlist = {1, &send};
    pParentVoice->SetOutputVoices(&sendlist);
    send.pOutputVoice = pChildVoice;
    pNewVoice->SetOutputVoices(&sendlist);
    
  • Удаление голоса или подграфа из звукового графа

    Установите выходной голос родительского элемента на дочерний элемент удаляемого голоса. Если удаленный голос находится в конце графа, родительский голос должен быть изменен, чтобы указать на главный голос.

    XAUDIO2_SEND_DESCRIPTOR send = {0, pChildVoice};
    XAUDIO2_VOICE_SENDS sendlist = {1, &send};
    pParentVoice->SetOutputVoices(&sendlist);
    

Обратите внимание, что для ясности в этих примерах у каждого родителя только один потомок. Если родительский узел имеет несколько дочерних элементов, его список отправки будет содержать массив голосов, а не указатель только на один голос.

звуковых графов

Руководство по программированию XAudio2

Как построить базовый граф обработки аудио

Как использовать субмикс голосов

Практическое руководство. Создание цепочки эффектов