【问题标题】:Convert 16 bit PCM data into numpy array of amplitudes将 16 位 PCM 数据转换为 numpy 振幅数组
【发布时间】:2021-01-25 03:37:31
【问题描述】:

我在这里可能没有使用正确的术语。我有一个像这样的 numpy 数组:

array([ 82, 73, 70, ..., 1, 230, 1], dtype=uint8)

应该是 16 位 PCM 格式。

我需要把它变成一个 numpy 音频波形。如果这不是正确的术语,我会很好地解释它是什么:从字面上看,就是在某个采样率下的声波振幅。

我还需要尽可能快地使用 Python。

【问题讨论】:

    标签: python numpy audio


    【解决方案1】:

    这确实是某种采样率下的声波振幅。但存储在 np.uint8 dtype 中。例如,如果您想在 Jupyter Notebook 中听到它,您可以尝试:

    import numpy as np
    s = np.array([ 82, 73, 70, 2, 1, 230, 1], dtype=np.uint8)
    
    from IPython.display import Audio
    Audio(s, rate=22050)
    

    然后你就可以听到你的声音了。

    【讨论】:

    • 我刚刚从具有上述 python 代码的目录中安装了 jupyter,它启动了一个浏览器,显示与上面相同...现在如何从 jupyter 内部执行 python 代码,以便它呈现音频播放小部件如上图所示?提前致谢
    • 好吧,说实话,我不知道。根据文档,你不能。 ipython.org/ipython-doc/stable/api/generated/… 可能你可以再问一个 SO 问题。
    【解决方案2】:

    将您的 n 个样本数组重新整形为新形状 (n/2, 2) 将第二列乘以 256(最高有效字节) 将对求和为 16 位值

    a = np.array([ 0x82, 0x73, 0x70, 0x1, 0x30, 0x1], dtype=np.uint8)
    b = a.reshape(-1,2)*np.array([1,256], np.uint16)
    c = b.sum(axis=1)
    
    print(hex(c[0])) # '0x7382'
    print(hex(c[1])) # '0x170'
    print(hex(c[2])) # '0x130'
    

    【讨论】:

      猜你喜欢
      • 2014-08-18
      • 2020-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-05
      相关资源
      最近更新 更多