private void playAudioBlock(int blockId,PostFinishedPlaying callback) { System.Diagnostics.Debug.WriteLine("Tocando Bloco " + blockId); isPlaying = true; playedLast = blockId; player.play(blockId, () => { if (blockId == (blocks.Count - 1)) { // última posição. System.Diagnostics.Debug.WriteLine("Última posição tocada, parando áudio."); isPlaying = false; releaseResources(); callback(); } else if (blocksAvaliability[(blockId + 1)]) { // Toca o próximo bloco System.Diagnostics.Debug.WriteLine("Bloco " + blockId + " Tocado, Tocando bloco " + (blockId+1)); playAudioBlock((blockId + 1), callback); } else { // Bloco não baixado ainda System.Diagnostics.Debug.WriteLine("Próximo bloco ainda não foi baixado. Aguardando."); isPlaying = false; } }); }
private void makeRequests(Post post,PostFinishedPlaying callback) { ThreadPool.QueueUserWorkItem(state => { for (int i = 0; i < blocks.Count; i++) { bingService.GetAsAudio2(blocks[i], i, r => { System.Diagnostics.Debug.WriteLine("Block " + r + " Downloaded"); blocksAvaliability[r] = true; if (r == 0 || ((r - 1 == playedLast) && !isPlaying)) { playAudioBlock(r, callback); } }); } }); }
public void start(Post post, PostFinishedPlaying callback) { releaseResources(); // createBlocks(post); makeRequests(post,callback); }