wave — WAV 파일 읽고 쓰기¶
소스 코드: Lib/wave.py
wave 모듈은 파형 오디오 “WAVE” (또는 “WAV”) 파일 형식에 편리한 인터페이스를 제공합니다.
이 모듈은 압축되지 않은 PCM 및 IEEE 부동 소수점 WAV 형식을 지원합니다.
버전 3.12에서 변경: 확장 형식이 KSDATAFORMAT_SUBTYPE_PCM``인 경우, ``WAVE_FORMAT_EXTENSIBLE 헤더에 대한 지원이 추가되었습니다.
버전 3.15에서 변경: WAVE_FORMAT_IEEE_FLOAT 파일을 읽고 쓰는 지원이 추가되었습니다.
wave 모듈은 다음 함수와 예외를 정의합니다:
- wave.open(file, mode=None)¶
If file is a string, a path-like object or a bytes-like object open the file by that name, otherwise treat it as a file-like object. mode can be:
'rb'읽기 전용 모드.
'wb'쓰기 전용 모드.
WAV 파일의 읽기와 쓰기를 동시에 허락하지 않음에 유의하십시오.
'rb'mode는Wave_read객체를 반환하고,'wb'mode는Wave_write객체를 반환합니다. mode가 생략되고, 파일류 객체가 file로 전달되면,file.mode가 mode의 기본값으로 사용됩니다.파일류 객체를 전달하면,
close()메서드가 호출될 때 wave 객체는 그 파일을 닫지 않습니다. 파일 객체를 닫는 것은 호출자의 책임입니다.open()함수는with문과 함께 사용할 수 있습니다.with블록이 완료될 때,Wave_read.close()나Wave_write.close()메서드가 호출됩니다.버전 3.4에서 변경: 위치 변경할 수 없는(unseekable) 파일에 대한 지원이 추가되었습니다.
- exception wave.Error¶
WAV 명세를 위반하거나 구현 결함으로 인해 무언가가 불가능할 때 발생하는 에러.
- wave.WAVE_FORMAT_PCM¶
압축되지 않은 PCM 오디오의 형식 코드입니다.
- wave.WAVE_FORMAT_IEEE_FLOAT¶
IEEE 부동 소수점 오디오 형식 코드입니다.
- wave.WAVE_FORMAT_EXTENSIBLE¶
WAVE 확장 헤더의 형식 코드입니다.
Wave_read 객체¶
- class wave.Wave_read¶
WAV 파일을 읽습니다.
open()이 반환하는, Wave_read 객체는 다음과 같은 메서드를 가지고 있습니다:- getnchannels()¶
오디오 채널 수를 반환합니다 (모노는
1, 스테레오는2).
- getsampwidth()¶
샘플 폭을 바이트 단위로 반환합니다.
- getframerate()¶
샘플링 빈도를 반환합니다.
- getnframes()¶
오디오 프레임의 수를 반환합니다.
- getformat()¶
프레임 형식 코드를 반환합니다.
이는
WAVE_FORMAT_PCM,WAVE_FORMAT_IEEE_FLOAT, 또는WAVE_FORMAT_EXTENSIBLE중 하나입니다.
- getcomptype()¶
압축 유형을 반환합니다 (지원되는 유형은
'NONE'뿐입니다).
- getcompname()¶
getcomptype()의 사람이 읽을 수 있는 버전. 보통'not compressed'이'NONE'에 해당합니다.
- getparams()¶
get*()메서드의 결과와 동등한,namedtuple()(nchannels, sampwidth, framerate, nframes, comptype, compname)를 반환합니다.
- rewind()¶
파일 포인터를 오디오 스트림의 시작 부분으로 되감습니다.
다음의 두 메서드는 이들 사이에서 호환 가능한 용어 “위치(position)”를 정의하며, 그 외에는 구현에 따라 다릅니다.
- setpos(pos)¶
파일 포인터를 지정된 위치로 설정합니다.
- tell()¶
현재 파일 포인터 위치를 반환합니다.
Wave_write 객체¶
- class wave.Wave_write¶
WAV 파일을 기록합니다.
open()에 의해 반환된 Wave_write 객체에.위치 변경할 수 있는(seekable) 출력 스트림의 경우, 실제로 기록된 프레임 수를 반영하도록
wave헤더가 자동으로 갱신됩니다. 위치 변경할 수 없는(unseekable) 스트림의 경우, 첫 번째 프레임 데이터를 쓸 때, nframes 값이 정확해야 합니다. 정확한 nframes 값을 실현하려면close()가 호출되기 전에 기록될 프레임 수로setnframes()나setparams()를 호출한 다음,writeframesraw()를 사용하여 프레임 데이터를 쓰거나, 기록할 모든 프레임 데이터로writeframes()를 호출할 수 있습니다. 후자의 경우writeframes()는 데이터의 프레임 수를 계산하고 프레임 데이터를 기록하기 전에 적절한 nframes를 설정합니다.버전 3.4에서 변경: 위치 변경할 수 없는(unseekable) 파일에 대한 지원이 추가되었습니다.
Wave_write 객체에는 다음과 같은 메서드가 있습니다:
- close()¶
nframes 가 올바른지 확인하고, 파일이
wave에 의해 열렸다면 파일을 닫습니다. 이 메서드는 객체 수집 시 호출됩니다. 출력 스트림이 검색 가능하지 않거나 nframes 가 실제로 기록된 프레임 수와 일치하지 않으면 예외를 발생시킵니다.
- setnchannels(n)¶
채널 수를 설정합니다.
- getnchannels()¶
채널 수를 반환합니다.
- setsampwidth(n)¶
샘플 폭을 n 바이트로 설정합니다.
:data:`WAVE_FORMAT_IEEE_FLOAT`의 경우, 4바이트(32비트) 및 8바이트(64비트) 샘플 폭만 지원됩니다.
- getsampwidth()¶
바이트 단위의 샘플 폭을 반환합니다.
- setframerate(n)¶
프레임 속도를 n으로 설정합니다.
버전 3.2에서 변경: 이 메서드에 대한 비 정수 입력은 가장 가까운 정수로 자리 올림 됩니다.
- getframerate()¶
프레임 속도를 반환합니다.
- setnframes(n)¶
프레임 수를 n으로 설정합니다. 실제로 쓴 프레임 수가 다르면 나중에 변경됩니다 (이 변경 시도는 출력 스트림이 위치 변경할 수 없으면 에러를 발생시킵니다).
- getnframes()¶
지금까지 기록된 오디오 프레임의 수를 반환합니다.
- setcomptype(type, name)¶
압축 유형과 설명을 설정합니다. 현재, 압축 유형
NONE만 지원됩니다. 즉, 압축하지 않습니다.
- getcomptype()¶
압축 유형 (
'NONE')을 반환합니다.
- getcompname()¶
사람이 읽을 수 있는 압축 유형 이름을 반환합니다.
- setformat(format)¶
프레임 형식 코드를 설정합니다.
지원되는 값은 :data:`WAVE_FORMAT_PCM`과 :data:`WAVE_FORMAT_IEEE_FLOAT`입니다.
:data:`WAVE_FORMAT_IEEE_FLOAT`를 설정할 때, 샘플 폭은 4바이트 또는 8바이트여야 합니다.
- getformat()¶
현재 프레임 형식 코드를 반환합니다.
- setparams(tuple)¶
tuple 은
(nchannels, sampwidth, framerate, nframes, comptype, compname, format)형태여야 하며, 값은set*()메서드에 유효해야 합니다. 모든 파라미터를 설정합니다.하위 호환성을 위해 format 이 없는 6개 항목 튜플도 허용되며,
WAVE_FORMAT_PCM으로 기본 설정됩니다.format=WAVE_FORMAT_IEEE_FLOAT의 경우, sampwidth 는 4 또는 8이어야 합니다.
- getparams()¶
현재 출력 파라미터를 포함하는
namedtuple()(nchannels, sampwidth, framerate, nframes, comptype, compname)을 반환합니다.
- tell()¶
파일의 현재 위치를 반환하는데,
Wave_read.tell()과Wave_read.setpos()메서드와 같은 면책 조항이 적용됩니다.
- writeframes(data)¶
오디오 프레임을 기록하고 nframes를 올바르게 만듭니다. 출력 스트림이 위치 변경할 수 없고 data를 기록한 후에 기록된 총 프레임 수가 nframes에 대해 이전에 설정된 값과 일치하지 않으면 에러가 발생시킵니다.
버전 3.4에서 변경: 이제 모든 바이트열류 객체가 허락됩니다.
writeframes()나writeframesraw()를 호출한 후 파라미터를 설정하는 것이 유효하지 않고, 이를 시도하면wave.Error가 발생함에 유의하십시오.WAVE_FORMAT_IEEE_FLOAT출력의 경우, WAVE 사양에서 비-PCM 형식에 요구하는 대로fact청크가 작성됩니다.