successful ytmnd playback
This commit is contained in:
@@ -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
|
||||
|
||||
})()
|
||||
|
||||
Reference in New Issue
Block a user