Как сохранить спектрограмму аудиофайла (.wav) из папок и подпапок? - PullRequest
0 голосов
/ 23 июня 2019

У меня 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()

И я использую этот код для сохранения идентификатора динамика:

NUMBER_OF_FILES = Len (WAVs) spk_ID = [wavs [i] .split ('/') [- 1] .lower () для i в диапазоне (число_файлов)]

Теперь, как я могу изменить следующий код, чтобы прочитать все мои файлы .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 голосов
/ 24 июня 2019

Я использую этот код, и он правильный, если кто-то захочет использовать:

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')
...