2009-06-05 112 views
6

我有這些擴展名爲「.adc」的文件。他們只是原始數據文件。我可以用Audacity打開它們,使用文件 - >導入 - >原始數據與編碼「簽名16位」和採樣率「16000 Khz」。Python打開原始音頻數據文件

我想用python做同樣的事情。我認爲audioop模塊是我需要的,但我似乎無法找到如何將它用於簡單的事情的例子。

主要目標是打開文件並播放文件中的某個位置,例如從第二個10到第二個20.是否有任何東西在我的任務中?

Thanx提前。

回答

7

打開文件,你只需要file()。 對於查找位置,您不需要audioop:您只需將秒轉換爲字節並獲取文件的所需字節。例如,如果您的文件是16 kHz 16位單聲道,則每秒鐘是32,000字節的數據。所以第10秒是320kB的文件。只要找到文件中的適當位置,然後讀取適當的字節數。

和音頻無法幫助您的最難的部分:即播放音頻。要做到這一點的正確方法取決於您的操作系統。

編輯:對不起,我剛剛注意到你的用戶名是「thelinuxer」。考慮pyAO在Linux上播放來自Python的音頻。您可能需要更改示例格式以播放音頻--- audioop會幫助您解決這個問題(請參閱ratecv,tomono/tostereo,lin2lin和bias)

+0

不是16kHz 16位單聲道是16,000字節的數據? (如果是立體聲,則爲32,000字節) – elias 2017-04-02 20:55:18

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

您可以使用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數組的索引來選擇音頻數據的某個部分。