[1편] https://shs2783.tistory.com/6
WAV 파일을 분석해보자 (with 파이썬) - 1
1. 전체적인 구조 wav 파일은 크게 헤더(header)와 데이터(data)로 구성되어 있습니다. 헤더는 파일에 대한 정보입니다. 파일의 크기, 포맷 형식, 채널 수 등을 나타내는 설명서라고 보시면 됩니다. 데
shs2783.tistory.com
[2편] https://shs2783.tistory.com/10
WAV 파일을 분석해보자 (with 파이썬) - 2
[1편] https://shs2783.tistory.com/6 WAV 파일을 분석해보자 (with 파이썬) - 1 1. 전체적인 구조 wav 파일은 크게 헤더(header)와 데이터(data)로 구성되어 있습니다. 헤더는 파일에 대한 정보입니다. 파일의 크기
shs2783.tistory.com
이번 시간에는 음원 데이터에 대해 자세히 알아봅시다.
1. wav 파일 불러오기
먼저 wav파일을 바이트로 불러옵니다.
(파일은 이전 포스팅과 똑같습니다.)
with open('audio.wav', 'rb') as wav_file:
wav = wav_file.read()
data = wav[44:]
실제 음원데이터는 44번째부터 위치합니다.
그 앞부분은 wav 파일 및 음원에 대한 헤더 정보입니다.
(헤더 정보에 대한 설명은 파트 1, 2를 참고하시기 바랍니다.)
음원에 대한 주요 정보를 간략하게 보면
BitsPerSample = 16bit
NumChannels = 2채널
BlockAlign = 4bytes
SampleRate = 44100hz
입니다. (이전 포스팅 참고)
BitsPerSample = 16bit이기 때문에 한 샘플당 2바이트(=16비트) 크기를 차지하고
NumChannels = 2채널이기 때문에 한 샘플 블록 안에 2가지 샘플이 들어 있습니다.
그래서 샘플 블록 하나의 크기는 4바이트입니다. (BlockAlign = 2채널 * 2bytes= 4bytes)
그리고 SampleRate = 44100hz이기 때문에 (1개의 채널에서) 초당 44100개의 샘플이 들어있습니다.
2. bytes를 정수 데이터로 변환
이제 바이트로 된 데이터를 우리가 볼 수 있는 숫자로 바꿔줍시다.
import struct
samples_L = []
samples_R = []
block_align = 4
for i in range(0, len(data), block_align):
sample_block = data[i: i+block_align]
sample = struct.unpack('hh', sample_block)
samples_L.append(sample[0])
samples_R.append(sample[1])
숫자로 변환된 샘플을 담을 리스트를 만들어줍니다.
2채널이기 때문에 L, R 리스트 두 개를 만들고
반복문으로 한 샘플 블록 (4바이트)씩 struct 모듈을 이용해 숫자로 바꿔줍니다.
샘플 블록 안에는 2바이트 샘플이 2개 있기 때문에 'hh'로 언패킹 해줍니다.
print(samples_L[:20])
print(samples_R[:20])
>>> [172, 161, 161, 148, 134, 137, 126, 97, 72, 54, 50, 60, 66, 93, 130, 146, 156, 167, 160, 170]
[11, 37, 31, 24, 30, 32, 32, 39, 47, 57, 78, 80, 65, 71, 66, 60, 68, 55, 50, 64]
샘플을 출력해보면 정수의 형태로 잘 바뀐것을 볼 수 있습니다.
참고로 샘플 당 2바이트(=16비트)이기 때문에 한 샘플의 최소 ~ 최대값은 -32768 ~ 32767입니다.
3. 데이터 시각화
단순히 결과를 숫자로만 봐서는 어떻게 생겼는지 잘 모르겠죠?
데이터를 한 번 시각화 해봅시다.
import matplotlib.pyplot as plt
plt.subplot(2, 1, 1)
plt.plot(samples_L)
plt.subplot(2, 1, 2)
plt.plot(samples_R)
plt.show()

위에가 L이고 아래가 R입니다.
그래프로 시각화해보니 익숙한 사운드 파장 형태로 나타나는 것을 보실 수 있습니다.
여기까지 wav 파일에 대한 설명이었습니다.
다음은 직접 사운드를 생성해 wav 파일을 만들어 보겠습니다.
'Audio' 카테고리의 다른 글
WAV 파일을 분석해보자 (with 파이썬) - 2 (0) | 2023.02.02 |
---|---|
WAV 파일을 분석해보자 (with 파이썬) - 1 (0) | 2023.01.17 |