Audiophile 板


LINE

首先是下面会用到的 OS和用户可以用到的时钟: clock realtime -> 可以被ntp搞到逆时针转的 clock monotonic -> 只能顺时针转,但可以因ntp而调整转速(速率) clock monotonic raw ->只能顺时针转 不受ntp影响 以上三个共同点 依赖系统时钟源 ptp clock ->在合理的系统上会和PTP GM运行在相同速率 drifted clock 通常还是会有相对稳定的速率 有小的的drift rate=>去掉drift rate就变成比较精确的时钟 TSC:CPU温度变化剧烈,但TSC来源PLL的REF晶振温度变化不大 unstable clock 时间在很短时间变化,倒退,停止 通常不会被OS选为可靠的系统时钟 ptp clock,用数次sync的时间差除以本地时间差会得到drift rate 结合drifted clock就可以得到相对精确且稳定的时钟(10kHz+) PTP GM在AES67里可以当做Word Sync, Wall Clock PTP Slave Clock可以经DPLL锁相到VCO/VCXO, divide到sample rate可得Media Clock,这种方式得到的是连续时钟, 也可按上面方法得drift rate然後生成timer, 断续的clock不能拿来sample 但依旧可以为sample编号(Media Clock) 这种方式生成的是burst间隔,通常用来按buffer size生成timer audio file (一大锅米饭) burst transfer (一大勺=32口米饭) continuous streaming (一口一口吃) jitter buffer: https://bit.ly/44O1PVL 借助jitter buffer(碗和大小勺子)把burst transfer变成continuous streaming 声卡上有一个小缓冲区(碗) 声卡的控制器(大小勺子)在晶振的固定频率(continuous)下喂给dac数据(一小勺) 碗快空了就通知主机或者自己再添一大勺饭到碗里(burst) 只向主机要一小勺会生气!! (浪费bus) 会用到的结束 举例子 播MP3文件 通常mp3 decoder通常会耗尽CPU把mp3转回pcm数据并写入声卡 (对,burst,没有速率控制) 但声卡的缓冲区很小且消耗速度是固定的, decoder必须先暂停然後等待声卡告知自己的缓冲区空出一部分 然後再次写入直到播放完毕 此时MP3的总播放长度与dac时钟速度成比例 短期看播放速率是毛刺状(burst),长期看播放速率固定在dac时钟速率 还可以看到主机的所有时间都和播放无关, 实际上正在使用声卡提供的指示来计算时间. VAD 就是声卡 使用ptp来的校准 在正确的时间生成定时器中断 ~~~~ ~~~~~~~~~~ (burst间隔,1/sample rate * buffer size, 1ms级) 可以看做把声卡晶振的固定频率连接到VAD做时钟(固定的消耗速度) 主机会一次填满缓冲区,定时器提前或延後都不会影响音频数据的完整性 ~~~~~~~~~~~~~~ 配合接收端jitter buffer把burst数据平滑到continuous, dac端使用dpll同步到和burst长期速率一致的GM时钟, burst间隔取决於选择的缓冲区大小, 以32个sample 44.1k为例 只要在和GM同步的timer时间的+-0.7ms内发包,jitter buffer就能维持精确输出. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ VAD最大PTP校正能力是+-1.2x系统时间 外加最短0.125秒生成一次校正, macOS上的VAD默认使用"clock monotonic"形态的时钟, 可以受ntp影响,但周期长於VAD PTP的校正,且校正量通常远小於jitter容忍范围 除了可能造成解锁外功能可以忽略 如果系统时钟波动过大或者调度器没办法在jitter容忍范围内把RTP包发到接收器 Merging的VAD会在system.log和dmesg里留下痕迹 使用中最大的问题是调度器导致定时器fire过晚,ms级 要提到的还有之所以其他设备的delta很小, 是因为他们的系统会选择ptp做时钟源, 系统时间紧密贴合PTP GM, macOS没法用PTP做时钟源,所以很难消掉 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 132.226.0.200 (日本)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Audiophile/M.1689350502.A.59B.html
1F:→ elguapo: Quote:「VAD 就是声卡 使用ptp来的校准 在正确的时间 07/15 05:13
2F:→ elguapo: 生成定时器中断」:Mac Win Linux 三个平台的 AES67 driv 07/15 05:13
3F:→ elguapo: er 都不会对系统时钟校准,生成定时器中断的时间是系统 07/15 05:13
4F:→ elguapo: 时间。这点可由open source 的 Linux driver 窥知。Mac 07/15 05:13
5F:→ elguapo: 上能使用的网卡除了外接的有机会有PHC & HW TS,其余均 07/15 05:14
6F:→ elguapo: 未有PHC + HW TS。加上 macOS 从未打算支援 PTP,因此 VA 07/15 05:14
7F:→ elguapo: D 的 PTP implementation 为 SW slave only;Linux 虽说 07/15 05:14
8F:→ elguapo: 核心(网卡驱动)支援 PHC & HW TS,但其 AES67 driver 07/15 05:14
9F:→ elguapo: 也从不使用 PHC & HW TS,也是 SW slave only 并且也不 07/15 05:14
10F:→ elguapo: 做时间校准。Win 的 MAD 就比较复杂,外部器材必须要设定 07/15 05:14
11F:→ elguapo: 为 ASIO clock,MAD 才锁得住,但锁归锁,Merging 建议安 07/15 05:14
12F:→ elguapo: 全的 buffer size 却是 192~256 frames(依据 1fs size) 07/15 05:14
13F:→ elguapo: 。macOS 最小 frame size 是 16,Linux 最小 frame 32( 07/15 05:14
14F:→ elguapo: 若设定低於 32 Ravenna daemon 会自动跳回 default 128) 07/15 05:14
15F:→ elguapo: 。 07/15 05:14
16F:→ sunyanwen: 从Linux alsa lkm m_dTIC_CurrentPeriod往回找即可看到 07/15 05:39
17F:→ sunyanwen: 定时器上的简单的同步,VAD隔离了系统时钟和时钟偏差 07/15 05:39
18F:→ elguapo: 那仅是 syntonization 07/15 05:58
19F:推 greg7575: 所以不是"用电脑播放"的人都适用齁~~ 07/15 06:59
20F:→ greg7575: 这一大串清楚说明了音乐到耳朵前的过程,谢谢分享 07/15 07:00
21F:推 xoy: 现在的串流机大都也是在ARM平台上跑Linux的电脑,看功能跟串 07/15 07:37
22F:→ xoy: 流的通讯协定做类似的事 07/15 07:37
23F:推 djboy: 感谢分享!! 本文值得2个m。 07/15 11:13
24F:→ djboy: 这篇文章,是我研究音响来,一直想知道的整串播放流程的细 07/15 11:19
25F:→ djboy: 节。经过这麽多年,感谢sunyanwen大大实现我的心愿。 07/15 11:20
26F:推 danisaku: 感谢科普 07/15 11:56
27F:推 Oswyn: 其实两件事 影响硬体运作的时钟(时脉) 跟用来对时(同步) 07/15 11:57
28F:→ Oswyn: 我感觉 e大一直没能分清楚什麽是什麽 07/15 11:58
29F:→ Oswyn: 就像上面提到 ASIO、ASIO&WASAPI 都只是软体层的 API 07/15 11:59
30F:→ Oswyn: 一个软体运作,跟硬体 clock 是不直接挂鈎的 07/15 12:00
31F:→ Oswyn: https://i.imgur.com/sf1EZ2s.jpg 07/15 12:08
32F:→ Oswyn: https://i.imgur.com/OxZFlRp.jpg 07/15 12:08
33F:→ Oswyn: 同步的 timestamp 是放在 Layer5 RTP Header 中,这代表的 07/15 12:09
34F:→ Oswyn: 意义是什麽,稍理解 OSI 7层的人都应该能理解 07/15 12:12
35F:→ Oswyn: 时间对齐和同步速度,并不是在传输过程中达成的 07/15 12:14
36F:推 iitze: 推,这系列文,长知识 07/15 15:01
补充: VAD中slave clock对时方法 https://i.imgur.com/cd7GuOH.png PTP求得drift rate,定时器中断(本机时间+1ms/drift rate)将落在标准时间+1ms附近, 下次中断就是在(标准时间+1ms附近)的本机时间+(1ms/drift rate) 为防止偏差过大,在同步间隔R时会重新生成drift rate 可见VAD的timer是贴着标准时间走的 media clock只有在DAC/ADC边缘才是真实的时钟信号, 可以映射到GM绝对时间,但AES67没有严格要求相位同步 RTP中的timestamp实际是media clock计数器,比如48000khz,1ms buffer, GM时间每ms应该有1个RTP Packet,timestamp就应该加48,并没有绝对时间 每个slave的每秒都有1000个ms(被同步约束) 只要满足同步,就能在jitter buffer还原回精确的sample clock & sample 这期间VAD完全不知道每个sample在什麽时间生成,因为他是burst的,时间由GM保证 实际上同步建立在音频时钟+jitter buffer上, 除PTP packet外没有其他packet有真正的timestamp ※ 编辑: sunyanwen (132.226.0.200 日本), 07/15/2023 18:11:25
37F:→ elguapo: Quote:「可见VAD的timer是贴着标准时间走的」:我一直是 07/15 22:14
38F:→ elguapo: 这麽表示的… 07/15 22:14
39F:推 djboy: sun大以後多发文啊~~~ 07/15 23:47
补充2: 1ms jitter buffer意味着1ms delay,和其他设备align间隔也是1ms, 声卡工作在burst模式,因为不能同步时钟到AD/DA,这意味着相位要求几乎没有 频率同步不需要delay measurement,故可以使用SW PTP(不需要hw timestamp) 这样就只需要接收sync,同时用相对时间差计算drift rate 实际上VAD也没有发任何ptp包出去 SW PTP可以满足1ms要求,并且不需要额外硬件,是VAD首选 sample instant alignment,也就是标准(GM)时间对AES67的影响 Media Clock在VAD中,因为很难得到精确时间信息(1s/48000,scheduler) 声卡的burst播放也不会在准确的时刻写入sample 所以VAD与GM时间同步,播放设备按GM时钟生成采样率播放,理想情况下就是bit perfect 真正有差别的地方在多路AD/DA,mixer上 具有相同RTP timestamp的sample要在相同的时刻sample/playback,(AES11的+-5%) 这个时刻由PTP GM保证,通过hw timestamp+servo+dpll+apll生成sample edge, 确保所有相位同步的设备都具有非常接近的相位,必须要用HW PTP且需要很多额外组件 这个问题可以很大,但优势也在这里,用了GPS,全世界可以一起录 顺便就可以提供给嵌入式系统一个时钟源,系统时间和GM完全一样, 但系统时间和音频时钟依旧没有关联, Media Clock绑定到GM时间,要求绝对准确,OS取准确时间代价太大 最後 ALC NetworX VAD 提供了system time sync功能, 需要HW PTP, Intel旧网卡基本都可以用,可以体验看看 ※ 编辑: sunyanwen (132.226.0.200 日本), 07/16/2023 05:29:00
40F:→ elguapo: Quote:「OS取准确时间代价太大」:所以我 proposed 用 80 07/16 06:36
41F:→ elguapo: 2.1AS layer 2 对电脑系统对时(layer 3 被 Ravenna 占 07/16 06:36
42F:→ elguapo: 用),无法 802.1AS 的系统则使用 local NTP 对时(同一 07/16 06:36
43F:→ elguapo: 个时钟源)。这样的代价并不高且有效。 07/16 06:36
44F:→ sunyanwen: 当然怎样对时都没问题,但即便对时也还是要经过VAD PTP 07/16 07:07
45F:→ sunyanwen: 的drift rate校正,因为始终要同步到GM,想想看工作室 07/16 07:07
46F:→ sunyanwen: 的GM如果没用GPS时间且偏差很大,不经PTP校正+NTP到与G 07/16 07:07
47F:→ sunyanwen: M不同步的时钟=破坏音频时钟,对时目的还是为了同步, 07/16 07:07
48F:→ sunyanwen: 只不过系统内的GM才是真正的参考 07/16 07:07
49F:推 elguapo: Quote:「系统内的GM才是真正的参考」:是,完全同意。我 07/16 08:03
50F:→ elguapo: 是用AES67系统内的GPS PTP GMC当唯一时钟源(e810),用 07/16 08:03
51F:→ elguapo: 多网口做出不同profile/layer/protocol给各应用区;e810 07/16 08:03
52F:→ elguapo: 设计上只有一个PHC给四个网口共用,其中:一个网口UDP/E2 07/16 08:03
53F:→ elguapo: E AES67 profile给Ravenna network,一个网口802.1AS走la 07/16 08:03
54F:→ elguapo: yer 2,一个网口设定具HW TS的NTP server。另因预算不足 07/16 08:03
55F:→ elguapo: 交换器只能用便宜的具TC能力的M4250。 07/16 08:03







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:iOS站内搜寻

TOP