音声を書き出したら、長さは同じなのにファイル容量が約2倍になった。まず調べたいのは音質ではなく、チャンネル数とサンプル幅です。非圧縮PCMなら、音声データのバイト数は次の式で確認できます。
音声データのバイト数 = フレーム数 × チャンネル数 × 1サンプルのバイト数
再生時間 = フレーム数 ÷ サンプリング周波数
1フレームは「同じ時刻の全チャンネルのサンプル」をまとめた単位です。ステレオだから再生時間が2倍になるわけではありません。
筆者はCreatuneチームのAlexです。2026年10月29日、未ログインの公開画面で自作のテスト音を変換し、出力ファイルをPythonで調べました。この記事では構造と時間を検証します。試聴による音質評価は行っていません。
2秒のテストファイルを作る
Python標準ライブラリだけで作れます。音源は自作の440 Hz正弦波、44,100 Hz、16 bit、モノラルです。通常の録音で試す場合も、元ファイルは上書きしないでください。
import math
import struct
import wave
rate = 44100
samples = b"".join(
struct.pack("<h", round(5000 * math.sin(2 * math.pi * 440 * i / rate)))
for i in range(rate * 2)
)
with wave.open("tone-44100.wav", "wb") as w:
w.setparams((1, 2, rate, 0, "NONE", "not compressed"))
w.writeframes(samples)
保存形式を明示して書き出す
Creatuneの音声ファイル変換を開き、「音声を選ぶ」からこのWAVを読み込みます。今回の画面では2.0秒と表示され、最初の保存形式はMP3でした。入力がWAVでも、出力形式は別に確認します。
保存形式のメニューでWAVを選び、「ダウンロード」を押します。下の検査コードに合わせ、保存したファイルを converter-output.wav という名前で手元に置きます。今回の画面には、出力のチャンネル数やサンプリング周波数を個別に指定する欄はありませんでした。
拡張子だけでなく、実ファイルを読む
次のコードは今回の非圧縮PCM WAV用です。先頭がRIFF/WAVEであることを確認し、Pythonの wave で読み取った情報から音声データ容量を計算します。任意のWAVコーデックすべてに対応する検証器ではありません。
from pathlib import Path
import wave
for name in ("tone-44100.wav", "converter-output.wav"):
path = Path(name)
raw = path.read_bytes()
assert raw[:4] == b"RIFF" and raw[8:12] == b"WAVE"
with wave.open(str(path), "rb") as w:
frames = w.getnframes()
channels = w.getnchannels()
width = w.getsampwidth()
rate = w.getframerate()
payload = len(w.readframes(frames))
expected = frames * channels * width
assert payload == expected
print(name, rate, channels, width, frames,
f"{frames / rate:.6f}", payload, len(raw))
今回の出力です。数値の順は、周波数、チャンネル数、サンプル幅(byte)、フレーム数、秒数、PCMデータ量、ファイル全体の容量です。
tone-44100.wav 44100 1 2 88200 2.000000 176400 176444
converter-output.wav 44100 2 2 88200 2.000000 352800 352844
フレーム数と時間は同じで、チャンネル数が1から2へ変わっています。今回の容量増加はこの構造で説明できます。ただし、これだけで「新しいステレオの広がりが生まれた」とは言えません。左右の内容比較や試聴は別の検査です。
「44バイトを引けばよい」を固定ルールにしない
今回は両方ともPCMデータ以外が44 byteでした。しかしWAVには追加のチャンクが入ることがあります。ファイル全体から常に44を引くより、パーサーで音声データを読む方が安全です。
長さが違う場合は、まず frames / rate を比較します。容量が違う場合は、チャンネル数とサンプル幅を見ます。形式の読取りに失敗した場合は、拡張子を書き換えて解決しようとせず、実際の形式やコーデックを確認してください。
この検査で分かるのは、ファイルの構造と再生時間の整合性です。音質改善、録音内容の保持、全環境で同じ出力になることまでは保証しません。

