aifc
— AIFF와 AIFC 파일 읽고 쓰기¶
소스 코드: Lib/aifc.py
이 모듈은 AIFF와 AIFF-C 파일을 읽고 쓸 수 있도록 지원합니다. AIFF는 디지털 오디오 샘플을 파일에 저장하는 형식인 Audio Interchange File Format입니다. AIFF-C는 오디오 데이터를 압축하는 기능을 포함하는 이 형식의 새 버전입니다.
오디오 파일에는 오디오 데이터를 설명하는 많은 파라미터가 있습니다. 샘플링 속도나 프레임 속도는 음향을 샘플링하는 초당 횟수입니다. 채널 수는 오디오가 모노(mono), 스테레오(stereo) 또는 쿼드로(quadro)인지를 나타냅니다. 각 프레임은 채널 당 하나의 샘플로 구성됩니다. 샘플 크기는 각 샘플의 크기를 바이트로 표현한 것입니다. 따라서 프레임은 nchannels * samplesize
바이트로 구성되고, 1초 분량의 오디오는 nchannels * samplesize * framerate
바이트로 구성됩니다.
예를 들어, CD 품질 오디오는 샘플 크기가 2바이트 (16비트)이고, 2채널(스테레오)을 사용하며 프레임 속도가 44,100프레임/초입니다. 이는 4바이트(2*2)의 프레임 크기를 제공하고, 1초 분량의 오디오는 2*2*44100바이트(176,400바이트)를 차지합니다.
모듈 aifc
는 다음 함수를 정의합니다:
- aifc.open(file, mode=None)¶
AIFF나 AIFF-C 파일을 열고 아래에 설명된 메서드를 갖는 객체 인스턴스를 반환합니다. 인자 file는 파일을 명명하는 문자열이거나 파일 객체입니다. mode는 파일을 읽기 위해 열어야 할 때
'r'
이나'rb'
여야 하며, 파일을 쓰기 위해 열어야 하는 경우'w'
나'wb'
여야 합니다. 생략하면,file.mode
가 있으면 그것을 쓰고, 그렇지 않으면'rb'
가 사용됩니다. 쓰기 위해 열 때는, 앞으로 기록할 샘플의 총수를 미리 알고writeframesraw()
및setnframes()
를 사용하지 않는 한 파일 객체는 위치 변경할 수 있어야(seekable) 합니다.open()
함수는with
문에서 사용될 수 있습니다.with
블록이 완료될 때close()
메서드가 호출됩니다.버전 3.4에서 변경:
with
문에 대한 지원이 추가되었습니다.
파일을 읽기 위해 열 때 open()
가 반환하는 객체는 다음과 같은 메서드를 가집니다:
- aifc.getnchannels()¶
오디오 채널 수를 반환합니다 (모노는 1, 스테레오는 2).
- aifc.getsampwidth()¶
개별 샘플의 크기를 바이트 단위로 반환합니다.
- aifc.getframerate()¶
샘플링 속도(초당 오디오 프레임의 수)를 반환합니다.
- aifc.getnframes()¶
파일 내의 오디오 프레임의 수를 반환합니다.
- aifc.getcomptype()¶
오디오 파일에서 사용된 압축 유형을 설명하는 길이 4의 바이트열을 반환합니다. AIFF 파일의 경우, 반환 값은
b'NONE'
입니다.
- aifc.getcompname()¶
오디오 파일에서 사용된 압축 유형을 사람이 읽을 수 있는 형식으로 변환할 수 있는 바이트열을 반환합니다. AIFF 파일의 경우, 반환 값은
b'not compressed'
입니다.
- aifc.getparams()¶
get*()
메서드의 결과와 동등한,namedtuple()
(nchannels, sampwidth, framerate, nframes, comptype, compname)
을 반환합니다.
- aifc.getmarkers()¶
오디오 파일의 마커(marker) 리스트를 반환합니다. 마커는 세 요소의 튜플로 구성됩니다. 첫 번째는 마크 ID(정수)이고, 두 번째는 데이터 시작부터 따진 프레임에서의 마크 위치이며 (정수), 세 번째는 마크의 이름입니다 (문자열).
- aifc.getmark(id)¶
지정된 id를 가진 마크에 대해
getmarkers()
에 설명된 튜플을 반환합니다.
- aifc.readframes(nframes)¶
오디오 파일에서 다음 nframes 프레임을 읽고 반환합니다. 반환된 데이터는 각 프레임의 모든 채널의 압축되지 않은 샘플을 포함하는 문자열입니다.
- aifc.rewind()¶
읽기 포인터를 되감습니다. 다음
readframes()
는 처음부터 시작됩니다.
- aifc.setpos(pos)¶
지정된 프레임 번호로 위치 변경합니다.
- aifc.tell()¶
현재의 프레임 번호를 반환합니다.
- aifc.close()¶
AIFF 파일을 닫습니다. 이 메서드를 호출한 후에는 객체를 더는 사용할 수 없습니다.
파일을 쓰기 위해 열 때, open()
이 반환하는 객체는 readframes()
와 setpos()
를 제외하고 위의 모든 메서드를 가집니다. 이에 더해 다음과 같은 메서드가 있습니다. get*()
메서드는 해당 set*()
메서드가 호출된 후에만 호출할 수 있습니다. 첫 번째 writeframes()
나 writeframesraw()
이전에, 프레임 수를 제외한 모든 파라미터를 채워야 합니다.
- aifc.aiff()¶
AIFF 파일을 만듭니다. 기본값은 AIFF-C 파일을 만드는 것입니다. 파일 이름이
'.aiff'
로 끝날 때는 예외인데, 이때 기본값은 AIFF 파일입니다.
- aifc.aifc()¶
AIFF-C 파일을 만듭니다. 기본값은 AIFF-C 파일을 만드는 것입니다. 파일 이름이
'.aiff'
로 끝날 때는 예외인데, 이때 기본값은 AIFF 파일입니다.
- aifc.setnchannels(nchannels)¶
오디오 파일의 채널 수를 지정합니다.
- aifc.setsampwidth(width)¶
오디오 샘플의 크기를 바이트 단위로 지정합니다.
- aifc.setframerate(rate)¶
샘플링 빈도를 초당 프레임 수로 지정합니다.
- aifc.setnframes(nframes)¶
오디오 파일에 기록할 프레임 수를 지정합니다. 이 파라미터가 설정되지 않거나, 올바르게 설정되지 않으면, 파일은 위치 변경을 지원해야 합니다.
- aifc.setcomptype(type, name)¶
압축 유형을 지정합니다. 지정하지 않으면, 오디오 데이터는 압축되지 않습니다. AIFF 파일에서, 압축은 불가능합니다. name 매개 변수는 사람이 읽을 수 있는 압축 유형 설명을 바이트열로 제공해야 하며, type 매개 변수는 길이가 4인 바이트열이어야 합니다. 현재 다음 압축 유형이 지원됩니다:
b'NONE'
,b'ULAW'
,b'ALAW'
,b'G722'
.
- aifc.setparams(nchannels, sampwidth, framerate, comptype, compname)¶
위의 모든 파라미터를 한 번에 설정합니다. 인자는 여러 파라미터로 구성된 튜플입니다. 이것은
getparams()
호출의 결과를setparams()
의 인자로 사용할 수 있음을 뜻합니다.
- aifc.setmark(id, pos, name)¶
지정된 id(0보다 큰 값)의 마크를 주어진 name으로 주어진 위치에 추가합니다. 이 메서드는
close()
이전에 언제든지 호출할 수 있습니다.
- aifc.tell()
출력 파일의 현재 쓰기 위치를 반환합니다.
setmark()
와 함께 사용하면 유용합니다.
- aifc.writeframes(data)¶
데이터를 출력 파일에 씁니다. 이 메서드는 오디오 파일 파라미터가 설정된 후에만 호출할 수 있습니다.
버전 3.4에서 변경: 이제 모든 바이트열류 객체가 허용됩니다.
- aifc.writeframesraw(data)¶
오디오 파일의 헤더가 갱신되지 않는다는 점을 제외하고는,
writeframes()
와 같습니다.버전 3.4에서 변경: 이제 모든 바이트열류 객체가 허용됩니다.
- aifc.close()
AIFF 파일을 닫습니다. 파일의 헤더는 오디오 데이터의 실제 크기를 반영하도록 갱신됩니다. 이 메서드를 호출한 후에는, 객체를 더는 사용할 수 없습니다.