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')