TorchAudio의 사운드 분석

 https://ichi.pro/ko/eumseong-bunseog-pateu-2-torchaudioui-saundeu-bunseog-130041473997101


음성 분석 파트 -2, TorchAudio의 사운드 분석


DataScience의 환경은 매일 변화하고 있습니다. 지난 몇 년 동안 우리는 NLP 및 컴퓨터 비전 분야에서 수많은 연구와 발전을 보았습니다. 그러나 아직 미개척이고 많은 잠재력을 가지고있는 분야가 있습니다. 그 분야는 – SPEECH입니다.

음파 란 무엇입니까?

음파에서 특징 추출

음파 전처리

이 튜토리얼에서 우리는 파이썬에서 실제 적용을 살펴볼 것입니다. 여정에 도움이되는 가장 인기있는 두 라이브러리는 다음과 같습니다.

  1. Librosa
  2. 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 분류기를 만드는 방법을 배웁니다.

댓글

이 블로그의 인기 게시물

WSL2에서 X window를 세팅하는 법

[도서 목차]Do it! 프로그레시브 웹앱 만들기 반응형 웹 개발부터 하이브리드 앱 배포까지 PWA 완전 정복!

ARIMA or ARMA