SunshinePHP 2020 CFP Started

ogg:// ラッパーの使用例

例1 OGG/Vorbis ファイルを読み込む

<?php
dl
("oggvorbis.so");

/* デフォルトでは、ogg:// は符号付き 16 ビット リトルエンディアンにデコードします。*/
$fp fopen('ogg://myaudio.ogg''r');

/* ファイルの情報を取得します。*/
$metadata stream_get_meta_data($fp);

/* 最初の曲を調べます(たいていは 1 曲だけですが、
   OGG/Vorbis ファイルは連結が可能です)。*/
$songdata $metadata['wrapper_data'][0];

echo 
"OGG/Vorbis file encoded by: {$songdata['vendor']}\n.";
echo 
"  {$songdata['channels']} channels of {$songdata['rate']}Hz sampling encoded at {$songdata['bitrate_nominal']}bps.\n";
foreach(
$songdata['comments'] as $comment) {
    echo 
"  $comment\n";
}

while (
$audio_data fread($fp8192)) {
  
/* OGG から展開した PCM オーディオについて、なんらかの処理を行います。
     linux システムなら、たとえば /dev/dsp にコピーするなどがよい例でしょう。
     まず最初にデバイスの設定をすることを忘れないようにしましょう。*/
}

fclose($fp);

?>

例2 オーディオファイルを OGG/Vorbis にエンコードする

<?php
dl
('oggvorbis.so');

$context stream_context_create(array('ogg'=>array(
             
'pcm_mode' => OGGVORBIS_PCM_S8,  /* 符号付き 8 ビットオーディオ */
             
'rate' => 44100,                 /* 44kHz CD クオリティ */
             
'bitrate' => 0.5,                /* 中品質の VBR(可変ビットレート) */
             
'channels' => 1,                 /* モノラル */
             
'serialno' => 12345)));          /* ストリーム内で一意の番号 */

/* ファイルを追記モードでオープンします。これは、
2 番目の OGG ストリームを最初のストリームの後に連結します。*/
$ogg fopen('ogg://mysong.ogg''a'false$context);

$pcm fopen('mysample.pcm''r');

/* PCM オーディオデータ mysample.pcm を mysong.ogg に圧縮します。*/
stream_copy_to_stream($pcm$ogg);

fclose($pcm);
fclose($ogg);
?>

add a note add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top