0

指定されたディレクトリ内の単一の .wav ファイルまたはすべての .wav ファイルで関数 (2D numpy 配列からデータ ファイルに一連の手段を書き込む) を実行するオプションを持つ python シェル スクリプトを作成しています。

例えば、

> myscript.py --file=audio.wav --data="data.tab"

浮動小数点値を data.tab に書き込む必要があります。

> myscript.py --path="path/with/audio_files" --data="data.tab"

一連の浮動小数点値を data.tab に書き込む必要があります。

たくさんの WAV ファイルを含むフォルダーがあります。( --file オプションを使用して) 単一のファイルでパスを実行すると、結果はファイルが --path オプションで処理されたときの結果とは異なります。

私はパスファイルを3つの方法で実装しました:

1) os.listdir() の使用

for audioFile in os.listdir(options.path):
    if audioFile.endswith('.wav'):
        foo(audioFile)

2) os.walk() の使用

for r, d, f in os.walk(options.path):
for audioFile in f:
    if audioFile.endswith('.wav'):
            foo(audioFile)  

3) glob.glob() の使用

for audioFile in glob.glob("*.wav"):
    foo(audioFile)

方法 1 と 2 は同じ結果を返します。方法 3 は別の結果を返します。3 つのメソッドはすべて、単一のファイルを処理する場合とは異なる結果を返します。

os または gob モジュールを使用すると何が違うのですか?

編集: ディレクトリ内のすべての .wav ファイルを処理する場所は次のとおりです。

for r, d, f in os.walk(options.path): 
    for audioFile in f:
        if audioFile.endswith('.wav'):  
            # Add MFCC 1-12 to data.
            mfcc12(audioFile, sampleRate, data)

これは mfcc12() にあります:

# mfccs is a 2D numpy array. 
# Each column corresponds to one feature of the audiofile
for i in range(mfccs[0].size):
    mfccMean = mfccs[:, i].mean()
    mfccStdDev = mfccs[:, i].std()  
    data.write(str(mfccMean) + '\t' + str(mfccStdDev) + '\t')

オーディオ ファイルから特徴を抽出するためにYAAFEを使用しています。

4

2 に答える 2

1

glob関数は、名前が で始まるファイルを省略する Unix スタイルのことを行います.

>>> os.listdir('.')
['conn.c', 'Makefile', 'conn.o', '.depend', 'conn.c.orig', 'conn']
>>> glob.glob('*')
['conn.c', 'Makefile', 'conn.o', 'conn.c.orig', 'conn']

( はこれを行わないfnmatch.fnmatchことに注意してください。ドット ファイルをスキップするコードは にあります)。おそらく、いくつかのドットファイルがあります。glob.glob1

于 2012-04-26T04:47:01.867 に答える
0

私は問題を解決したと思います。問題は私のmfcc抽出設定ではなく、Pythonコードではありませんでした。

于 2012-04-26T22:17:30.453 に答える