타임스탬프 찾기
사운드 웨이브의 샘플링 주파수가 48kHz라는 것을 이미 알고 있지만, 만약 몰랐다면 어떻게 할까요? 사운드 웨이브 배열의 길이를 사운드 웨이브의 길이(지속 시간)로 나누어서 구할 수도 있습니다. 하지만 Python의 wave 모듈에는 더 좋은 방법이 있습니다. 웨이브 객체에서 getframerate()를 호출하면 해당 웨이브 객체의 프레임 속도를 반환받을 수 있습니다.
그런 다음 NumPy의 linspace() 메서드를 사용하면 사운드 웨이브 배열에 있는 각 정수의 타임스탬프를 구할 수 있습니다. 이는 나중에 사운드 웨이브를 시각화할 때 도움이 됩니다.
linspace() 메서드는 start, stop, num 매개변수를 받아서 start와 stop 사이에서 균등한 간격으로 분포된 num개의 값을 반환합니다.
여기서는 start가 0이 되고, stop은 사운드 웨이브 배열의 길이를 프레임 속도로 나눈 값(오디오 파일의 지속 시간)이 되며, num은 사운드 웨이브 배열의 길이가 됩니다.
이 연습은 강의의 일부입니다
Python으로 배우는 음성 언어 처리
연습 안내
- 사운드 웨이브 바이트를 정수로 변환하세요.
getframerate()를 사용해 good morning 오디오 파일의 프레임 속도를 구하세요.stop을soundwave_gm의 길이를 프레임 속도로 나눈 값으로 설정하세요.num을soundwave_gm의 길이로 설정하세요.
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
# Read in sound wave and convert from bytes to integers
good_morning = wave.open('good_morning.wav', 'r')
signal_gm = good_morning.readframes(-1)
soundwave_gm = np.frombuffer(____, dtype='int16')
# Get the sound wave frame rate
framerate_gm = good_morning.____
# Find the sound wave timestamps
time_gm = np.linspace(start=0,
stop=____/____,
num=____)
# Print the first 10 timestamps
print(time_gm[:10])