2009-06-05 1 views
6

これらのファイルには拡張子 ".adc"があります。それらは生データファイルです。私はAudacityで "Signed 16 bit"エンコーディングと "16000 Khz"のサンプルレートでFile-> Import-> Rawデータを使って開くことができます。Pythonオープンの生のオーディオデータファイル

私はpythonで同じことをしたいと思います。私はaudioopモジュールは私が必要とするものだと思いますが、それを単純なものに使う方法の例を見つけることはできません。

主な目標は、ファイルを開いて、ファイル内の特定の場所を再生することです(たとえば、2番目の10から2番目の20まで)。

Thanx事前に。

答えて

7

ファイルを開くには、file()が必要です。 場所を見つけるために、audioopは必要ありません。秒をバイトに変換し、ファイルの必要なバイト数を取得するだけです。たとえば、ファイルが16 kHzの16ビットモノである場合、1秒あたりのデータ数は32,000バイトです。したがって、10秒目はファイルに320kBです。ファイル内の適切な場所を探して、適切なバイト数を読み取ってください。

そして、audioopは、最も難しい部分、つまりオーディオを再生するのに役立つことはありません。これを行うための正しい方法は、お使いのOSによって異なります。

編集:申し訳ありませんが、私はあなたのユーザー名が "thelinuxer"であることに気付きました。 LinuxのPythonからオーディオを再生するにはpyAOを考えてください。オーディオを再生するためにサンプルフォーマットを変更する必要があるでしょう---オーディオトップがこれを助けます(ratecv、tomono/tostereo、lin2lin、およびバイアスを参照してください)

+0

16kHzの16bitモノは16,000バイトのデータではありませんか? (ステレオの場合は32,000バイト) – elias

+0

ああ、nvm、私はそれを手に入れました! 16ビット== 2バイト。次に、2バイト* 16サンプル/秒== 32,000バイト/秒。 – elias

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

あなたはnumpyの配列としてファイルを開き、python-sounddeviceでそれを再生するためにPySoundFileを使用することができます。

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配列のインデックスを使用して、オーディオデータの特定の部分を選択することができます。

関連する問題