2012-04-20 19 views
5

He estado experimentando conectando un elemento de audio a la API de audio usando createMediaElementSource y lo he puesto a funcionar, pero una cosa que tengo que hacer es cambiar la velocidad de reproducción del audio etiqueta y no pude hacer que eso funcione.Configuración de playbackRate en el elemento de audio conectado a audio web api

Si intenta ejecutar el siguiente código, verá que funciona hasta que descomente la línea donde establecemos la velocidad de reproducción. Cuando esta línea está en el audio se silencia.

Sé que puedo establecer la velocidad de reproducción en un AudioBufferSourceNode utilizando source.playbackRate.value, pero esto no es lo que me gustaría hacer, necesito establecer la velocidad de reproducción en el elemento de audio mientras está conectado a la web aplicación de audio usando createMediaElementSource, así que no tengo ningún AudioBufferSourceNode.

¿Alguien ha logrado hacer eso?

var _source, 
    _audio, 
    _context, 
    _gainNode; 

_context = new webkitAudioContext(); 

function play(url) { 
    if (_audio) { 
     _audio.pause(); 
    } 
    _audio = new Audio(url); 
    //_audio.playbackRate = 0.6; 

    setTimeout(function() { 
     if (!_gainNode) { 
      _gainNode = _context.createGainNode(); 
      _gainNode.gain.value = 0.1; 
      _gainNode.connect(_context.destination); 
     } 

     _source = _context.createMediaElementSource(_audio); 
     _source.connect(_gainNode); 

     _audio.play(); 
    }, 0); 

} 

play("http://geo-samples.beatport.com/items/volumes/volume2/items/3000000/200000/40000/9000/400/60/3249465.LOFI.mp3"); 

setTimeout(function() { 
    _audio.pause(); 
}, 4000); 
+0

Es extraño, esto parece funcionar para mí en Chrome. http://jsfiddle.net/9gLKM/ - Chrome: Versión 22.0.1229.94 m –

Respuesta

1

¿Qué navegador está utilizando para probar esto? Parece que esto aún no está implementado en Firefox, pero debería funcionar en Chrome.

Mozilla bug para implementar playbackRate: https://bugzilla.mozilla.org/show_bug.cgi?id=495040

+0

Estoy usando chrome. Firefox admite la etiqueta de audio pero no admite la API de audio web y mi código usa ambas tecnologías para que esto no se ejecute en Firefox. –

+0

En Chrome, playbackRate funciona en una etiqueta de audio independiente, pero lo que intento hacer es hacerlo funcionar en un elemento de audio que esté conectado a la API de audio usando createMediaElementSource. Esa es la parte que no pude hacer funcionar. –

1

usted tiene que fijar la velocidad de reproducción después de iniciada la reproducción de audio. La única manera portátil que he encontrado para hacer este trabajo, es esperando hasta que se obtiene un evento con timeupdatecurrentTime válida:

_audio.addEventListener('timeupdate', function(){ 
    _if(!isNaN(audio.currentTime)) { 
     _audio.playbackRate = 0.6; 
    } 
}); 

Tenga en cuenta que la tasa de reproducción no se admite actualmente en Android y que Chrome (en el escritorio) no admite velocidades de reproducción inferiores a 0,5.

+0

Esto parece un error. ¿En qué parte de la especificación se especifica que la velocidad de reproducción de un audio no se puede establecer hasta después de la reproducción inicial? – idbehold

+0

Al leer las especificaciones (http://www.w3.org/html/wg/drafts/html/master/embedded-content-0.html#dom-media-playbackrate), la intención es que '' defaultPlaybackRate '' (re) establecerá '' playbackRate'' tan pronto como comience la reproducción. Después de esto, la velocidad de reproducción se puede configurar dinámicamente usando '' playbackRate''. Tener que hacerlo como escribí arriba es un poco extraño, pero, por desgracia, es lo único que funciona. Confíe en mí :) (Soy el autor actual de https://github.com/Notalib/LYT y he dedicado aproximadamente 40 horas solo en este tema). – mzedeler

+0

¿Qué pasa con la configuración ['defaultPlaybackRate'] (http: // www. w3.org/html/wg/drafts/html/master/embedded-content-0.html#dom-media-defaultplaybackrate)? – idbehold

Cuestiones relacionadas