PythonのaifcモジュールでAIFF・AIFCファイルを読み書きする方法
Python標準ライブラリのaifcモジュールは、AIFF(Audio Interchange File Format)およびAIFF-Cファイルの読み書きをサポートするさまざまな関数を提供しています。AIFF形式はデジタル音声サンプルをファイルに保存するためのフォーマットで、その後継であるAIFF-Cでは音声データの圧縮が可能になっています。
なお、aifcモジュールはPython 3.11で非推奨となり、Python 3.13で削除されました。古いバージョンを使用している場合や、互換性のために既存コードを理解する必要がある場合に役立つ知識です。
オーディオファイルのパラメータ
オーディオファイルには、音声データを記述するためのいくつかのパラメータがあります。
- サンプリングレート(フレームレート):1秒間に音声をサンプリングする回数。
- チャンネル数:音声がモノラル、ステレオ、クアッドのいずれであるかを示します。
- フレーム:各チャンネルのサンプルを1つずつ含む単位。
- サンプルサイズ:各サンプルのバイト数。
したがって、1フレームは「チャンネル数 × サンプルサイズ」バイトで構成され、1秒分の音声データは「チャンネル数 × サンプルサイズ × フレームレート」バイトになります。
aifc.open()関数
この関数はAIFFまたはAIFF-Cファイルを開き、モードに応じて音声データの読み取りまたは書き込み用のオブジェクトインスタンスを返します。読み取り用に開く場合は 'r' または 'rb' を、書き込み用に開く場合は 'w' または 'wb' を指定します。
書き込みモードで使用できる主なメソッド
| aiff() | AIFFファイルを作成します。 |
| aifc() | AIFF-Cファイルを作成します。 |
| setnchannels() | オーディオファイルのチャンネル数を指定します。 |
| setsampwidth() | 音声サンプルのサイズ(バイト数)を指定します。 |
| setframerate() | サンプリング周波数(1秒あたりのフレーム数)を指定します。 |
| setnframes() | オーディオファイルに書き込むフレーム数を指定します。 |
| setcomptype() | 圧縮タイプを指定します。AIFFファイルでは圧縮できません。サポートされる圧縮タイプは b'NONE'、b'ULAW'、b'ALAW'、b'G722' です。 |
| setparams() | 上記のすべてのパラメータを一度に設定します。引数には各パラメータを含むタプルを渡します。 |
| writeframes() | 出力ファイルにデータを書き込みます。 |
| writeframesraw() | writeframes()と同様ですが、オーディオファイルのヘッダーは更新されません。 |
AIFFファイル作成のサンプルコード
import aifc, struct
sampleRate = 44100.0 # ヘルツ
duration = 1.0 # 秒
frequency = 440.0 # ヘルツ
obj = aifc.open('sound.aiff','w')
obj.setnchannels(1) # モノラル
obj.setsampwidth(2)
obj.setframerate(sampleRate)
for i in range(99999):
value = random.randint(-32767, 32767)
data = struct.pack('<h', value)
obj.writeframesraw( data )
obj.close()読み取りモードで使用できる主なメソッド
| getnchannels() | オーディオのチャンネル数を返します(モノラルは1、ステレオは2)。 |
| getsampwidth() | 個々のサンプルのサイズ(バイト数)を返します。 |
| getframerate() | サンプリングレート(1秒あたりのフレーム数)を返します。 |
| getnframes() | ファイル内のオーディオフレーム数を返します。 |
| getcomptype() | オーディオファイルで使用されている圧縮タイプを表す長さ4のbytes配列を返します。 |
| getparams() | namedtuple()(nchannels、sampwidth、framerate、nframes、comptype、compname)を返します。 |
| readframes() | オーディオファイルから次のnframesフレームを読み取って返します。 |
| setpos(pos) | 指定されたフレーム番号へシークします。 |
読み書き両方で使える共通メソッド
| rewind() | 読み取りポインタを巻き戻します。次のreadframes()は先頭から開始されます。 |
| tell() | 現在のフレーム番号を返します。 |
| close() | AIFFファイルを閉じます。このメソッドを呼び出した後は、オブジェクトを使用できなくなります。 |
実行例
次のプログラムは、AIFFファイルの属性を読み取ります。
import aifc
obj = aifc.open('sound.aiff','r')
print("Number of channels", obj.getnchannels())
print("Sample width", obj.getsampwidth())
print("Frame rate.", obj.getframerate())
print("Number of frames", obj.getnframes())
print("parameters:", obj.getparams())
obj.close()出力結果
Number of channels 1 Sample width 2 Frame rate. 44100 Number of frames 99999 parameters: _aifc_params(nchannels=1, sampwidth=2, framerate=44100, nframes=99999, comptype=b'NONE', compname=b'not compressed')
-
PythonのxlsxwriterモジュールでExcelファイルを作成・書き込みする方法
Pythonは豊富なライブラリ群を活用することで、データ処理ツールとして広く利用されているMicrosoft Excelと連携できます。本記事では、xlsxwriterというモジュールを使ってExcelファイルを新規作成し、データを書き込む方法を解説します。なお、xlsxwriterは新規ファイルの作成に特化したモジュールのため、既存のExcelファイルへの追記や編集には対応していません。個別のセルに書き込む方法最も基本的な方法は、セル番地(例:A1、B2など)を指定して直接書き込むやり方です。以下の例では、まずワークブックを作成し、その後にワークシートを追加します。最後にwrite()メソッ
-
PythonのopenpyxlモジュールでExcelファイルを読み書きする方法【初心者向け完全ガイド】
Pythonには、Excelファイル(.xlsx)を操作するためのopenpyxlという便利なモジュールが用意されています。このモジュールを使えば、Excelファイルの新規作成、データの書き込み・読み取り、シートの追加や管理など、さまざまな操作をプログラムから自動的に行うことができます。 本記事では、openpyxlの基本的な使い方を、実際に動作するサンプルコードとともに順番に解説していきます。 openpyxlのインストール方法 openpyxlは標準ライブラリではないため、まずインストールが必要です。コマンドプロンプト(またはターミナル)で以下のコマンドを実行してください。 pip ins