21.3. aifc — Lê e escreve arquivos AIFF e AIFC

Código Fonte: Lib/aifc.py


Este módulo fornece suporte para leitura e gravação de arquivos AIFF e AIFF-C. AIFF significa Audio Interchange File Format, um formato para armazenar amostras de áudio digital em um arquivo. AIFF-C é uma versão mais recente do formato que inclui a capacidade de compactar os dados de áudio.

Nota

Some operations may only work under IRIX; these will raise ImportError when attempting to import the cl module, which is only available on IRIX.

Audio files have a number of parameters that describe the audio data. The sampling rate or frame rate is the number of times per second the sound is sampled. The number of channels indicate if the audio is mono, stereo, or quadro. Each frame consists of one sample per channel. The sample size is the size in bytes of each sample. Thus a frame consists of nchannels*samplesize bytes, and a second’s worth of audio consists of nchannels*samplesize*framerate bytes.

Por exemplo, o áudio com qualidade de CD tem um tamanho de amostra de dois bytes (16 bits), usa dois canais (estéreo) e tem uma taxa de quadros de 44.100 quadros/segundo. Isto dá um tamanho de quadro de 4 bytes (2*2), e o valor de um segundo ocupa 2*2*44100 bytes (176.400 bytes).

O módulo aifc define a seguinte função:

aifc.open(file[, mode])

Open an AIFF or AIFF-C file and return an object instance with methods that are described below. The argument file is either a string naming a file or a file object. mode must be 'r' or 'rb' when the file must be opened for reading, or 'w' or 'wb' when the file must be opened for writing. If omitted, file.mode is used if it exists, otherwise 'rb' is used. When used for writing, the file object should be seekable, unless you know ahead of time how many samples you are going to write in total and use writeframesraw() and setnframes().

Objetos retornados por open() quando um arquivo é aberto para leitura têm os seguintes métodos:

aifc.getnchannels()

Retorna o número de canais de áudio (1 para mono, 2 para estéreo).

aifc.getsampwidth()

Retorna o tamanho em bytes de amostras individuais.

aifc.getframerate()

Retorna a taxa de amostra (número de quadros de áudio por segundo).

aifc.getnframes()

Retorna o número de quadros de áudio no arquivo.

aifc.getcomptype()

Return a four-character string describing the type of compression used in the audio file. For AIFF files, the returned value is 'NONE'.

aifc.getcompname()

Return a human-readable description of the type of compression used in the audio file. For AIFF files, the returned value is 'not compressed'.

aifc.getparams()

Return a tuple consisting of all of the above values in the above order.

aifc.getmarkers()

Retorna uma lista de marcadores no arquivo de áudio. Um marcador consiste em uma tupla de três elementos. O primeiro é o ID da marca (um inteiro), o segundo é a posição da marca nos quadros desde o início dos dados (um inteiro), o terceiro é o nome da marca (uma string).

aifc.getmark(id)

Retorna a tupla como descrito em getmarkers() para a marca com o id fornecido.

aifc.readframes(nframes)

Lê e retorna os próximos nframes quadros do arquivo de áudio. Os dados retornados são uma string contendo para cada quadro as amostras descompactadas de todos os canais.

aifc.rewind()

Reinicia o ponteiro de leitura. O próximo readframes() começará do início.

aifc.setpos(pos)

Procura o número do quadro especificado.

aifc.tell()

Retorna o número do quadro atual.

aifc.close()

Fecha o arquivo AIFF. Depois de chamar esse método, o objeto não pode mais ser usado.

Objetos retornados por open() quando um arquivo é aberto para escrita possuem todos os métodos acima, exceto readframes() e setpos(). Além disso, os seguintes métodos existem. Os métodos get*() só podem ser chamados após os métodos set*() correspondentes terem sido chamados. Antes do primeiro writeframes() ou writeframesraw(), todos os parâmetros, exceto o número de quadros, devem ser preenchidos.

aifc.aiff()

Cria um arquivo AIFF. O padrão é que um arquivo AIFF-C seja criado, a menos que o nome do arquivo termine em '.aiff', caso em que o padrão é um arquivo AIFF.

aifc.aifc()

Cria um arquivo AIFF-C. O padrão é que um arquivo AIFF-C seja criado, a menos que o nome do arquivo termine em '.aiff', caso em que o padrão é um arquivo AIFF.

aifc.setnchannels(nchannels)

Especifica o número de canais no arquivo de áudio.

aifc.setsampwidth(width)

Especifica o tamanho em bytes de amostras de áudio.

aifc.setframerate(rate)

Especifique a frequência de amostragem em quadros por segundo.

aifc.setnframes(nframes)

Especifica o número de quadros que devem ser escritos no arquivo de áudio. Se este parâmetro não estiver configurado ou estiver incorretamente configurado, o arquivo precisará ter suporte a procura.

aifc.setcomptype(type, name)

Specify the compression type. If not specified, the audio data will not be compressed. In AIFF files, compression is not possible. The name parameter should be a human-readable description of the compression type, the type parameter should be a four-character string. Currently the following compression types are supported: NONE, ULAW, ALAW, G722.

aifc.setparams(nchannels, sampwidth, framerate, comptype, compname)

Define todos os parâmetros acima de uma só vez. O argumento é uma tupla que consiste em vários parâmetros. Isto significa que é possível usar o resultado de uma chamada de getparams() como argumento para setparams().

aifc.setmark(id, pos, name)

Adiciona uma marca com o ID fornecido (maior que 0) e o nome dado na posição determinada. Este método pode ser chamado a qualquer momento antes de close().

aifc.tell()

Retorna a posição atual de escrita no arquivo de saída. Útil em combinação com setmark().

aifc.writeframes(data)

Escreve dados no arquivo de saída. Este método só pode ser chamado após os parâmetros do arquivo de áudio terem sido definidos.

aifc.writeframesraw(data)

Semelhante a writeframes(), exceto que o cabeçalho do arquivo de áudio não é atualizado.

aifc.close()

Fecha o arquivo AIFF. O cabeçalho do arquivo é atualizado para refletir o tamanho real dos dados de áudio. Depois de chamar esse método, o objeto não pode mais ser usado.