var bricks = window.bricks || {}; bricks.formatMs=function(ms,all){ var ss=ms%1000;ms=(ms-ss)/1000; var s=ms%60;ms=(ms-s)/60; var m=ms%60;ms=(ms-m)/60; var h=ms; var t=(h?h+":":"") +(all||h+m?("0"+m).substr(-2)+":":"") +(all||h+m+s?("0"+s).substr(-2)+"″":"") +("00"+ss).substr(-3); return t; }; bricks.AudioPlayer = class extends bricks.JsWidget { /* { url: autoplay: } */ constructor(options){ super(options); this.url = options.url; this.audio = this._create('audio'); this.audio.controls = true; if (this.opts.autoplay){ this.audio.addEventListener('canplay', this.play.bind(this)); } this.audio.addEventListener('ended', this.playended.bind(this)); this.audio.style.width = "100%" this.dom_element.appendChild(this.audio); if ( this.url ){ this.set_source(this.url); } } playended(e){ this.dispatch('ended'); } set_stream_urls(response){ async function* dyn_urls(response) { const reader = response.body.getReader(); var value; var done; while (true){ done, value = await reader.read(); if (value.done){ console.log('done=', done, 'value=', value); break; } let result = ''; for (let i = 0; i < value.value.length; i++) { result += String.fromCharCode(value.value[i]); } console.log('audio set url=', result); yield result; } } this.url_generator = dyn_urls(response); this.srcList = []; this.notBegin = true; schedule_once(this.load_queue_url.bind(this), 0.1); } async load_queue_url(){ while (true){ var d = await this.url_generator.next(); if (d.done){ return; } this.srcList.push({played:false, url:d.value}); if (this.srcList.length < 2 ){ await this.play_srclist(); this.audio.addEventListener('ended', this.play_srclist.bind(this)); } } } async play_srclist(evnet){ if (event && ! this.audio.ended){ return; } for (var i=0;i