"wave" --- WAV 파일 읽고 쓰기
*****************************

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

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

The "wave" module provides a convenient interface to the Waveform
Audio "WAVE" (or "WAV") file format. Only uncompressed PCM encoded
wave files are supported.

버전 3.12에서 변경: Support for "WAVE_FORMAT_EXTENSIBLE" headers was
added, provided that the extended format is
"KSDATAFORMAT_SUBTYPE_PCM".

The "wave" module defines the following function and exception:

wave.open(file, mode=None)

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

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

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

   WAV 파일의 읽기와 쓰기를 동시에 허락하지 않음에 유의하십시오.

   "'rb'" *mode*는 "Wave_read" 객체를 반환하고, "'wb'" *mode*는
   "Wave_write" 객체를 반환합니다. *mode*가 생략되고, 파일류 객체가
   *file*로 전달되면, "file.mode"가 *mode*의 기본값으로 사용됩니다.

   파일류 객체를 전달하면, "close()" 메서드가 호출될 때 wave 객체는 그
   파일을 닫지 않습니다. 파일 객체를 닫는 것은 호출자의 책임입니다.

   "open()" 함수는 "with" 문과 함께 사용할 수 있습니다. "with" 블록이
   완료될 때, "Wave_read.close()"나 "Wave_write.close()" 메서드가 호출
   됩니다.

   버전 3.4에서 변경: 위치 변경할 수 없는(unseekable) 파일에 대한 지원
   이 추가되었습니다.

exception wave.Error

   WAV 명세를 위반하거나 구현 결함으로 인해 무언가가 불가능할 때 발생
   하는 에러.


Wave_read 객체
==============

class wave.Wave_read

   WAV 파일을 읽습니다.

   "open()"이 반환하는, Wave_read 객체는 다음과 같은 메서드를 가지고
   있습니다:

   close()

      Close the stream if it was opened by "wave", and make the
      instance unusable.  This is called automatically on object
      collection.

   getnchannels()

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

   getsampwidth()

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

   getframerate()

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

   getnframes()

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

   getcomptype()

      압축 유형을 반환합니다 (지원되는 유형은 "'NONE'" 뿐입니다).

   getcompname()

      "getcomptype()"의 사람이 읽을 수 있는 버전. 보통 "'not
      compressed'"이 "'NONE'"에 해당합니다.

   getparams()

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

   readframes(n)

      최대 *n* 프레임의 오디오를 "bytes" 객체로 읽고 반환합니다.

   rewind()

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

   다음의 두 메서드는 이전 "aifc" 모듈과의 호환성을 위해 정의되었으며,
   흥미로운 작업을 수행하지 않습니다.

   getmarkers()

      "None"을 반환합니다.

      Deprecated since version 3.13, will be removed in version 3.15:
      이 메서드는 파이썬 3.13에서 게거된 "aifc" 모듈과의 호환성을 위해
      서만 존재했습니다.

   getmark(id)

      에러를 발생시킵니다.

      Deprecated since version 3.13, will be removed in version 3.15:
      이 메서드는 파이썬 3.13에서 게거된 "aifc" 모듈과의 호환성을 위해
      서만 존재했습니다.

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

   setpos(pos)

      파일 포인터를 지정된 위치로 설정합니다.

   tell()

      현재 파일 포인터 위치를 반환합니다.


Wave_write 객체
===============

class wave.Wave_write

   WAV 파일을 기록합니다.

   "open()"에 의해 반환된 Wave_write 객체에.

   위치 변경할 수 있는(seekable) 출력 스트림의 경우, 실제로 기록된 프
   레임 수를 반영하도록 "wave" 헤더가 자동으로 갱신됩니다. 위치 변경할
   수 없는(unseekable) 스트림의 경우, 첫 번째 프레임 데이터를 쓸 때,
   *nframes* 값이 정확해야 합니다. 정확한 *nframes* 값을 실현하려면
   "close()"가 호출되기 전에 기록될 프레임 수로 "setnframes()"나
   "setparams()"를 호출한 다음, "writeframesraw()"를 사용하여 프레임
   데이터를 쓰거나, 기록할 모든 프레임 데이터로 "writeframes()"를 호출
   할 수 있습니다. 후자의 경우 "writeframes()"는 데이터의 프레임 수를
   계산하고 프레임 데이터를 기록하기 전에 적절한 *nframes*를 설정합니
   다.

   버전 3.4에서 변경: 위치 변경할 수 없는(unseekable) 파일에 대한 지원
   이 추가되었습니다.

   Wave_write 객체에는 다음과 같은 메서드가 있습니다:

   close()

      Make sure *nframes* is correct, and close the file if it was
      opened by "wave".  This method is called upon object collection.
      It will raise an exception if the output stream is not seekable
      and *nframes* does not match the number of frames actually
      written.

   setnchannels(n)

      채널 수를 설정합니다.

   getnchannels()

      Return the number of channels.

   setsampwidth(n)

      샘플 폭을 *n* 바이트로 설정합니다.

   getsampwidth()

      Return the sample width in bytes.

   setframerate(n)

      프레임 속도를 *n*으로 설정합니다.

      버전 3.2에서 변경: 이 메서드에 대한 비 정수 입력은 가장 가까운
      정수로 자리 올림 됩니다.

   getframerate()

      Return the frame rate.

   setnframes(n)

      프레임 수를 *n*으로 설정합니다. 실제로 쓴 프레임 수가 다르면 나
      중에 변경됩니다 (이 변경 시도는 출력 스트림이 위치 변경할 수 없
      으면 에러를 발생시킵니다).

   getnframes()

      Return the number of audio frames written so far.

   setcomptype(type, name)

      압축 유형과 설명을 설정합니다. 현재, 압축 유형 "NONE" 만 지원됩
      니다. 즉, 압축하지 않습니다.

   getcomptype()

      Return the compression type ("'NONE'").

   getcompname()

      Return the human-readable compression type name.

   setparams(tuple)

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

   getparams()

      Return a "namedtuple()" "(nchannels, sampwidth, framerate,
      nframes, comptype, compname)" containing the current output
      parameters.

   tell()

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

   writeframesraw(data)

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

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

   writeframes(data)

      오디오 프레임을 기록하고 *nframes*를 올바르게 만듭니다. 출력 스
      트림이 위치 변경할 수 없고 *data*를 기록한 후에 기록된 총 프레임
      수가 *nframes*에 대해 이전에 설정된 값과 일치하지 않으면 에러가
      발생시킵니다.

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

      "writeframes()"나 "writeframesraw()"를 호출한 후 파라미터를 설정
      하는 것이 유효하지 않고, 이를 시도하면 "wave.Error"가 발생함에
      유의하십시오.
