代码之家  ›  专栏  ›  技术社区  ›  thelinuxer

Python打开原始音频数据文件

  •  6
  • thelinuxer  · 技术社区  · 16 年前

    我有这些扩展名为“.adc”的文件。它们只是原始数据文件。我可以大胆地使用File->打开它们;进口->编码为“有符号16位”且采样率为“16000 Khz”的原始数据。

    我想对python也这样做。我认为audioop模块正是我所需要的,但我似乎找不到如何将其用于如此简单的事情的示例。

    提前准备好。

    3 回复  |  直到 16 年前
        1
  •  8
  •   Bastien Léonard    16 年前

    要打开文件,您只需要 file() . 要查找位置,不需要audioop:只需将秒数转换为字节并获取文件所需的字节。例如,如果您的文件是16 kHz 16位单声道,则每秒有32000字节的数据。因此,第10秒是文件中的320kB。只需查找文件中的适当位置,然后读取适当的字节数。

    audioop无法帮助您完成最难的部分:即播放音频。正确的方法很大程度上取决于您的操作系统。

    编辑:对不起,我刚刚注意到你的用户名是“thelinuxer”。考虑 pyAO

        2
  •  4
  •   flitzwald    11 年前

    def play_data(filename, first_sec, second_sec):
      import ao
      from ao import AudioDevice 
      dev = AudioDevice(2, bits=16, rate=16000,channels=1)
      f = open(filename, 'r')
      data_len = (second_sec-first_sec)*32000
      f.seek(32000*first_sec)
      data = f.read(data_len)
      dev.play(data)
      f.close()
    
    play_data('AR001_3.adc', 2.5, 5)
    
        3
  •  2
  •   Matthias    10 年前

    你可以用 PySoundFile 以NumPy数组形式打开文件并使用 python-sounddevice .

    import soundfile as sf
    import sounddevice as sd
    
    sig, fs = sf.read('myfile.adc', channels=2, samplerate=16000,
                      format='RAW', subtype='PCM_16')
    sd.play(sig, fs)
    

    您可以使用NumPy数组上的索引来选择音频数据的特定部分。