"sunau" --- Sun AU 파일 읽고 쓰기
*********************************

**소스 코드:** Lib/sunau.py

======================================================================

"sunau" 모듈은 Sun AU 음향 형식에 편리한 인터페이스를 제공합니다. 이
모듈은 모듈 "aifc"와 "wave" 모듈과 인터페이스 호환됩니다.

오디오 파일은 헤더와 뒤따르는 데이터로 구성됩니다. 헤더의 필드는 다음
과 같습니다:

+-----------------+-------------------------------------------------+
| 필드            | 내용                                            |
|=================|=================================================|
| 매직 워드       | 4바이트 ".snd".                                 |
+-----------------+-------------------------------------------------+
| 헤더 크기       | info를 포함한 헤더의 크기 (바이트).             |
+-----------------+-------------------------------------------------+
| 데이터 크기     | 데이터의 물리적 크기 (바이트).                  |
+-----------------+-------------------------------------------------+
| 인코딩          | 오디오 샘플이 인코딩되는 방법을 나타냅니다.     |
| (encoding)      |                                                 |
+-----------------+-------------------------------------------------+
| 샘플 속도       | 샘플링 속도.                                    |
| (sample rate)   |                                                 |
+-----------------+-------------------------------------------------+
| 채널 수         | 샘플의 채널 수.                                 |
+-----------------+-------------------------------------------------+
| info(정보)      | 오디오 파일에 대한 설명을 제공하는 ASCII 문자열 |
|                 | (널 바이트로 채워집니 다).                      |
+-----------------+-------------------------------------------------+

info 필드는 제외하고, 모든 헤더 필드의 크기는 4바이트입니다. 이것들은
모두 빅 엔디안 바이트 순서로 인코딩된 32비트 부호 없는 정수입니다.

"sunau" 모듈은 다음 함수를 정의합니다:

sunau.open(file, mode)

   *file*이 문자열이면, 그 이름으로 파일을 열고, 그렇지 않으면 위치 변
   경할 수 있는 파일류 객체로 처리합니다. *mode*는 다음 중 하나일 수
   있습니다.

   "'r'"
      읽기 전용 모드.

   "'w'"
      쓰기 전용 모드.

   읽기와 쓰기를 동시에 지원하지 않음에 유의하십시오.

   "'r'"의 *mode*는 "AU_read" 객체를 반환하고, "'w'" 나 "'wb'"의
   *mode*는 "AU_write" 객체를 반환합니다.

sunau.openfp(file, mode)

   이전 버전과의 호환성을 위해 유지되는, "open()"의 동의어입니다.

   Deprecated since version 3.7, will be removed in version 3.9.

"sunau" 모듈은 다음 예외를 정의합니다:

exception sunau.Error

   Sun AU 명세나 구현 결함으로 인해 무언가가 불가능할 때 발생하는 에러
   .

"sunau" 모듈은 다음 데이터 항목을 정의합니다:

sunau.AUDIO_FILE_MAGIC

   유효한 모든 Sun AU 파일이 시작하는 빅 엔디안 형식으로 저장된 정수.
   이것은 정수로 해석되는 문자열 ".snd"입니다.

sunau.AUDIO_FILE_ENCODING_MULAW_8
sunau.AUDIO_FILE_ENCODING_LINEAR_8
sunau.AUDIO_FILE_ENCODING_LINEAR_16
sunau.AUDIO_FILE_ENCODING_LINEAR_24
sunau.AUDIO_FILE_ENCODING_LINEAR_32
sunau.AUDIO_FILE_ENCODING_ALAW_8

   이 모듈이 지원하는, AU 헤더의 인코딩 필드 값.

sunau.AUDIO_FILE_ENCODING_FLOAT
sunau.AUDIO_FILE_ENCODING_DOUBLE
sunau.AUDIO_FILE_ENCODING_ADPCM_G721
sunau.AUDIO_FILE_ENCODING_ADPCM_G722
sunau.AUDIO_FILE_ENCODING_ADPCM_G723_3
sunau.AUDIO_FILE_ENCODING_ADPCM_G723_5

   추가로 알려진 AU 헤더의 인코딩 필드 값이지만, 이 모듈에서 지원하지
   않는 값.


AU_read 객체
============

위의 "open()"에 의해 반환된 AU_read 객체는 다음과 같은 메서드를 가지고
있습니다:

