Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python(aifc)을 사용하여 AIFF 및 AIFC 파일 읽기 및 쓰기

<시간/>

aifc 모듈의 다양한 기능은 AIFF(Audio Interchange File Format) 및 AIFF-C 파일 읽기 및 쓰기를 지원합니다. AIFF 형식은 디지털 오디오 샘플을 파일로 저장하기 위한 것입니다. 최신 버전 AIFF-C에는 오디오 데이터를 압축하는 기능이 있습니다.

오디오 파일에는 오디오 데이터를 설명하는 여러 매개변수가 있습니다.

  • 샘플링 속도 또는 프레임 속도:초당 사운드가 샘플링되는 횟수입니다.

  • 채널 수:오디오가 모노, 스테레오 또는 쿼드로인지 나타냅니다.

  • frame :채널당 하나의 샘플로 구성됩니다.

  • 샘플 크기:각 샘플의 크기(바이트).

따라서 프레임은 채널 * 샘플 크기 바이트로 구성됩니다. 1초의 오디오 데이터는 채널 * 샘플 크기 * 프레임 속도 바이트입니다.

aifc 모듈에 정의된 함수는 다음과 같습니다.

aifc.open()

이 함수는 AIFF 또는 AIFF-C 파일을 열고 모드에 따라 오디오 데이터 읽기/쓰기를 위한 개체 인스턴스를 반환합니다. 파일을 읽기 위해 열어야 하는 경우 'r' 또는 'rb'여야 합니다. 파일을 쓰기 위해 열어야 하는 경우 'w' 또는 'wb'여야 합니다.

쓰기 모드가 있는 개체는 다음 기능을 사용합니다.

aiff()
AIFF 파일을 생성합니다.
aifc()
AIFF-C 파일을 생성합니다.
setnchannels()
오디오 파일의 채널 수를 지정합니다.
setsampwidth()
오디오 샘플의 크기를 바이트 단위로 지정합니다.
setframerate()
샘플링 주파수를 초당 프레임 수로 지정합니다.
setnframes()
오디오 파일에 기록될 프레임 수를 지정합니다.
setcomptype()
압축 유형을 지정합니다. AIFF 파일은 압축할 수 없습니다. 지원되는 압축 유형 - b'NONE', b'ULAW', b'ALAW', b'G722'.
setparams()
위의 모든 매개변수를 한 번에 설정합니다. 인수는 다양한 매개변수로 구성된 튜플입니다.
쓰기 프레임()
출력 파일에 데이터를 씁니다. 티
writeframesraw()
오디오 파일의 헤더가 업데이트되지 않는다는 점을 제외하고 writeframes()와 유사합니다.

다음 프로그램은 AIFF 파일을 생성합니다.

import aifc, struct
sampleRate = 44100.0 # hertz
duration = 1.0 # seconds
frequency = 440.0 # hertz
obj = aifc.open('sound.aiff','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()

aiff 또는 aiff-c 읽기 개체는 다음 기능을 사용합니다.

getnchannels()
오디오 채널 수를 반환합니다(모노의 경우 1, 스테레오의 경우 2).
getsampwidth()
개별 샘플의 크기를 바이트 단위로 반환합니다.
getframerate()
샘플링 속도(초당 오디오 프레임 수)를 반환합니다.
getnframes()
파일의 오디오 프레임 수를 반환합니다.
getcomptype()
오디오 파일에 사용된 압축 유형을 설명하는 길이 4의 바이트 배열을 반환합니다.
getparams()
namedtuple()을 반환합니다(nchannels, sampwidth, framerate, nframes, comptype, compname
읽기 프레임()
오디오 파일에서 다음 nframes 프레임을 읽고 반환합니다.
setpos(pos)
지정된 프레임 번호를 찾습니다.

다음 함수는 읽기 및 쓰기 가능한 aiff 개체에 사용할 수 있습니다.

되감기()
읽은 포인터를 되감습니다. 다음 readframes()는 처음부터 시작됩니다.
말()
현재 프레임 번호를 반환합니다.
닫기()
AIFF 파일을 닫습니다. 이 메서드를 호출한 후에는 개체를 더 이상 사용할 수 없습니다.

예시

다음 프로그램은 aiff 파일의 속성을 읽습니다.

import aifc
obj = aifc.open('sound.aiff','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: _aifc_params(nchannels=1, sampwidth=2, framerate=44100, nframes=99999, comptype=b'NONE', compname=b'not compressed')