我正在编写一个 python shell 脚本,该脚本可以选择在指定目录中的单个 .wav 文件或所有 .wav 文件上执行一个函数(将一组方法从 2D numpy 数组写入数据文件)。
例如,
> 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从音频文件中提取特征。