开放标准/ChoirWire 分布式音频混音/ChoirWire 标准定义
数据传输由一个双向冗余环形系统组成。
图 4:双向数据传输原理
它承载来自分布式输入到数据收集器的主要音频数据、监听音频数据和状态数据,以及来自数据收集器到分布式输入的音频数据和控制数据。
第一个接收来自两侧数据的输入将忽略其中一侧,并将数据发送到另一侧,因为接收到的数据是冗余的。如果控制和音乐数据流失败,则将检查之前被忽略的一侧是否有有效数据。使用此机制可以检测单个缺陷,并将其屏蔽!
音频数据应以 48kHz 的采样率进行。编解码器需要 256*48kHz = 12.288Mhz 总线时钟。应该能够找到一个使用标准 8 位编码的 6144 kBaud 总线时钟工作的 UART。因此,每帧可以使用 12 个字节:3 个左声道、3 个右声道、6 个监听声道。
除了数据外,分布式输入还提供 48V 的直流电压。这使得在输入中使用 DC/DC 转换模块成为必需,但减少了流过电源线的电流。如果需要,可以在物理环中使用多个电源并联为输入供电。
图 5:分布式系统中的电源和数据流
环形的实际实现相当糟糕,不适合在舞台上快速安装。然而,只有环形真正地对断线具有容错性。
一根带有简单插头的电线,可以插入舞台上的任何地方,并且连接始终正确,作为双连接环,使用起来容易得多。
折衷方案:舞台箱(根据需要设置数量)连接成环,分布式输入连接到舞台箱。更重要的是,分布式输入链是可能的。
为了保持数据环路的闭合,必须使用带有旁路开关的母连接器:插入连接器时,物理环路将通过输入循环,没有连接器时,物理环路将闭合。插拔过程中的短路会干扰数据流,甚至更糟糕的是,会切断电源并重置整个系统,这将导致声音中断。一种满足旁路开关和防短路插拔需求的连接系统是德国 TAE 模拟电话连接(参见维基百科 TAE 连接器)。(奥地利的电话插座有更多引脚,因此可以实现电源冗余。但它们通常并非所有引脚都连接(只有 6 个) - 并且价格更高。)
-
图 6:TAE 连接器
-
图 7:TAE 插座
TAE 插座有 6 个触点。如果未插入连接器,则通过母连接器中的开关将触点 1-6 和 2-5 连接起来。触点 3-4 没有此功能。触点不镀金 - 但对于像舞台上的短期使用来说,没有时间氧化。并且插头不太小且灵敏,电缆出口受到保护 - 更适合在舞台上使用。应使用编码“F”。(其他连接器?好吧,必须有一个旁路开关,因此美国电话或网络插座不适用。不过,欢迎更好的解决方案。)
在这个系统中,接地和电源非常重要。引脚 3 为正 48V,引脚 4 连接到接地。引脚 1/2 和 5/6 上的两对信号线用于双向传输。因此,可以检测到断线并使用另一个信号路径。如果分布式输入配备了插座(以创建链),则需要更改信号方向(环路左侧 - 环路右侧)。因此,每隔两个输入,信号就会被重复 - 而不仅仅是多次旁路。这提高了信号传输稳定性,即使是在长链中,因为输入充当信号中继器。
互连需要屏蔽电缆。建议:使用 RF 阻抗为 100 欧姆的对称网络电缆。在舞台箱和输入之间,可以使用 4 对网络电缆:2 对用于数据通信,另外两对用于电源。也许 USB 3.0 电缆(带有 3 对和电源线)也可以,但它的阻抗为 90 欧姆。
舞台箱主要由电话标准插座“F F”组成,该插座有两个插孔。可以插入两个连接器。使用标准“NFN”电话插座,引脚 3 和 4 无法单独访问,无法添加(PTC-)保险丝。只有单“F”和双“F F”插座才能提供这种可能性。(实际上,可以从连接器上切断编码喷嘴 - 然后就可以在 N 或 F 插座中使用 N 或 F 连接器)。
来自和到数据收集器的传输应通过 100 欧姆网络电缆完成。只需要一对 - 所以另外三对可以携带 48V 电源。或者,可以使用一根 1 对网络电缆和一根带有大铜线直径的 1 对电源线。
电源线容易发生短路,因此 48V 和 GND 之间需要保持合理的距离。假设最多有 254 个分布式输入,每个输入的功耗为 2W,则总功耗为 508W。因此,舞台箱环中的电源线必须承受最大 10.6A 的电流。电话“F”连接器的限流约为 0.5A。为了防止过载,舞台箱中应使用 PTC 电阻器(聚合物开关保险丝)将输出电流限制在 0.5A。因此,每个输入链(每个链的功耗为 2W)的长度限制为 12。舞台箱的数量不受限制。对于电源连接和数据,建议使用带 4 个引脚的 XLR 连接器。(欢迎更好的解决方案。)引脚 4(靠近标记)用作 GND,引脚 2+3 用于数据,引脚 1 承载 48V。因此,GND 和 48V 之间的距离最大。
将舞台箱连接到环的 4 极 XLR 连接器
此草图描述了电源、数据收集器、舞台箱、带有插座的分布式输入和远程混音控制台的完整接线图
图 11:ChoirWire 接线图示例
数据线双向使用。因此,收发器必须模拟屏蔽掉自己发送的信号。更重要的是,建议使用磁性变压器。这样,结合隔离的DC/CD转换器(48V到5V),很容易使分布式输入实现电气隔离。来自电源的干扰将被降到最低。数据传输速率为48kHz * 128bits = 6.144MBit,因此变压器所需的带宽为(6.144MBit / 10Bits/byte =)614kHz至(6.144MBit/2Bit * 5 =)15.36 MHz。(至少6.144MBit/2Bit*3 = 9.216MHz)。为了消除直流偏移,使用了类似“交替标记”的RZ编码。在类似UART的通信中,信号线上的空闲电平为高,有效电平为低。因此,对于UART来说,一条“静默”的线路为高(空闲)意味着通信线上没有传输脉冲。
实现示例:交替信号的生成由一个分频器(D触发器)完成,该分频器在每次发送低电平信号时翻转。缺点是,需要传输时钟。微控制器的标准SPI输出可以实现这一点。使用三态线驱动器和三个电阻,可以产生三个电压电平。在三态(SPI-TX信号高电平)时,中等电压被施加到收发器放大器。如果SPI-TX信号为低电平,则输出触发器电平。收发器应以约90欧姆的阻抗输出串行信号。由于线和接收器阻抗以及视频放大器的输出摆幅,信号线上的电压摆幅为1Vpp。差分放大器将发送和接收信号混合到接收通道,从而消除自身发送的信号。窗口比较器电路(具有较小的迟滞)检测“电压接近零”(<40%的输入摆幅)或“电压存在”(>60%的输入摆幅)。通过OR(此处使用二极管和上拉电阻),为微控制器生成一个与UART兼容的信号以接收数据。
图12:收发器示例
有两个数据方向
- 从数据收集器到分布式输入的控制和监控数据,以及
- 从分布式从机到数据收集器的状态和音乐数据。
此描述对两个方向都有效:从输入到数据收集器,反之亦然。
在一个48kHz周期内,有128个数据传输位时间。因此,可以传输12个字节,包含1个起始位、1个停止位和8个数据字节。
LSB优先(标准UART)。
分布式输入从前一个输入接收音乐数据(主音和监控),并将自己的音乐数据添加到其中。传输从LSB优先开始。因此,如果使用逻辑器件,则可以将延迟减少到每个分布式输入的一个位时间
用于:接收来自前一个输入的LSB,添加自己的LSB,并将其发送出去。(示例:数据速率48kHz * 128bits = 6144kb/s --> 位时间为0.1627µs = 每个输入的延迟 --> 256个输入可实现41.65µs的延迟)。
数据收集器将来自左右物理环的音乐数据相加,然后得到完整的音乐数据。完整的音乐数据然后通过两条信号线发送回物理环。因此,网络中的任何地方都可以接收主混音输出和2-4个监控通道。(“虚拟X巴”)
为了给质量提供最大的灵活性,可以选择四种传输模式
模式 | 主通道 | 监控通道 | 通道总和 |
---|---|---|---|
0(默认) | 16bit L,16bit R | 2x15bit,2x16bit | 6个通道 |
1 | 23bit L,23bit R | 2x24bit | 4个通道 |
2 | 23bit L,23bit R | 3x16bit | 5个通道 |
3 | 23bit L,23bit R | 4x12bit | 6个通道 |
在音乐数据中,集成了两个控制位。因此,每秒可以传输96kBits的控制数据。必须确保数据位始终处于相同的位置。复位后,如果模式未知,则使用16位的主通道。监控通道需要几毫秒。在输入接收配置命令(7)之前,监控通道将被忽略(没有信号输出)。
模式0(默认)
字节1 | 字节2 | 字节3 | 字节4 | 字节5 | 字节6 | 字节7 | 字节8 | 字节9 | 字节10 | 字节11 | 字节12 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Mon1_LSB | Mon1_MSB | Mon2_LSB | D1+Mon2 | mainL_LSB | mainL_MSB | Mon3_LSB | Mon3_MSB | Mon4_LSB | D2+Mon4 | mainR_LSB | mainR_MSB | |
b7..b0 | b15..b7 | b7..b0 | D1,b14..b8 | b7..b0 | b15..b8 | b7..b0 | b15..b7 | b7..b0 | D2,b14..b8 | b7..b0 | b15..b8 |
模式1
字节1 | 字节2 | 字节3 | 字节4 | 字节5 | 字节6 | 字节7 | 字节8 | 字节9 | 字节10 | 字节11 | 字节12 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Mon1_LSB | Mon1_mid | Mon1_MSB | D1+mainL | mainL_mid | mainL_MSB | Mon2_LSB | Mon2_mid | Mon2_MSB | D2+mainR | mainR_mid | mainR_MSB | |
b7..b0 | b15..b8 | b23..b16 | D1,b6..b0 | b14..b7 | b22..b15 | b7..b0 | b15..b8 | b23..b16 | D2,b6..b0 | b14..b7 | b22..b15 |
模式2
字节1 | 字节2 | 字节3 | 字节4 | 字节5 | 字节6 | 字节7 | 字节8 | 字节9 | 字节10 | 字节11 | 字节12 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Mon1_LSB | Mon1_MSB | Mon2_LSB | D1+mainL | mainL_mid | mainL_MSB | Mon2_MSB | Mon3_LSB | Mon2_MSB | D2+mainR | mainR_mid | mainR_MSB | |
b7..b0 | b15..b8 | b7..b0 | D1,b6..b0 | b14..b7 | b22..b15 | b15..b8 | b7..b0 | b15..b8 | D2,b6..b0 | b14..b7 | b22..b15 |
模式3
字节1 | 字节2 | 字节3 | 字节4 | 字节5 | 字节6 | 字节7 | 字节8 | 字节9 | 字节10 | 字节11 | 字节12 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Mon1_LSB | Mon2/Mon1 | Mon2_MSB | D1+mainL | mainL_mid | mainL_MSB | Mon3_LSB | Mon4/Mon3 | Mon4_MSB | D2+mainR | mainR_mid | mainR_MSB | |
b7..b0 | b3..b0/B11..b8 | b11..b4 | D1,b6..b0 | b14..b7 | b22..b15 | b7..b0 | b3..b0/B11..b8 | b11..b4 | D2,b6..b0 | b14..b7 | b22..b15 |
首要目标是传输音乐,而不是传输不必要的数据。因此,这96kB/s被用作异步数据传输:数据流由连续数据位D1-D2-D1-D2-D1-D2-D1-D2的内容组成,依此类推。空闲状态为逻辑“1”。数据传输由起始位过渡到“0”开始。然后,以字节为单位发送8位数据内容,LSB
优先,以模拟标准UART协议。因此,可以很容易地将发送/接收的数据位路由到通用IO端口,在那里它们可以通过其他标准UART接收/传输。为了用新的音量值调整所有可能的256个输入,并让10位同步暂停,这将需要(256 x 40位 ./ 96k位/秒 =)
107毫秒。这足够快,特别是如果只处理正在使用的输入。
字节1 | 字节2 | 字节3 |
---|---|---|
分布式输入的地址 | 参数切换 | 参数值 |
图13:控制消息的数据字节
为了兼容性,以下参数切换必须具有相同的含义,并且对所有ChoirWire节点都是强制性的
参数 (字节2) |
含义 (字节3的) |
值范围 | 物理值范围 |
---|---|---|---|
0 | 主音量左 | 0, 1..255 | 关,-76.2dB…0dB,以0.3dB/位 |
1 | 主音量右 | 0, 1..255 | 关,-76.2dB…0dB,以0.3dB/位 |
2 | 监控1音量 | 0, 1..255 | 关,-76.2dB…0dB,以0.3dB/位 |
3 | 监控2音量 | 0, 1..255 | 关,-76.2dB…0dB,以0.3dB/位 |
4 | 监控3音量 | 0, 1..255 | 关,-76.2dB…0dB,以0.3dB/位 |
5 | 监控4音量 | 0, 1..255 | 关,-76.2dB…0dB,以0.3dB/位 |
6 | 独奏音量增益 | -128…0…127 | -38,4dB…0dB…+37,8dB,以0,3dB/位 |
7 | 选择反馈 | 0 1 2 3 4 5 6 7 |
主左+右的VU平均值 VU主左 VU主右 VU监控1 VU监控2 VU监控3 VU监控4 电源(0..31 = 80..100%) |
8 | 配置 | 位1,位0 位2 位3 |
00 = 4个12位的监控通道 01 = 3个16位的监控通道 10 = 2个24位的监控通道 11 = 监控通道关闭 打开独奏音量偏移和独奏灯 发出寻址请求 |
9 | 低通调整 | -128…0…127 | -100%...0%...+100% |
10 | 中频调整 | -128…0…127 | -100%...0%...+100% |
11 | 中频 | 0..255 | 200Hz…5000Hz |
12 | 高通调整 | -128…0…127 | -100%...0%...+100% |
13 | 保留 | ||
14 | 保留 | ||
15 | 保留 | ||
16 ... 63 |
自由范围 用于 特殊用途 |
||
64 ... 255 |
保留 用于 将来使用 |
图14:包含可能参数的表格
最后被寻址的输入会用它的地址进行响应,其他所有输入保持静默。
字节1 | 字节2 |
---|---|
最后被寻址的输入的地址 | 选择的答案 |
字节2的编码比较复杂,但确保快速响应。
位7 | 位6 | 位5 | 位4... 位0 |
---|---|---|---|
来自下一个输入的无响应(线路断开) 输入(线路断开) |
独奏增益开关 开或关 |
待定 | 实际信号电平 0…31 = -75.6dB….0dB 最大输出电平 每位2.4dB。 |
来自前一个输入的数据必须在输入中进行缓冲,以避免由于传输时间导致的数据冲突。如果来自前一个输入的数据传输正在运行,则输入必须等待其数据的传输。如果一个输入正在传输状态数据,则前一个输入的数据将在FIFO缓冲区中进行缓冲。数据收集器也必须缓冲来自物理环左右臂的数据。发送给输入的数据(3个字节)比反馈数据(2个字节)长。因此,有足够的时间传输所有数据,但需要缓冲区来处理由于延迟时间导致的冲突。
通信从数据收集器开始,朝两个方向(左环臂和右环臂)进行。因为数据流的空闲阶段短于一个字节,所以每隔两帧只发送一帧。
图15:同步步骤1
如果正确识别了通信开始,则音乐数据将以半速发送回来。这样,数据收集器(或前面的分布式输入)可以同步。
图16:同步步骤2
如果数据收集器已经正确地进行了通信,并且只要数据收集器正确地进行了通信,它就会开始发送每一帧。如果输入2、3的另一侧一直处于静默状态,它就会开始传输下一个输入块的控制流。
图17:同步步骤3
由于数据收集器以全速传输,所以输入2和3也以全速发送回来。输入1将从两侧接收数据,因此找不到“空闲侧”。它必须选择一个方向。第一个正确接收的帧将确定这个方向。时间差可能是由线路延迟或程序顺序引起的。在本示例中,左环臂先进行了传输。
图18:同步步骤4
对于输入 1,两侧都有正确的数据,因此它知道环路已闭合。在接收到全速控制数据后,它只发送回左侧,但也是全速。
图 19:同步步骤 5
同步和数据传输的状态转换作为状态图
图 20:状态转换图
- “数据已接收”表示完整 12 字节帧已接收,没有停止位错误。
对于从数据采集器到混音台的数据传输,可以使用带有 3 针 XLR 连接器的标准音频线。另外,还提供带有 9 针的 Sub-D 连接器,以便可以使用 RS232 空模电缆。
图 21:XLR 连接器 图 22:RS232 空模电缆
母连接器在混音台,公连接器在数据采集器。针脚 1 连接到接地,针脚 2 用于从混音台到数据采集器的数据传输,针脚 3 用于从数据采集器到混音台的数据传输。
数据采集器上的 Sub-D 9 针公头:针脚 5 连接到接地,针脚 2 为 RX,用于从混音台到数据采集器的数据传输,针脚 3 为 TX,用于从数据采集器到混音台的数据传输。
这里应使用简单的 RS232 电平来处理 96kBaud 信号,以及已知的标准电平。因此,可以使用笔记本电脑(带有 USB 到 COM 适配器)作为软件解决方案来充当混音台。为了更好地操作,在舞台上使用带有按钮和滑块的混音台将更适合控制分布式输入。