wave — WAV 파일 읽기와 쓰기
wave — WAV 파일 읽기와 쓰기
wave 모듈은 Waveform Audio "WAVE"(또는 "WAV") 파일 형식에 대한 편리한 인터페이스를 제공해요. 압축되지 않은 PCM 인코딩 wave 파일만 지원돼요. 버전 3.12에서 확장 형식이 KSDATAFORMAT_SUBTYPE_PCM인 경우 WAVE_FORMAT_EXTENSIBLE 헤더 지원이 추가되었어요.
이 모듈은 다음 함수와 예외를 정의해요:
본문
wave.open(file, mode=None)
file이 문자열이면 그 이름으로 파일을 열고, 그렇지 않으면 파일류 객체(file-like object)로 취급해요. mode는 'rb'(읽기 전용) 또는 'wb'(쓰기 전용)일 수 있어요. 읽기/쓰기를 모두 허용하지는 않는다는 점에 주의하세요. 'rb' 모드는 Wave_read 객체를, 'wb' 모드는 Wave_write 객체를 반환해요. mode가 생략되고 파일류 객체가 file로 전달되면 file.mode가 mode의 기본값으로 사용돼요.
파일류 객체를 전달하면 wave 객체의 close() 메서드가 호출될 때 그 객체를 닫지 않아요. 파일 객체를 닫는 것은 호출자의 책임이에요. open() 함수는 with 문에서 사용할 수 있어요.
exceptionwave.Error
WAV 명세를 위반하거나 구현 결함에 부딪혀 어떤 것이 불가능할 때 발생하는 오류예요.
Wave_read 객체
classwave.Wave_read
WAV 파일을 읽어요. open()이 반환한 Wave_read 객체는 다음 메서드를 가져요:
close()— wave가 연 스트림을 닫고 인스턴스를 사용할 수 없게 만들어요.getnchannels()— 오디오 채널 수를 반환해요(모노는 1, 스테레오는 2).getsampwidth()— 샘플 너비를 바이트 단위로 반환해요.getframerate()— 샘플링 주파수를 반환해요.getnframes()— 오디오 프레임 수를 반환해요.getcomptype()— 압축 타입을 반환해요('NONE'이 유일하게 지원되는 타입).getcompname()—getcomptype()의 인간이 읽을 수 있는 버전.getparams()—(nchannels, sampwidth, framerate, nframes, comptype, compname)namedtuple을 반환해요.readframes(n)— 최대n개의 오디오 프레임을 bytes 객체로 읽고 반환해요.rewind()— 파일 포인터를 오디오 스트림의 시작으로 되감아요.getmarkers(),getmark(id)— 구식 aifc 모듈과의 호환을 위해 정의된 메서드로, 버전 3.13에서 더 이상 사용되지 않고 3.15에서 제거될 예정이에요.setpos(pos)— 파일 포인터를 지정된 위치로 설정해요.tell()— 현재 파일 포인터 위치를 반환해요.
Wave_write 객체
classwave.Wave_write
WAV 파일을 써요.
시커블(seekable) 출력 스트림의 경우 wave 헤더는 실제로 쓰인 프레임 수를 반영하도록 자동으로 업데이트돼요. 시커블하지 않은 스트림의 경우 첫 프레임 데이터가 쓰일 때 nframes 값이 정확해야 해요.
주요 메서드:
close()—nframes가 올바른지 확인하고, wave가 연 파일이면 닫아요.setnchannels(n)/getnchannels()— 채널 수 설정/반환setsampwidth(n)/getsampwidth()— 샘플 너비 설정/반환setframerate(n)/getframerate()— 프레임 레이트 설정/반환setnframes(n)/getnframes()— 프레임 수 설정/반환setcomptype(type, name)/getcomptype()/getcompname()— 압축 타입 설정/반환. 현재 NONE 압축만 지원돼요.setparams(tuple)—(nchannels, sampwidth, framerate, nframes, comptype, compname)튜플로 모든 매개변수를 설정해요.getparams()— 현재 출력 매개변수를 담은 namedtuple을 반환해요.tell()— 파일의 현재 위치를 반환해요.writeframesraw(data)—nframes를 수정하지 않고 오디오 프레임을 써요.writeframes(data)— 오디오 프레임을 쓰고nframes가 올바른지 확인해요.
writeframes() 또는 writeframesraw()를 호출한 후에는 매개변수를 설정하는 것이 유효하지 않으며, 시도하면 wave.Error가 발생한다는 점에 주의하세요.