Python打开原始音频数据文件

时间:2009-06-05 16:05:52

标签: python audio

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

我想用python做同样的事情。我认为audioop模块是我需要的,但我似乎无法找到如何将它用于简单的事情的例子。

主要目标是打开文件并在文件中播放某个位置,例如从第二个10到第二个20.我的任务有什么东西吗?

提前完成。

3 个答案:

答案 0 :(得分:8)

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

而audioop无法帮助你解决最困难的部分:即播放音频。这样做的正确方法取决于您的操作系统。

编辑:对不起,我刚注意到你的用户名是“thelinuxer”。考虑pyAO在Linux上播放Python的音频。您可能需要更改样本格式才能播放音频--- audioop会帮助您(请参阅ratecv,tomono / tostereo,lin2lin和bias)

答案 1 :(得分:4)

Thanx很多我能够做到以下几点:

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)

答案 2 :(得分:2)

您可以使用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阵列上使用索引来选择音频数据的某个部分。