例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($fp, 8192)) {
/* 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);
?>