Python 표준 라이브러리의 웨이브 모듈은 오디오 WAV 형식에 대한 쉬운 인터페이스입니다. 이 모듈의 기능은 원시 형식의 오디오 데이터를 객체와 같은 파일에 쓰고 WAV 파일의 속성을 읽을 수 있습니다.
파일은 내장된 open() 함수와 마찬가지로 '쓰기' 또는 읽기 모드로 열리지만 웨이브 모듈에서는 open() 함수로 열립니다.
wave.open()
이 기능은 오디오 데이터를 읽고 쓰기 위해 파일을 엽니다. 함수에는 두 개의 매개변수가 필요합니다. 첫 번째는 파일 이름이고 두 번째는 모드입니다. 모드는 오디오 데이터 쓰기를 위한 'wb' 또는 읽기를 위한 'rb'일 수 있습니다.
obj = wave.open('sound.wav','wb')
'rb' 모드는 Wave_read 개체를 반환하고 'wb' 모드는 Wave_write 개체를 반환합니다.
Wave_write 개체에는 다음 메서드가 있습니다.
닫기() | Wave로 파일을 연 경우 파일을 닫습니다. |
setnchannels() | 채널 수를 설정합니다. 모노용 1개 스테레오 채널용 2 |
setsampwidth() | 샘플 너비를 n바이트로 설정합니다. |
setframerate() | 프레임 속도를 n으로 설정합니다. |
setnframes() | 프레임 수를 n으로 설정합니다. |
setcomptype() | 압축 유형 및 설명을 설정합니다. 현재 NONE 압축 유형만 지원되며 이는 압축이 없음을 의미합니다. |
setparams() | 매개변수 튜플(nchannels, sampwidth, framerate, nframes, comptype, compname) 허용 |
말() | 파일의 현재 위치 검색 |
writeframesraw() | 수정하지 않고 오디오 프레임을 작성합니다. |
쓰기 프레임() | 오디오 프레임을 작성하고 올바른지 확인하십시오. |
다음 코드는 99999초 길이의 짧은 정수 바이트 임의의 WAV 파일을 생성합니다.
import wave, struct, math, random sampleRate = 44100.0 # hertz duration = 1.0 # seconds frequency = 440.0 # hertz obj = wave.open('sound.wav','w') obj.setnchannels(1) # mono obj.setsampwidth(2) obj.setframerate(sampleRate) for i in range(99999): value = random.randint(-32767, 32767) data = struct.pack('<h', value) obj.writeframesraw( data ) obj.close()
Wave_read 개체 메서드
닫기() | 스트림이 웨이브 모듈에 의해 열린 경우 스트림을 닫습니다. |
getnchannels() | 오디오 채널 수를 반환합니다(모노의 경우 1, 스테레오의 경우 2). |
getsampwidth() | 샘플 너비를 바이트 단위로 반환합니다. |
getframerate() | 샘플링 빈도를 반환합니다. |
getnframes() | 오디오 프레임 수를 반환합니다. |
getcomptype() | 압축 유형을 반환합니다('NONE'만 지원됨). |
getparams() | get*() 메서드의 출력과 동일한 명명된 튜플()(nchannels, sampwidth, framerate, nframes, comptype, compname)을 반환합니다. |
읽기 프레임(n) | 바이트 개체로 최대 n 프레임의 오디오를 읽고 반환합니다. |
되감기() | 파일 포인터를 오디오 스트림의 시작 부분으로 되감습니다. |
다음 코드는 WAV 파일의 일부 매개변수를 읽습니다.
import wave obj = wave.open('sound.wav','r') print( "Number of channels",obj.getnchannels()) print ( "Sample width",obj.getsampwidth()) print ( "Frame rate.",obj.getframerate()) print ("Number of frames",obj.getnframes()) print ( "parameters:",obj.getparams()) obj.close()
출력
Number of channels 1 Sample width 2 Frame rate. 44100 Number of frames 99999 parameters: _wave_params(nchannels=1, sampwidth=2, framerate=44100, nframes=99999, comptype='NONE', compname='not compressed')