현재 위치: > 최신 기사 목록> pack () 함수를 사용하여 표준 WAV 오디오 파일 헤더를 생성하는 방법은 무엇입니까?

pack () 함수를 사용하여 표준 WAV 오디오 파일 헤더를 생성하는 방법은 무엇입니까?

M66 2025-06-12

오디오 프로그래밍에서 표준 WAV 파일 헤더 생성은 기본이지만 중요한 단계입니다. WAV 파일은 RIFF (Resource Interchange 파일 형식) 형식을 기반으로 한 오디오 파일이며, 명확한 구조와 읽기 쉬운. 이 기사는 PHP의 Pack () 함수를 통해 정당한 WAV 파일 헤더를 수동으로 구성하여 개발자가 WAV 형식의 구조를 더 깊이 이해할 수 있도록합니다.

WAV 파일의 기본 구조

표준 WAV 파일 헤더는 대략 다음 부분으로 나눌 수 있습니다.

  1. 리프 블록 : 태그 파일은 리프 파일입니다.

  2. 웨이브 플래그 : 파일 유형은 웨이브입니다.

  3. FMT 서브 블록 : 오디오 형식 정보 (샘플링 속도, 채널 번호, 비트 속도 등)를 포함합니다.

  4. Data Sub-Block : 실제 오디오 데이터를 포함합니다.

구조는 다음과 같습니다.

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

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

| Subchunk2ID | Subchunk2Size | Data |

팩 ()을 사용하여 WAV 헤더를 구성하십시오

PHP의 Pack () 함수는 데이터를 이진 문자열로 패키지 할 수 있으며, 이는 WAV 파일 헤더를 구성하는 데 적합합니다. 다음은 오디오 데이터 크기가 $ Datasize 바이트라고 가정 할 때 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 下载测试문서。";

매개 변수 설명

  • $ 샘플 리터 : 샘플링 속도, 공통 값은 44100, 48000 등입니다.

  • $ BITSPERSALLE : 각 샘플의 비트 깊이 (일반적으로 8 또는 16).

  • $ 채널 : 채널 수, 1은 모노, 2는 스테레오입니다.

  • $ DataSize : 오디오 데이터의 실제 바이트 수는 다음과 같이 계산됩니다. 초 * 샘플링 속도 * 채널 * 비트 깊이 / 8 .

응용 프로그램 시나리오

pack ()을 사용하여 WAV 파일 헤더 구축 : 다음 시나리오에서 사용하기에 이상적입니다.

  • 서버 측에서 오디오 스트림을 동적으로 생성합니다.

  • 사용자 정의 오디오 녹음 형식의 내보내기.

  • 데이터 압축 및 오디오 포장 분석 도구 개발.

요약