TorchAudio의 사운드 분석
https://ichi.pro/ko/eumseong-bunseog-pateu-2-torchaudioui-saundeu-bunseog-130041473997101
음성 분석 파트 -2, TorchAudio의 사운드 분석
DataScience의 환경은 매일 변화하고 있습니다. 지난 몇 년 동안 우리는 NLP 및 컴퓨터 비전 분야에서 수많은 연구와 발전을 보았습니다. 그러나 아직 미개척이고 많은 잠재력을 가지고있는 분야가 있습니다. 그 분야는 – SPEECH입니다.
음파 란 무엇입니까?
음파에서 특징 추출
음파 전처리
이 튜토리얼에서 우리는 파이썬에서 실제 적용을 살펴볼 것입니다. 여정에 도움이되는 가장 인기있는 두 라이브러리는 다음과 같습니다.
- Librosa
- TorchAudio
다음 단계에 따라 설치하십시오.
우리는이 튜토리얼에 대한 TorchAudio을 사용하는 것입니다하는 방법을 학습 할 것이다 당신의 음성 모델링 journey.Get에게 전체 노트북을 시작하는 음파를 미리 처리 여기에
1 단계 : 사운드 파일 읽기
지원되는 파일 형식은 mp3, wav, aac, ogg, flac, avr, cdda, cvs / vms ,, aiff, au, amr, mp2, mp4, ac3, avi, wmv, mpeg, ircam 및 libsox에서 지원하는 기타 형식입니다. torchaudio.load () 함수는 사운드 파일을 읽는 데 사용됩니다.
2 단계 : 파일 정보 및 시각화
음파는 다양한 유형의 정보와 함께 제공됩니다. 이전 블로그에서 읽은 것처럼 원시 웨이브에서 더 많은 변환을 수행할수록 더 많은 정보를 추출 할 수 있습니다.
레벨 1에서는 샘플 속도, 채널 수, 사운드 파일의 지속 시간과 같은 정보를 추출 할 수 있으며 Matplotlib를 사용하여 Amplitude Vs Time 스케일로 음파를 시각화 할 수 있습니다.
filename = "steam-train-whistle-daniel_simon-converted-from-mp3.wav" waveform, sample_rate = torchaudio.load(filename) print("Shape of waveform: {}".format(waveform.size())) print("Sample rate of waveform: {}".format(sample_rate)) print(" Number of Channels : {}".format(waveform.size()[0])) plt.figure() plt.plot(waveform.t().numpy())
3 단계 : 리샘플링
채널 1의 웨이브를 살펴보고 다시 샘플링 해 보겠습니다.
new_sample_rate = sample_rate/100 # Since Resample applies to a single channel, we resample first channel here channel = 0 transformed = torchaudio.transforms.Resample(sample_rate, new_sample_rate)(waveform[channel,:].view(1,-1)) print("Shape of transformed waveform: {}".format(transformed.size())) plt.figure() plt.plot(transformed[0,:].numpy())4 단계 : 복잡한 특징 추출
이전 블로그를 읽었다면 간단한 음파 (진폭 대 시간)에 변형을 적용하여 다른 기능을 추출해야한다는 것을 알게 될 것입니다.
여기에 DFT (Discrete Fourier Transform)를 적용하고이 파동의 스펙 토 그램을 살펴 보겠습니다.
specgram = torchaudio.transforms.Spectrogram()(waveform) print("Shape of spectrogram: {}".format(specgram.size())) plt.figure() p = plt.imshow(specgram.log2()[0,:,:].detach().numpy(), cmap='Greens')이제 다른 DFT (Discrete Fourier Transform)를 여기에 적용하고 Cepstrums를 살펴 보겠습니다. MelSpectrum을 연구하고 오디오의 MFCC 기능을 살펴 봅니다. 파형의 MFCC 기능은 스피커 식별, 사운드 분류, 사운드 수정 또는 사람이 인식 할 수있는 사운드 범위를 포함하는 모든 유형의 사운드 분석과 같은 사용 사례에 가장 적합한 형식이라고합니다. 이전 블로그의 세부 사항 .mfcc=torchaudio.transforms.MFCC()(waveform) print("Shape:{}".format(mfcc.size())) specgram = torchaudio.transforms.MelSpectrogram()(waveform) print("Shape of spectrogram: {}".format(specgram.size())) plt.figure() p = plt.imshow(specgram.log2()[0,:,:].detach().numpy(), cmap='Greens')5 단계 : 파형을 정규화하여 MuLaw 인코딩을 적용합니다.
파형의 정규화는 숫자 데이터를 정규화하는 것과 유사합니다. -1에서 1 사이의 값 (Amplitude)을 변경합니다.
def normalize(tensor): # Subtract the mean, and scale to the interval [-1,1] tensor_minusmean = tensor - tensor.mean() return tensor_minusmean/tensor_minusmean.abs().max() # Let's normalize to the full interval [-1,1] waveform = normalize(waveform) transformed = torchaudio.transforms.MuLawEncoding()(waveform) print("Shape of transformed waveform: {}".format(transformed.size())) plt.figure() plt.plot(transformed[0,:].numpy())6 단계 : 변환 — 증폭 및 디더링
증폭 —이 단계는 전체 파동의 볼륨을 증가시키는 것을 포함합니다.
Dither — 높은 비트 해상도를 낮은 비트 해상도로 변환합니다. 더 읽어보기
gain_waveform = torchaudio.functional.gain(waveform, gain_db=5.0) print("Min of gain_waveform: {}\nMax of gain_waveform: {}\nMean of gain_waveform: {}".format(gain_waveform.min(), gain_waveform.max(), gain_waveform.mean())) dither_waveform = torchaudio.functional.dither(waveform) print("Min of dither_waveform: {}\nMax of dither_waveform: {}\nMean of dither_waveform: {}".format(dither_waveform.min(), dither_waveform.max(), dither_waveform.mean()))7 단계 : 변환-필터
필터는 특정 주파수 통과 (고역 통과 필터)를 초과하는 오디오 또는 특정 주파수 통과 (저역 통과 필터) 미만의 오디오를 허용하는 화면처럼 작동합니다. 이 한계를 벗어난 모든 것은 감쇠됩니다.
lowpass_waveform = torchaudio.functional.lowpass_biquad(waveform, sample_rate, cutoff_freq=3000) print("Min of lowpass_waveform: {}\nMax of lowpass_waveform: {}\nMean of lowpass_waveform: {}".format(lowpass_waveform.min(), lowpass_waveform.max(), lowpass_waveform.mean())) plt.figure() plt.plot(lowpass_waveform.t().numpy()) highpass_waveform = torchaudio.functional.highpass_biquad(waveform, sample_rate, cutoff_freq=2000) print("Min of highpass_waveform: {}\nMax of highpass_waveform: {}\nMean of highpass_waveform: {}".format(highpass_waveform.min(), highpass_waveform.max(), highpass_waveform.mean())) plt.figure() plt.plot(highpass_waveform.t().numpy())8 단계 : 페이드
이것은 사운드의 페이딩 효과를 유발합니다. 이것은 음파의 시작 또는 끝에서 적용 할 수 있습니다.
faded_audio= torchaudio.transforms.Fade(fade_in_len= 30000,fade_out_len=30000)(waveform) plt.figure() plt.plot(faded_audio.t().numpy())9 단계 : 이퀄라이저
대부분의 사람들에게 친숙한 가장 기본적인 유형의 이퀄라이제이션은 가정용 오디오 장비의 고음 / 저음 제어입니다. 고음 조절기는 고주파수를 조절하고 저음 조절기는 저주파를 조절합니다. 더 읽어보기
equalize=torchaudio.transforms.SlidingWindowCmn()(waveform) plt.figure() plt.plot(equalize.t().numpy())여기에서 전체 노트북 가져 오기
음파가 처리되고 모델링 과제를 시작할 준비가되었습니다. 다음 부분에서는 위 단계의 출력 웨이브를 사용하여 SpeechToText 분류기를 만드는 방법을 배웁니다.
댓글
댓글 쓰기