Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python sndhdr 모듈로 사운드 파일 유형 확인하는 방법

파이썬 표준 라이브러리의 sndhdr 모듈은 파일에 저장된 사운드 데이터의 유형을 판별하는 유틸리티 함수를 제공합니다. 이 모듈의 함수들은 다음 다섯 가지 속성을 가진 namedtuple 객체를 반환합니다.

filetype'aifc', 'aiff', 'au', 'hcom', 'sndr', 'sndt', 'voc', 'wav', '8svx', 'sb', 'ub', 'ul' 중 하나를 나타내는 문자열입니다.
framerate샘플링 레이트(sampling rate)입니다. 실제 값을 반환하며, 알 수 없거나 디코딩이 어려운 경우 0이 됩니다.
nchannels오디오 채널 수입니다. 확인할 수 없거나 값의 해석이 어려운 경우 0이 됩니다.
nframes프레임(frame)의 개수입니다. 프레임 수를 알 수 없으면 -1이 반환됩니다.
sampwidth비트 단위의 샘플 크기(bits per sample)입니다. 일반적인 경우 비트 수를 반환하고, A-LAW 방식이면 'A', u-LAW 방식이면 'U'를 반환합니다.

sndhdr 모듈의 주요 함수

sndhdr.what()

이 함수는 내부적으로 whathdr()을 호출하여 filename 파일에 저장된 사운드 데이터의 유형을 판별합니다. 판별에 성공하면 앞서 설명한 namedtuple을 반환하고, 실패하면 None을 반환합니다.

sndhdr.whathdr()

이 함수는 파일의 헤더(header) 정보를 기반으로 해당 파일에 저장된 사운드 데이터의 유형을 판별합니다. 성공 시 namedtuple을 반환하며, 실패 시 None을 반환합니다.

사용 예제

>>> import sndhdr
>>> sndhdr.whathdr("sample.wav")
SndHeaders(filetype = 'wav', framerate = 44100, nchannels = 1, nframes = 99999, sampwidth = 16)
>>> sndhdr.whathdr("sample.aiff")
SndHeaders(filetype = 'aiff', framerate = 8000, nchannels = 1, nframes = 271200, sampwidth = 16)
>>> sndhdr.whathdr("sample.au")
SndHeaders(filetype = 'au', framerate = 8000, nchannels = 1, nframes = 103397.0, sampwidth = 'U')

위 예제에서 볼 수 있듯이, WAV 파일은 44100Hz의 샘플링 레이트와 16비트 샘플 폭을 가지며, AU 파일은 u-LAW 인코딩('U')을 사용하는 것을 확인할 수 있습니다.

참고: sndhdr 모듈은 Python 3.11부터 지원 종료(deprecated) 상태가 되었으며, Python 3.13에서 표준 라이브러리에서 제거되었습니다. 최신 버전의 파이썬에서는 filetype, aifc 등의 서드파티 라이브러리나 직접 파일 헤더를 분석하는 방식으로 대체하는 것이 좋습니다.