如何保存文件夹和子文件夹中的音频文件(.wav)的频谱图?

时间:2019-06-23 10:49:29

标签: python audio wav spectrogram

我有276个音频文件(.wav)。我想像下面的代码一样绘制信号和频谱图:

import matplotlib.pyplot as  plot
from scipy.io import wavfile

samplingfrequency, signaldata = wavfile.read('/home/narges/dataset/seri1.16khz.128kbps/Voice Recorder/N00xxxx/N000200.wav')

plot.subplot(211)
plot.title('spec of vowel')

plot.plot(signaldata)
plot.xlabel('sample')
plot.ylabel('amp')

plot.subplot(212)
plot.specgram(signaldata,Fs=samplingfrequency)
plot.xlabel('time')
plot.ylabel('freq')

plot.show()

但是我想阅读所有文件夹和子文件夹。我使用以下代码读取所有文件夹和子文件夹:

path = Path('/home/narges/dataset/dataset-CV-16kHz-128kbps/train/').glob('**/*.wav')
wavs = [str(wavf) for wavf in path if wavf.is_file()]
wavs.sort()

我正在使用此代码保存发言人ID:

文件数= len(wavs)    spk_ID = [wavs [i] .split('/')[-1] .lower()for i in range(number_of_files)]

现在,我如何更改以下代码以读取目录(路径)中的所有.wav文件并绘制信号和频谱图(如第一个代码),并以spk_ID的名称保存?

def graph_spectrogram(wav_file):
    wavs = rate, data = wavfile.read('/home/narges/dataset/dataset-CV-16kHz-128kbps/train/speaker_00/s_00_0_00.wav')
    pxx, freq, bins, im = plt.specgram(x=data, Fs=rate, noverlap=384, NFFT=512)
    spk_ID = [wavs.split('/')[-1].lower()]
    plt.xlabel('time')
    plt.ylabel('freq')
    plt.savefig('xyz.png',bbox_inches='tight', dpi=300, frameon='false')

if __name__=='__main__':
   graph_spectrogram('...')

1 个答案:

答案 0 :(得分:0)

我正在使用此代码,如果有人要使用,它是正确的:

let result = data.reduce((r, c) => {
  if (!r[c.company_code]) {
    r[c.company_code] = [];
  }
  r[c.company_code].push(c.emp_code);
  return r;
}, {});