MPD、FIFO、Python、Audioop、Arduino和伏特计:“伪造”一个VU M

2024-09-30 01:28:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着用一台连接到Arduino的电脑(它本身连接了5伏电压表)来“伪造”一台老式的立体声视音频表。我的目标是让播放音频文件的计算机分析信号,并通过串行连接将振幅信息发送给阿鲁迪诺,以便在电压表上显示。在

我使用MPD来渲染音频并将其发送到usbdac(ODAC)。MPD还输出到FIFO,这是我使用Python脚本读取的。我从FIFO中读取4096字节的数据块,然后使用audioop库将该块/样本分成左右声道,并计算每个通道的最大振幅。在

问题是——我被数据淹没了。我猜我的数学是错的,或者我不明白FIFO是如何工作的(或者两者兼而有之)。MPD以44100:16:2的格式输出所有内容—我想这意味着它每秒将输出44100个4字节的样本。所以,如果我要抓取4096字节的块,我应该期望每秒有43个块。但我得到的远不止这些(超过100个),而且如果我增加块大小,每秒获得的块数不会改变。例如,如果我将块大小加倍到8192,那么每秒得到的块数仍然大致相同。很明显我做错了什么,但我不知道是什么。有人有什么想法吗?在

这是我的mpd.conf公司文件:

audio_output {
type    "fifo"
name    "my_fifo"
path    "/tmp/mpd.fifo"
format  "44100:16:2"
}

下面是Python脚本:

^{pr2}$

Tags: 数据脚本目标字节老式arduinompd样本
1条回答
网友
1楼 · 发布于 2024-09-30 01:28:59

回答我自己的问题。结果是,不管我指定了多少字节应该被读取,操作系统读取()返回2048字节。这意味着第二个参数操作系统读取()takes是它将读取的最大字节数,但不能保证实际读取的字节数是多少。当我打开FIFO时,我想通过省略non-block选项操作系统读取()调用将一直等到收到文件结尾或指定的字节数。但事实并非如此。为了解决这个问题,我的代码现在检查操作系统读取()并且-如果该长度小于我指定的块大小-将等待获取下一个块,然后将所有块连接在一起,以便在继续处理数据之前获得与目标匹配的块大小。在

相关问题 更多 >

    热门问题