Python で WAVファイルを書き込むには soundfile.write 関数を使います。
パラメータ
soundfile.write の主なパラメータは以下です。返り値はないです。
パラメータ名 | データ型 | 概要 |
---|---|---|
file | str | 出力WAVファイル名 |
data | array_like | 書き込むデータ |
samplerate | int | サンプリングレート |
subtype | str | データ形式 |
主な使用例
モノラルデータの書き込み
モノラルのWAVデータを書きこむソースコードは以下です。
import numpy as np
import soundfile as sf
samplerate = 48000 # サンプリングレート
freq = 1000 # 正弦波の周波数
n = np.arange(samplerate*2) # サンプリング番号
data = np.sin(2.0*np.pi*freq*n/samplerate) # 正弦波作成
sf.write("out1.wav", data, samplerate, subtype="PCM_24") # 書き込み
上記のようにファイル名、データ、サンプリングレート、データ形式を与えることでWAVファイルを作成できます。
データ型がfloatの場合、data の値は-1.0~1.0の範囲に収める必要があり、その範囲に収まらないデータはクリップされます。
データ型がintの場合は、そのデータ型の範囲に収めればよいです。(int16の場合、-32768~32767)
データ形式については「3.2 データ形式の種類」で後述します。
作成される正弦波のデータは以下です(データはMP3に変換しています)。
作成したモノラルデータ
ステレオデータの書き込み
ステレオのWAVデータを書き込むソースコードは以下です。
import numpy as np
import soundfile as sf
samplerate = 48000 # サンプリングレート
freq = 1000 # 正弦波の周波数
n = np.arange(samplerate*2) # サンプリング番号
data = np.zeros((samplerate*2,2), dtype=float)
data[:,0] = np.sin(2.0*np.pi*freq*n/samplerate) # 正弦波作成
data[:,1] = np.sin(np.random.rand(samplerate*2)*2-1.0) # 白色雑音作成
sf.write("out2.wav", data, samplerate, subtype="PCM_24") # 書き込み
ステレオの場合、 data[ : , 0] に左チャネルのデータ、data[ : , 1] に右チャネルのデータを格納します。
作成したステレオデータ
おまけ
書き込めるオーディオファイル
soundfile.write はWAVファイル以外も書きこめます。書き込めるデータフォーマットは以下のリンクに記載があります。
■対応するデータフォーマット一覧
http://www.mega-nerd.com/libsndfile/#Features
一応、sf.available_formats()で対応するオーディオファイルの一覧は確認できます。
import soundfile as sf
print(sf.available_formats())
#{'AIFF': 'AIFF (Apple/SGI)', 'AU': 'AU (Sun/NeXT)',
# ・・・
#'XI': 'XI (FastTracker 2)'}
データ形式の種類
パラメータ subtype で使えるものは sf.available_subtypes で確認できます。
import soundfile as sf
print(sf.available_subtypes('WAV'))
#{'PCM_16': 'Signed 16 bit PCM', 'PCM_24': 'Signed 24 bit PCM',
# ・・・
#'GSM 6.10', 'G721_32': '32kbs G721 ADPCM'}
その他のパラメータ
● endian
RAW ファイルを書きこむ場合、エンディアンを指定する場合に使用。
● format
書き込むファイルのフォーマットを選択するパラメータ。引数が与えられない場合、拡張子でファイルフォーマットを判断します。
● closefd
ファイルディスクリプタを閉じるか否かのパラメータ。
おわりに
本記事では、WAVファイルを書き込む関数 soundfile.write について紹介しました。WAVファイルを書き込む場合はぜひ使っていただきたいと思います。
■参考文献
[1] Bastian Bechtold.“python-soundfile”. Read the Docs. 2015.
https://python-soundfile.readthedocs.io/en/0.11.0/, (参照2024-02-24)