主要内容

生成多通道音频

此示例显示了如何使用多个音频通道设置连续音频生成。该信号是亨德尔的“Hallelujah Chorus”的样本,被分成连续的段,并分为两部分。该示例的第一部分在单个扬声器和子低音扬声器上播放每个段。第二部分在不同的扬声器(声音合唱团)上播放每个段。

加载音频数据

装载亨德尔的“Hallelujah”。

加载变量:

  • y代表Hallelujah波形

  • FS.代表采样频率

加载亨德尔;

创建数据采集

使用dataAcquisition对象使用DirectSound.作为供应商ID。

dq = daq(“directsound”

添加通道并调整生成扫描速率以匹配音频采样频率

添加六个音频输出通道并将生成扫描速率设置为音频采样率。

addoutput(dq,“Audio7”,1:6,“声音的”);dq.rate = fs;

绘制音频数据

目视识别与合唱中的每个“Hallelujah”对应的音频段,并选择这些段开始和停止的示例号。曲线中的每种颜色对应于合唱的不同段。

确定每个段的结束

在视觉上识别分段边界并标记它们。

细分= [20000,36000,45000,55000,长度(y)];

定义扬声器参数

在命名的小区数组中设置一系列扬声器扬声器在六个不同的扬声器中发挥“Hallelujah”的五个部分。

nspeakers = 6;nspeakergroups = 5;扬声器= Cell(1,NSpeakergroups);

将发言人分配给群组

每个扬声器选择指定来自5.1通道扬声器系统的发言者播放每个音频段(这些分配可能因扬声器系统而异)。对于该示例的第一部分,请使用与子低音扬声器(4)配对的单个扬声器。

  • 扬声器1:左前方

  • 扬声器2:右前方

  • 扬声器3:中心

  • 扬声器4:次低音扬声器

  • 扬声器5:左后方

  • 扬声器6:右后方

扬声器{1} = [4,6];%段1;扬声器4和6扬声器{2} = [4,5];%段2;扬声器4和5扬声器{3} = [1,4];%段3;扬声器1和4扬声器{4} = [2,4];%段4;演讲者2和4扬声器{5} = [3,4];%段5;扬声器3和4[singlechanneloutpuls] =......Surrownsoundvoics(y,segmentend,nspeakers,nspeakergroups,扬声器);

写入单通道输出

写一系列单通道输出然后暂停在继续下一节之前。

写(dq,singlechanneloutpuls);暂停(3);

将发言人分配给群组

每个扬声器选择指定来自5.1通道扬声器系统的发言者播放每个音频段(这些分配可能因扬声器系统而异)。对于示例的第二部分,使用扬声器组。请注意,子低音扬声器(4)包含在所有扬声器选择中

  • 扬声器1:左前方

  • 扬声器2:右前方

  • 扬声器3:中心

  • 扬声器4:次低音扬声器

  • 扬声器5:左后方

  • 扬声器6:右后方

扬声器{1} = [4,5,6];%段1;扬声器4,5,6扬声器{2} = [1,2,4];%段2;扬声器1,2,4扬声器{3} = [3,4];%段3;扬声器3,4扬声器{4} = [1,2,3,4];%段4;扬声器1,2,3,4扬声器{5} = [1,2,3,4,5,6];%段5;所有扬声器[MultiChannelOutput] =......Surrownsoundvoics(y,segmentend,nspeakers,nspeakergroups,扬声器);

编写多声道输出

写(DQ,MultiChannelOutput);
功能[MultichanneLOUTPUT] =环绕声(呼啸声,细分,NUMSPEAKERS,NUMSPeakergroups,扬声器组))%将输出波形的连续段分发给多个组一对一关系中的扬声器%。输入波形被打破%变成连续段。每个段由一个且唯一的段输出每组议员组,每组都被访问。%将输入波形分解为各种组播放的段百分声百分比。在这次演示中,我们想慢慢添加“声音”%通过递增具有更多扬声器生成输出波形。百分比,我们会将输出波形视为连续的%段的序列(每组扬声器的一个段)。例如,如果%我们有3组发言者,我们可以想到分手输出%波形到3个段:输出= [S1 S2 S3]%扬声器组1输出:S1 0 0%扬声器组2输出:0 S2 0%扬声器组3输出:0 0 S3MultichannelOutput = Repmat(0.01,长度(通风),NumSpeakers);startofsegment = [1(细分(1:结束-1)+1)];为了i = 1:numspeakergroups扬声器组=扬声器组{i};n = numel(扬声器组);为了j = 1:n范围= startofsetment(i):细分(i);MultichannelOutput(范围,扬声器群(j))=通风(范围);结尾结尾结尾