private void OnPlayerOutputReady(AudioToolbox.OutputAudioQueue outputAudioQueue) { Console.WriteLine($"Player: Output Ready"); _audioQueueTimeline = outputAudioQueue.CreateTimeline(); MediaStateChanged(MediaState.Opened); }
private async Task StreamDownloadHandler(Guid guid, CancellationToken cancellationToken) { var buffer = new byte[8192]; long totalNumberBytesRead = 0; _totalStreamLength = 0L; _audioQueueTimeline = null; Console.WriteLine($"Downloader started"); try { using (_player = new StreamingPlayback()) { _player.OutputReady += OnPlayerOutputReady; _player.Finished += OnPlayerFinished; _player.AudioPlayerStateChanged += OnAudioPlayerStateChanged; Uri requestUri = GetRequestUri(guid); using (var httpClient = await _requestService.GetHttpClient()) { using (var response = await TryGetAsync(0, requestUri, httpClient, cancellationToken)) { _totalStreamLength = response.Content.Headers.ContentLength.GetValueOrDefault(totalNumberBytesRead); Console.WriteLine($"Stream Length: {_totalStreamLength}"); using (var inputStream = await GetQueueStream(response.Content, cancellationToken)) { //var inputStream = await response.Content.ReadAsStreamAsync(); int inputStreamLength; while (((inputStreamLength = inputStream.Read(buffer, 0, buffer.Length)) != 0) || !cancellationToken.IsCancellationRequested) { if (cancellationToken.IsCancellationRequested) { cancellationToken.ThrowIfCancellationRequested(); } //Console.WriteLine($"{nameof(StreamDownloadHandler)} read {totalNumberBytesRead} from {_totalStreamLength} "); totalNumberBytesRead += inputStreamLength; _player.ParseBytes(buffer, inputStreamLength, false, totalNumberBytesRead == (int)_totalStreamLength); } } } } } } catch (HttpStatusRequestException exception) { Console.WriteLine($"Exception thrown in {nameof(StreamDownloadHandler)} with message {exception.Message}"); if (exception.StatusCode == System.Net.HttpStatusCode.BadRequest) { MediaStateChanged(MediaState.BadRequest); } } catch (Exception exception) { Console.WriteLine($"Exception thrown in {nameof(StreamDownloadHandler)} with message {exception.Message}"); } }
void RepeatingAction(AudioQueueTimeline timeline, double sampleRate) { var queue = player.OutputQueue; if (queue == null || timeline == null) { return; } bool disc = false; var time = new AudioTimeStamp(); queue.GetCurrentTime(timeline, ref time, ref disc); playbackTime.Text = FormatTime(time.SampleTime / sampleRate); }
public override double Now() { double result = 0; if (m_AudioQueue == null) { return(result); } AudioQueueTimeline timeline = m_AudioQueue.CreateTimeline(); AudioTimeStamp timestamp = new AudioTimeStamp(); bool t = false; m_AudioQueue.GetCurrentTime(timeline, ref timestamp, ref t); return(timestamp.SampleTime / m_SampleFormat.Rate * 1000); }
void StreamDownloadedHandler(IAsyncResult result) { var buffer = new byte [8192]; int l = 0; int inputStreamLength; double sampleRate = 0; Stream inputStream; AudioQueueTimeline timeline = null; var request = result.AsyncState as HttpWebRequest; try { var response = request.EndGetResponse(result); var responseStream = response.GetResponseStream(); if (PlayerOption == PlayerOption.StreamAndSave) { inputStream = GetQueueStream(responseStream); } else { inputStream = responseStream; } using (player = new StreamingPlayback()) { player.OutputReady += delegate { timeline = player.OutputQueue.CreateTimeline(); sampleRate = player.OutputQueue.SampleRate; }; InvokeOnMainThread(delegate { if (updatingTimer != null) { updatingTimer.Invalidate(); } updatingTimer = NSTimer.CreateRepeatingScheduledTimer(0.5, (timer) => RepeatingAction(timeline, sampleRate)); }); while ((inputStreamLength = inputStream.Read(buffer, 0, buffer.Length)) != 0 && player != null) { l += inputStreamLength; player.ParseBytes(buffer, inputStreamLength, false, l == (int)response.ContentLength); InvokeOnMainThread(delegate { progressBar.Progress = l / (float)response.ContentLength; }); } } } catch (Exception e) { RaiseErrorOccurredEvent("Error fetching response stream\n" + e); Debug.WriteLine(e); InvokeOnMainThread(delegate { if (NavigationController != null) { NavigationController.PopToRootViewController(true); } }); } }
private void RepeatingAction (AudioQueueTimeline timeline, double sampleRate) { var queue = player.OutputQueue; if (queue == null || timeline == null) return; bool disc = false; var time = new AudioTimeStamp (); queue.GetCurrentTime (timeline, ref time, ref disc); playbackTime.Text = FormatTime (time.SampleTime / sampleRate); }
void StreamDownloaded(IAsyncResult result) { var request = result.AsyncState as HttpWebRequest; bool pushed = false; try { var response = request.EndGetResponse(result); var responseStream = response.GetResponseStream(); Stream inputStream; var buffer = new byte [8192]; int l = 0, n; InvokeOnMainThread(delegate { viewController.PushViewController(playController, true); }); pushed = true; if (saveCopy) { inputStream = MakeQueueStream(responseStream); } else { inputStream = responseStream; } // // Create StreamingPlayer, the using statement will automatically // force the resources to be disposed and the playback to stop. // using (player = new StreamingPlayback()){ AudioQueueTimeline timeline = null; double sampleRate = 0; player.OutputReady += delegate { timeline = player.OutputQueue.CreateTimeline(); sampleRate = player.OutputQueue.SampleRate; }; InvokeOnMainThread(delegate { if (updatingTimer != null) { updatingTimer.Invalidate(); } updatingTimer = NSTimer.CreateRepeatingScheduledTimer(0.5, delegate { var queue = player.OutputQueue; if (queue == null || timeline == null) { return; } bool disc = false; AudioTimeStamp time = new AudioTimeStamp(); queue.GetCurrentTime(timeline, ref time, ref disc); playbackTime.Text = FormatTime(time.SampleTime / sampleRate); }); }); while ((n = inputStream.Read(buffer, 0, buffer.Length)) != 0) { l += n; player.ParseBytes(buffer, n, false, l == (int)response.ContentLength); InvokeOnMainThread(delegate { progress.Progress = l / (float)response.ContentLength; }); } } } catch (Exception e) { InvokeOnMainThread(delegate { if (pushed) { viewController.PopToRootViewController(true); pushed = false; } status.Text = "Error fetching response stream\n" + e; Console.WriteLine(e); }); } // // Restore the default AudioSession, this allows the iPhone // to go to sleep now that we are done playing the audio // AudioSession.Category = AudioSessionCategory.MediaPlayback; if (pushed) { viewController.PopToRootViewController(true); status.Text = "Finished playback"; } }