Audio Programming တွင် Standard WAV ဖိုင်ခေါင်းစဉ်များထုတ်လုပ်ခြင်းသည်အခြေခံဖြစ်သော်လည်းအရေးပါသောခြေလှမ်းတစ်ခုဖြစ်သည်။ WAV ဖိုင်များသည် Riff (Resource Interchange file format) format ကို အခြေခံ. အသံဖိုင်များဖြစ်သည်, ရှင်းလင်းသောဖွဲ့စည်းပုံနှင့်ဖတ်ရန်လွယ်ကူသည်။ ဤဆောင်းပါးသည် PHP ၏ POSP ၏ pack () function မှတဆင့်တရားဝင် WAV File header ကိုကိုယ်တိုင်တည်ဆောက်လိမ့်မည်။
ပုံမှန် WAV ဖိုင် header ကိုအကြမ်းအားဖြင့်အောက်ပါအစိတ်အပိုင်းများအဖြစ်ခွဲခြားနိုင်သည်။
Riff Block : tag file တစ်ခုသည် riff file တစ်ခုဖြစ်သည်။
Wave အလံ - ဖိုင်အမျိုးအစားသည်လှိုင်းဖြစ်သည်။
FMT Sub-block : အသံဖိုင်အမျိုးအစားအချက်အလက်များ (နမူနာနှုန်း, Channel Number Numbate, Bit Rate စသည်) ပါ 0 င်သည်။
ဒေတာလုပ်ငန်းခွဲ - အမှန်တကယ်အသံအချက်အလက်များပါ 0 င်သည်။
ဖွဲ့စည်းပုံသည်အောက်ပါအတိုင်းဖြစ်သည် -
| ChunkID | ChunkSize | Format |
|--------|-----------|--------|
| 'RIFF' | 36 + SubChunk2Size | 'WAVE' |
| Subchunk1ID | Subchunk1Size | AudioFormat | NumChannels | SampleRate | ByteRate | BlockAlign | BitsPerSample |
|-------------|----------------|-------------|-------------|------------|----------|-------------|----------------|
| Subchunk2ID | Subchunk2Size | Data |
PHP's Pack () function သည်အချက်အလက်များကို binary strings များထဲသို့ဒေတာများထဲသို့ထည့်သွင်းနိုင်သည်။ ၎င်းသည် WAV ဖိုင်ခေါင်းစဉ်များဆောက်လုပ်ရန်အတွက်သင့်တော်သည်။ 16-bit, mono, 44.1Khz wav ဖိုင် header ကိုထုတ်လုပ်ရန်အတွက်ရိုးရှင်းသောဥပမာသည် Audio data အရွယ်အစားကို ဒေါ်လာ 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;
}
// နမူနာ:ဗလာတစ်ခုရေးပါ WAV စာချုပ်စာတမ်း
$dataSize = 44100 * 2 * 1; // 1စက္ကန့်ပိုင်းအတွင်း mono16bit audio data
$header = createWavHeader($dataSize);
file_put_contents('output.wav', $header . str_repeat("\x00", $dataSize));
echo "WAV စာချုပ်စာတမ်း已创建。ရရှိနိုင် m66.net 下载测试စာချုပ်စာတမ်း。";
$ samplate : နမူနာနှုန်း, ဘုံတန်ဖိုးများမှာ 44100, 48000,
$ bitsperspare - နမူနာတစ်ခုစီ၏အတိမ်အနက်ကိုအများအားဖြင့် 8 သို့မဟုတ် 16 ။
$ လိုင်းများ - လိုင်းအရေအတွက် 1 ခု, 1 သည် Mono, 2 သည်စတီရီယိုဖြစ်သည်။
$ datasize - အသံအချက်အလက်များ၏အမှန်တကယ်အရေအတွက် - စက္ကန့် * နမူနာနှုန်း * နမူနာနှုန်း * channel * channel * bit depth / 8 ။
Pack () ကို အသုံးပြု. WAV ဖိုင်ခေါင်းစဉ်များတည်ဆောက်ခြင်းသည်အောက်ပါအခြေအနေများတွင်အသုံးပြုရန်အကောင်းဆုံးဖြစ်သည်။
dynamicy server ဘက်မှအသံလွှင့်ဌာနများထုတ်ပေးသည်။
စိတ်ကြိုက်အသံဖမ်းခြင်းပုံစံကိုတင်ပို့ပါ။
ဒေတာချုံ့ခြင်းနှင့်အသံထုပ်ပိုးခွဲခြမ်းစိတ်ဖြာကိရိယာများဖွံ့ဖြိုးတိုးတက်ရေး။