Ejemplo de uso de ogg:// wrapper.

Ejemplo #1 Leer un fichero OGG/Vorbis

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

/* Por omisión, ogg:// decodificará a 16 bit sin signo Little Endian */
$fp fopen('ogg://myaudio.ogg''r');

/* Recopilar información sobre el fichero. */
$metadatos stream_get_meta_data($fp);

/* Inspeccionar la primera canción (normalmente una única canción, 
   pero los ficheros OGG/Vorbis pueden ser encadenados) */
$datos_canción $metadatos['wrapper_data'][0];

echo 
"Fichero OGG/Vorbis codificado por: {$datos_canción['vendor']}\n.";
echo 
"  {$datos_canción['channels']} canales de {$datos_canción['rate']}Hz muestreo codificado a {$datos_canción['bitrate_nominal']}bps.\n";
foreach(
$datos_canción['comments'] as $comentario) {
    echo 
"  $comentario\n";
}

while (
$audio_data fread($fp8192)) {
  
/* Hacer algo con el audio PCM que estamos extrayendo desde el OGG.
     Copiarlo a /dev/dsp es un buen destino en sistemas linux,
     recuerde configurar primero su dispositivo al modo de muestreo . */
}

fclose($fp);

?>

Ejemplo #2 Codificar un fichero de audio a OGG/Vorbis

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

$contexto stream_context_create(array('ogg'=>array(
             
'pcm_mode' => OGGVORBIS_PCM_S8,  /* Audio de 8 bit con signo */
             
'rate' => 44100,                 /* Calida CD de 44kHz */
             
'bitrate' => 0.5,                /* VBR calidad media*/
             
'channels' => 1,                 /* Mono */
             
'serialno' => 12345)));          /* ünoco dentro de nuestro flujo */

/* Abrir un fichero para añadir información. Esto "encadenará" un segundo flujo OGG al final del primero. */
$ogg fopen('ogg://mysong.ogg''a'false$contexto);

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

/* Comprimir el audio PCM sin tratar de mysample.pcm a mysong.ogg */
stream_copy_to_stream($pcm$ogg);

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