successful ytmnd playback

This commit is contained in:
Jules Laplace
2015-07-11 14:30:25 -04:00
parent 6d3d945398
commit bb52003118
5 changed files with 128 additions and 28 deletions

View File

@@ -2,9 +2,10 @@ var audio = (function(){
var audio = {}
var context = new webkitAudioContext()
var context = new AudioContext()
var source
var current = ""
var timeout
var bufs = {}
var sources = {}
@@ -12,7 +13,7 @@ var audio = (function(){
audio.preload = function(site, loader){
loader.register(site.domain + "_sound")
var request = new XMLHttpRequest()
request.open('GET', url, true)
request.open('GET', site.sound_url, true)
request.responseType = 'arraybuffer'
request.onload = function() {
context.decodeAudioData(request.response, function(buf) {
@@ -20,30 +21,81 @@ var audio = (function(){
loader.ready(site.domain + "_sound")
}, function () { console.error('The request failed.') } )
}
request.onerror = function() {
ytmnd.error()
}
request.send()
}
audio.loaded = function(domain){
return (domain in bufs)
}
audio.play = function(domain){
audio.make_source = function(domain){
var buf = bufs[domain]
var source = context.createBufferSource()
source.connect(context.destination)
source.buffer = buf
source.start(0)
sources[domain] = sources[domain] || []
sources[domain].push(source)
return source
}
/*
audio.play = function(domain){
console.log("play", domain)
current = domain
var source
var startTime = context.currentTime
var delay
clearTimeout(timeout);
(function loop(){
if (source) {
source.start(0)
setTimeout(loop, source.buffer.duration * 1000 - (source.buffer.duration < 2 ? 0 : 60) )
var dt = context.currentTime - startTime
console.log("got a source", dt, delay)
if (dt > 20) {
ytmnd.next()
}
else {
timeout = setTimeout(loop, delay)
source.start(0)
source.started = true
source = audio.make_source(domain)
}
}
else {
setTimeout(loop, 0)
timeout = setTimeout(loop, 0)
source = audio.make_source(domain)
delay = source.buffer.duration * 1000 - (source.buffer.duration < 2 ? 0 : 60)
}
})()
*/
}
audio.stop_current = function(){
audio.stop(current)
current = ""
}
audio.stop = function(domain){
if (! sources[domain]) return
clearTimeout(timeout)
sources[domain].forEach(function(source){
if (source.started) {
source.stop(0)
}
})
sources[domain] = []
delete bufs[domain]
}
return audio
})()