3

我正在尝试通过将 python 的输出管道传输到 aplay 来生成声音,如下所示:

python test.py | aplay

我的 python 代码如下所示:

for i in range (0, 1000):
    for j in range (0, 256):
        print(chr(j), end="")

因为 aplay 的工作方式(将原始数据转换为无符号 8 位、8000Hz 音频)我假设它会在 (8000/256=) 31.25 Mhz 上播放 1000 个周期的锯齿波。
然而,当我用一个曲调测量输出频率时,它给了我大约 20Mhz,我完全不知道我哪里出了问题。

4

1 回答 1

2

你肯定是在正确的轨道上。该代码创建一个基频为 31.25 赫兹的锯齿波。我能想到一些事情可能会发生。

一:您的调谐器可能听到错误的频率;锯齿在其较高的频率中非常响亮,因此您的调谐器可能会错误识别并报告听到更高的音调。尝试在 Audacity 中生成正确频率的锯齿波,并使用相同的调谐器进行测量。你可能会看到同样的结果?

二:性能。如果您的 for 循环运行速度足够慢以至于无法以 8000 个样本/秒的速度输出,那么 aplay 可能仍会接受您的数据并播放它,但它的播放速度会比您预期的要慢,因为样本并没有进入您的扬声器足够快。这可能不是正在发生的事情——我认为大多数计算机都足够快来实现这一点,但我不确定。

于 2017-04-10T23:33:48.520 回答