简体   繁体   English

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

[英]How can i save spectrogram of audio file (.wav) from folders and sub-folders?

I have 276 audio file (.wav).我有 276 个音频文件 (.wav)。 I want to plot signal and spectrogram together like following code:我想像下面的代码一样绘制信号和频谱图:

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

But i want to read all folders and sub-folders.但我想阅读所有文件夹和子文件夹。 I use this code for reading all folders and sub-folders:我使用此代码读取所有文件夹和子文件夹:

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

And i'm using this code for saving Speaker ID:我正在使用此代码来保存扬声器 ID:

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

Now, how can i change following code for read all of my .wav file in directory (path) and plot signal and spectrogram (like first code), and save it with the name of spk_ID?现在,我如何更改以下代码以读取目录(路径)中的所有 .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('...')

I'm using this code and it's correct, if any one want to use:我正在使用此代码并且它是正确的,如果有人想使用:

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

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

number_of_files=len(wavs)

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

for i in range(number_of_files):
    samplingfrequency, signaldata = wavfile.read(wavs[i])
    pxx, freq, bins, im = plot.specgram(x=signaldata, Fs=samplingfrequency, noverlap=384, NFFT=512)
    plot.title('spec of vowel')
    plot.xlabel('time')
    plot.ylabel('freq')
    plot.savefig("spk_ID:{}.png".format(spk_ID[i]), bbox_inches='tight', dpi=300, frameon='false')

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM