Aktueller Standort: Startseite> Neueste Artikel> Wie generiere ich Standard -WAV -Audio -Datei -Header mithilfe der Funktion pack ()?

Wie generiere ich Standard -WAV -Audio -Datei -Header mithilfe der Funktion pack ()?

M66 2025-06-12

Bei der Audioprogrammierung ist die Generierung von Standard -WAV -Dateiheadern ein grundlegender, aber kritischer Schritt. WAV -Dateien sind Audiodateien basierend auf dem Format Riff (Ressourcen -Interchange -Dateiformat), mit klarer Struktur und leicht zu lesen. Dieser Artikel erstellt manuell einen legitimen WAV -Datei -Header durch Pack () -Funktion von PHP, sodass Entwickler die Struktur des WAV -Formats tiefer verstehen können.

Grundstruktur von WAV -Dateien

Ein Standard -WAV -Datei -Header kann grob in die folgenden Teile unterteilt werden:

  1. Riff Block : Eine Tag -Datei ist eine Riff -Datei.

  2. Wellenflag : Der Dateityp ist Welle.

  3. FMT Subblock : Enthält Audio-Formatinformationen (Stichprobenrate, Kanalnummer, Bitrate usw.).

  4. Datenunterblock : Enthält die tatsächlichen Audiodaten.

Die Struktur ist wie folgt:

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

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

| Subchunk2ID | Subchunk2Size | Data |

Verwenden Sie Pack () , um den WAV -Header zu konstruieren

Pack () -Funktion von PHP kann Daten in binäre Zeichenfolgen verpacken, die zum Erstellen von WAV -Dateiheadern geeignet sind. Hier ist ein einfaches Beispiel zum Generieren eines 16-Bit-, Mono-, 44,1-kHz-WAV-Dateiheaders, vorausgesetzt, die Größe der Audiodaten ist $ DataSize- Bytes:

 <?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;
}

// Beispiel:Schreiben Sie einen leeren WAV dokumentieren
$dataSize = 44100 * 2 * 1; // 1Mono in Sekunden16Bit -Audio -Daten
$header = createWavHeader($dataSize);
file_put_contents('output.wav', $header . str_repeat("\x00", $dataSize));

echo "WAV dokumentieren已创建。Verfügbar in m66.net 下载测试dokumentieren。";

Parameterbeschreibung

  • $ sampled : Die Stichprobenrate, gemeinsame Werte betragen 44100, 48000 usw.

  • $ bitSpersample : Die Bittiefe jeder Probe, normalerweise 8 oder 16.

  • $ kanäle : Anzahl der Kanäle, 1 ist mono, 2 ist Stereo.

  • $ DataSize : Die tatsächliche Anzahl der Bytes der Audiodaten, berechnet als: Sekunden * Stichprobenrate * Kanal * Bit -Tiefe / 8 .

Anwendungsszenarien

Das Erstellen von WAV -Dateiheadern mit Pack () ist ideal für die Verwendung in den folgenden Szenarien:

  • Generieren Sie Audioströme dynamisch auf der Serverseite.

  • Exportieren des benutzerdefinierten Audioaufzeichnungsformats.

  • Entwicklung von Tools für Datenkomprimierung und Audioverpackungsanalyse.

Zusammenfassen