2024-05-21 13:10:31 发布
网友
我有扩展名为“.adc”的文件。它们只是原始数据文件。我可以大胆地使用文件打开它们->;导入->;原始数据,编码为“有符号16位”,采样率为“16000 Khz”。
我想对python也这样做。我认为audioop模块是我需要的,但我似乎找不到如何将它用于如此简单的事情的例子。
主要目标是打开文件并在文件中播放某个位置,例如从第二个10播放到第二个20。有什么事要做吗?
先走一步。
您可以使用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数组上使用索引来选择音频数据的特定部分。
打开文件只需要file()。 要查找位置,不需要audioop:只需要将秒数转换为字节,并获取文件所需的字节数。例如,如果您的文件是16 kHz 16位单声道,则每秒为32000字节的数据。所以第10秒是文件中的320kB。只需在文件中寻找适当的位置,然后读取适当的字节数。
file()
而audioop不能帮你解决最困难的部分:即播放音频。正确的方法在很大程度上取决于你的操作系统。
编辑:对不起,我刚刚注意到你的用户名是“thelinux”。考虑pyAO在Linux上播放Python的音频。您可能需要更改示例格式才能播放音频---audioop将帮助您完成此操作(请参见ratecv、tomono/tostereo、lin2lin和bias)
我能做的很多事情如下:
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)
您可以使用PySoundFile将文件作为NumPy数组打开,并使用python-sounddevice播放它。
您可以在NumPy数组上使用索引来选择音频数据的特定部分。
打开文件只需要
file()
。 要查找位置,不需要audioop:只需要将秒数转换为字节,并获取文件所需的字节数。例如,如果您的文件是16 kHz 16位单声道,则每秒为32000字节的数据。所以第10秒是文件中的320kB。只需在文件中寻找适当的位置,然后读取适当的字节数。而audioop不能帮你解决最困难的部分:即播放音频。正确的方法在很大程度上取决于你的操作系统。
编辑:对不起,我刚刚注意到你的用户名是“thelinux”。考虑pyAO在Linux上播放Python的音频。您可能需要更改示例格式才能播放音频---audioop将帮助您完成此操作(请参见ratecv、tomono/tostereo、lin2lin和bias)
我能做的很多事情如下:
相关问题 更多 >
编程相关推荐