我有这些扩展名为“.adc”的文件。它们只是原始数据文件。我可以使用Audacity打开它们,使用File-> Import->原始数据,编码为“有符号16位”,采样率为“16000 Khz”。
我想用python做同样的事情。我认为audioop模块是我需要的,但我似乎无法找到如何将它用于简单的事情的例子。
主要目标是打开文件并在文件中播放某个位置,例如从第二个10到第二个20.我的任务有什么东西吗?
提前完成。
答案 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阵列上使用索引来选择音频数据的某个部分。