# `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()`를 호출한 후 파라미터를 설정하는 것은 유효하지 않습니다.