現在の位置: ホーム> 最新記事一覧> Pack()関数を使用して標準のWAVオーディオファイルヘッダーを生成する方法は?

Pack()関数を使用して標準のWAVオーディオファイルヘッダーを生成する方法は?

M66 2025-06-12

オーディオプログラミングでは、標準のWAVファイルヘッダーを生成することは、基本的であるが重要なステップです。 WAVファイルは、RIFF(リソースインターチェンジファイル形式)形式に基づくオーディオファイルであり、クリア構造と読みやすいです。この記事では、PHPのPack()関数を介して正当なWAVファイルヘッダーを手動で構築し、開発者がWAV形式の構造をより深く理解できるようにします。

WAVファイルの基本構造

標準のWAVファイルヘッダーは、次の部分にほぼ分割できます。

  1. リフブロック:タグファイルはリフファイルです。

  2. ウェーブフラグ:ファイルタイプは波です。

  3. FMTサブブロック:オーディオ形式情報(サンプリングレート、チャネル番号、ビットレートなど)が含まれています。

  4. データサブブロック:実際のオーディオデータが含まれています。

構造は次のとおりです。

 | ChunkID | ChunkSize | Format |
|--------|-----------|--------|
| 'RIFF' | 36 + SubChunk2Size | 'WAVE' |

| Subchunk1ID | Subchunk1Size | AudioFormat | NumChannels | SampleRate | ByteRate | BlockAlign | BitsPerSample |
|-------------|----------------|-------------|-------------|------------|----------|-------------|----------------|

| Subchunk2ID | Subchunk2Size | Data |

pack()を使用して、WAVヘッダーを作成します

PHPのpack()関数は、WAVファイルヘッダーの構築に適したバイナリ文字列にデータをパッケージ化できます。オーディオデータサイズが$ DATASIZE BYTESであると仮定して、16ビット、モノ、44.1KHz WAVファイルヘッダーを生成する簡単な例を次に示します。

 <?php

function createWavHeader($dataSize, $sampleRate = 44100, $bitsPerSample = 16, $channels = 1)
{
    $byteRate = $sampleRate * $channels * $bitsPerSample / 8;
    $blockAlign = $channels * $bitsPerSample / 8;
    $header = '';

    // RIFF Header
    $header .= pack('A4', 'RIFF');                              // ChunkID
    $header .= pack('V', 36 + $dataSize);                       // ChunkSize
    $header .= pack('A4', 'WAVE');                              // Format

    // fmt Subchunk
    $header .= pack('A4', 'fmt ');                              // Subchunk1ID
    $header .= pack('V', 16);                                   // Subchunk1Size
    $header .= pack('v', 1);                                    // AudioFormat (1 = PCM)
    $header .= pack('v', $channels);                            // NumChannels
    $header .= pack('V', $sampleRate);                          // SampleRate
    $header .= pack('V', $byteRate);                            // ByteRate
    $header .= pack('v', $blockAlign);                          // BlockAlign
    $header .= pack('v', $bitsPerSample);                       // BitsPerSample

    // data Subchunk
    $header .= pack('A4', 'data');                              // Subchunk2ID
    $header .= pack('V', $dataSize);                            // Subchunk2Size

    return $header;
}

// 例:空に書く WAV 書類
$dataSize = 44100 * 2 * 1; // 1数秒でモノ16ビットオーディオデータ
$header = createWavHeader($dataSize);
file_put_contents('output.wav', $header . str_repeat("\x00", $dataSize));

echo "WAV 書類已创建。で利用可能 m66.net 下载测试書類。";

パラメーターの説明

  • $ samplerate :サンプリングレート、共通値は44100、48000などです。

  • $ bitspersample :各サンプルのビット深さ、通常は8または16。

  • $チャンネル:チャネル数、1はモノ、2はステレオです。

  • $ datasize :オーディオデータの実際のバイト数、秒 *サンプリングレート *チャネル *ビット深さ / 8として計算されます。

アプリケーションシナリオ

Pack()を使用してWAVファイルヘッダーの構築は、次のシナリオで使用するのに最適です。

  • サーバー側でオーディオストリームを動的に生成します。

  • カスタムオーディオ録音形式のエクスポート。

  • データ圧縮およびオーディオパッケージ分析ツールの開発。

要約します