Python打开原始音频数据fi

2024-05-21 13:10:31 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

主要目标是打开文件并在文件中播放某个位置,例如从第二个10播放到第二个20。有什么事要做吗?

先走一步。


Tags: 模块文件gt目标编码原始数据符号事情
3条回答

您可以使用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。只需在文件中寻找适当的位置,然后读取适当的字节数。

而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)

相关问题 更多 >