如何:从音频图中动态添加或删除语音

可以随时更改音频图以添加或删除语音或整个子图。 本主题介绍如何在按照如何 :生成基本音频处理图中的步骤创建的图形中添加或删除子混合语音。 单个语音可以将其输出发送到多个语音或一长串语音。 删除或添加单个语音可能会对音频图产生很大影响。

动态更改音频图

在音频图中添加和删除语音与在单链接列表或图形中添加或删除节点非常相似。

  • 向音频图添加语音或子图

    使用 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);
    

请注意,为清楚起见,在这些示例中,每个父级只有一个子级。 如果父节点有多个子节点,则其 sendlist 将包含语音数组,而不是仅指向一个语音的指针。

音频图

XAudio2 编程指南

如何:构建基本的音频处理图

如何:使用提交语音

如何:创建效果链