AU_read.close()

   스트림을 닫고, 인스턴스를 사용할 수 없게 합니다. (삭제 시 자동으로
   호출됩니다.)

AU_read.getnchannels()

   오디오 채널 수를 반환합니다 (모노는 1, 스테레오는 2).

AU_read.getsampwidth()

   샘플 폭을 바이트 단위로 반환합니다.

AU_read.getframerate()

   샘플링 빈도를 반환합니다.

AU_read.getnframes()

   오디오 프레임의 수를 반환합니다.

AU_read.getcomptype()

   압축 유형을 반환합니다. 지원되는 압축 유형은 "'ULAW'", "'ALAW'" 및
   "'NONE'"입니다.

AU_read.getcompname()

   "getcomptype()"의 사람이 읽을 수 있는 버전. 지원되는 유형은 각각
   "'CCITT G.711 u-law'", "'CCITT G.711 A-law'" 및 "'not compressed'"
   이름입니다.

AU_read.getparams()

   "get*()" 메서드의 결과와 동등한, "namedtuple()" "(nchannels,
   sampwidth, framerate, nframes, comptype, compname)"를 반환합니다.

AU_read.readframes(n)

   최대 *n* 프레임의 오디오를 "bytes" 객체로 읽고 반환합니다. 데이터는
   선형 형식(linear format)으로 반환됩니다. 원본 데이터가 u-LAW 형식이
   면, 변환됩니다.

AU_read.rewind()

   파일 포인터를 오디오 스트림의 시작 부분으로 되감습니다.

다음의 두 메서드는 이들 사이에서 호환 가능한 용어 "위치(position)"를
정의하며, 그 외에는 구현에 따라 다릅니다.

AU_read.setpos(pos)

   파일 포인터를 지정된 위치로 설정합니다. "tell()"에서 반환된 값만
   *pos*에 사용해야 합니다.

AU_read.tell()

   현재 파일 포인터 위치를 반환합니다. 반환된 값은 파일에서의 실제 위
   치와 아무런 관련이 없음에 유의하십시오.

다음 두 함수는 "aifc"와의 호환성을 위해 정의되었으며, 흥미로운 작업을
수행하지 않습니다.

AU_read.getmarkers()

   "None"을 반환합니다.

AU_read.getmark(id)

   에러를 발생시킵니다.


AU_write 객체
=============

위의 "open()"에서 반환된 AU_write 객체에는 다음과 같은 메서드가 있습니
다:

AU_write.setnchannels(n)

   채널 수를 설정합니다.

AU_write.setsampwidth(n)

   샘플 폭을 설정합니다 (바이트 단위).

   버전 3.4에서 변경: 24비트 샘플에 대한 지원이 추가되었습니다.

AU_write.setframerate(n)

   프레임 속도를 설정합니다.

AU_write.setnframes(n)

   프레임 수를 설정합니다. 더 많은 프레임이 기록되면 나중에 변경될 수
   있습니다.

AU_write.setcomptype(type, name)

   압축 유형과 설명을 설정합니다. 출력에는 "'NONE'" 과 "'ULAW'" 만 지
   원됩니다.

AU_write.setparams(tuple)

   *tuple*은 "(nchannels, sampwidth, framerate, nframes, comptype,
   compname)"이어야 하며, "set*()" 메서드에 유효한 값이어야 합니다. 모
   든 파라미터를 설정합니다.

AU_write.tell()

   파일의 현재 위치를 반환하는데, "AU_read.tell()" 과
   "AU_read.setpos()" 메서드와 같은 면책 조항이 적용됩니다.

AU_write.writeframesraw(data)

   *nframes*를 수정하지 않고 오디오 프레임을 씁니다.

   버전 3.4에서 변경: 이제 모든 *바이트열류 객체*가 허락됩니다.

AU_write.writeframes(data)

   오디오 프레임을 쓰고 *nframes*를 올바르게 만듭니다.

   버전 3.4에서 변경: 이제 모든 *바이트열류 객체*가 허락됩니다.

AU_write.close()

   *nframes*를 올바르게 만들고 파일을 닫습니다.

   이 메서드는 삭제 시에 호출됩니다.

"writeframes()" 나 "writeframesraw()"를 호출한 후 파라미터를 설정하는
것은 유효하지 않습니다.
