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.
Ein Standard -WAV -Datei -Header kann grob in die folgenden Teile unterteilt werden:
Riff Block : Eine Tag -Datei ist eine Riff -Datei.
Wellenflag : Der Dateityp ist Welle.
FMT Subblock : Enthält Audio-Formatinformationen (Stichprobenrate, Kanalnummer, Bitrate usw.).
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 |
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。";
$ 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 .
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.