SW/Python

파이썬 : wav 파일 읽고 재생, 그래프, 샘플레이트, 시간 구하기

얇은생각 2019. 6. 24. 07:30
반응형

음성 처리 기본 

(가) (5점) Scipy.io 에 포함된 wavfile 함수를 사용해서 주어진 ‘q2.wav’ 음성 파일을 읽고, 이를 스피 커로 출력, 그리고 MatplotLib를 사용하여 화면에 파형을 그리는 python code를 작성하시오. 

(나) (10점) 음성 신호의 샘플링 주파수를 구하고, 그 의미에 대해 간단히 설명하시오. 

(다) (10점) 음성 신호의 전체 샘플 수로부터 물리적인 총 시간 (sec)이 얼마인지 구하시오


import numpy as np
import scipy.io as sio
import scipy.io.wavfile
import matplotlib.pyplot as plt

import sounddevice as sd

# 3-가
samplerate, data = sio.wavfile.read('q2.wav')

times = np.arange(len(data))/float(samplerate)

sd.play(data, samplerate)

plt.fill_between(times, data)
plt.xlim(times[0], times[-1])
plt.xlabel('time (s)')
plt.ylabel('amplitude')
plt.show()

# 3-나
# Sample rate (샘플레이트)
# 이는 샘플의 빈도 수 입니다.
# 즉, 1초당 추출되는 샘플 개수라고 할 수 있습니다.
# 오디오에서 44.1KHz(44100Hz), 22KHz(22050Hz)를 뜻합니다.
# 괄호안에 값은 좀더 정확하게 표현한 값입니다.
print( 'sampling rate: ', samplerate)

# 3-다
# 따라서 데이터 전체의 개수에서 sample rate를 나누어 주면됩니다.
print ('time : ', times[-1])


(가) 

1. python으로 wav 파일 읽기

2. python으로 wav 파일 재생하

3. python으로 wav 파일 그래프 그리기

먼저 scipy.io를 활용하여 wav 파일을 읽었습니다. read 함수를 활용하면 두가지를 반환해줍니다. sample rate와 wav의 데이터를 반환해줍니다. 그리고 이 데이터를 활용해여 pyplot으로 그래프를 그려보았습니다. 그린 그래프는 아래와 같습니다. 또 읽은 데이터를 재생하기 위해서 sounddevice 라는 라이브러리를 사용해보았습니다. 그냥 파일을 재생하는 라이브러리를 많이 있었지만, 읽은 데이터를 가지고 재생하는 라이브러리를 찾느라 고생하였습니다.


파이썬 : wav 파일 읽고 재생, 그래프, 샘플레이트, 시간 구하기


(나)

1. sample rate의 의미

해당 답변은 위 주석에 달아놓았습니다. 읽어들인 데이터를 재생하거나 표현하기 위해서는 샘플 레이트라는 값이 음성에서 필요하다라는 것을 알게 되었습니다. 이 샘플레이트가 높으면 높은 밀도의 음성이며, 낮으면 낮은 밀도의 음성이라는 것을 알게 되었고, 과연 이것을 강제로 낮추면 느린 배속으로 재생이 되고, 강제로 높히면 빠른 배속으로 재생될 것이라는 것을 알게되었습니다.


(다)

1. python으로 wav 파일 데이터로 time을 구하기

sample rate는 1초동안 표현하는 데이터들의 양이라고 생각할 수 있기 때문에, 전체 데이터를 샘플레이트만큼 나누어주면, 그 값이 가지고 있는 값을 알 수 있습니다. 


반응형