/// <summary> /// Is called when a buffer is completly read and can be freed up /// </summary> private void HandleBufferCompleted(object sender, BufferCompletedEventArgs e) { _queuedBufferCount--; IntPtr buf = e.IntPtrBuffer; foreach (var buffer in _outputBuffers) { if (buffer.Buffer != buf) { continue; } // free Buffer buffer.PacketDescriptions.Clear(); buffer.CurrentOffset = 0; lock (buffer) { buffer.IsInUse = false; Monitor.Pulse(buffer); } } if (_queuedBufferCount == 0 || _audioPlayerState == AudioPlayerState.Stopping) { Console.WriteLine($"{nameof(HandleBufferCompleted)} when playerState stopping"); SetAudioPlayerStatus(AudioPlayerState.Stopped); } }
/// <summary> /// Is called when a buffer is completly read and can be freed up /// </summary> void HandleBufferCompleted(object sender, BufferCompletedEventArgs e) { queuedBufferCount--; IntPtr buf = e.IntPtrBuffer; foreach (var buffer in outputBuffers) { if (buffer.Buffer != buf) { continue; } // free Buffer buffer.PacketDescriptions.Clear(); buffer.CurrentOffset = 0; lock (buffer) { buffer.IsInUse = false; Monitor.Pulse(buffer); } } if (queuedBufferCount == 0 && Finished != null) { Finished(this, new EventArgs()); } }
private void OutputQueue_BufferCompleted(object sender, BufferCompletedEventArgs e) { var index = Buffers.FindIndex((x) => x.Data == e.IntPtrBuffer); var buf = Buffers[index]; lock (buf) { buf.IsInUse = false; } Interlocked.Decrement(ref BufReadyNum); if (BufReadyNum < MIN_READY_BUF) { OutputQueue.Pause(); } }
private void OnStreamingAudioPeriodicNotification(object sender, BufferCompletedEventArgs args) #endif { //nextBeat refers to the next beat to generate - the current beat is the one before nextBeat int currentBeat = ((nextBeat - 1) + song.BeatCount) % song.BeatCount; //Call the BeatStarted callback on a separate thread BeatStarted?.BeginInvoke(currentBeat, false, null, null); //Mix the audio data for this beat short[] data = MixBeat(song.NotesAtBeat(nextBeat)); //Make sure the track isnt disposed of after we check if it's playing lock (trackDisposedOfSyncObject) { if (IsPlaying) { #if __ANDROID__ //Add the audio data to the track playingTrack.Write(data, 0, data.Length); #endif #if __IOS__ //Copy the audio data to the buffer passed in to this method unsafe { fixed(short *beatData = data) { args.UnsafeBuffer->CopyToAudioData((IntPtr)beatData, data.Length * 2); } } //Add the buffer to the audio queue audioQueue.EnqueueBuffer(args.IntPtrBuffer, data.Length * 2, null); #endif } } nextBeat = (nextBeat + 1) % song.BeatCount; }
void HandleBufferCompleted(object sender, BufferCompletedEventArgs e) { audioQueue.FreeBuffer(e.IntPtrBuffer); }
void OnBufferCompleted(object sender, BufferCompletedEventArgs e) { oaq.FreeBuffer(e.IntPtrBuffer); }
void HandleBufferCompleted (object sender, BufferCompletedEventArgs e) { audioQueue.FreeBuffer (e.IntPtrBuffer); }
/// <summary> /// Is called when a buffer is completly read and can be queued for re-use /// </summary> void HandleBufferCompleted (object sender, BufferCompletedEventArgs e) { lock (locker) { var buffer = outputBuffers [e.IntPtrBuffer]; buffer.PacketDescriptions.Clear (); buffer.CurrentOffset = 0; availableBuffers.Enqueue (buffer); // Signal that we should try to fill up some more buffers with audio // data. NOTE: When we parse a blob of data we will always create enough // buffers to fit the decoded data. That could make us create more buffers // than 'MaxBufferCount', so let's be careful to ensure we only start reading // more input data once enough buffers have been freed up. if (outputBuffers.Count - availableBuffers.Count < MaxBufferCount) needsBufferTask.TrySetResult (true); // If autoresume buffer level is zero then we're at the end of the stream and should // not pause the output because the number of enqueued buffers is low. if ((outputBuffers.Count - availableBuffers.Count) == 1 && AutoResumeBufferLevel > 0) { Buffering = true; TryPause (); } } }
private void Queue_BufferCompleted(object sender, BufferCompletedEventArgs e) { _queue?.Stop(true); }
/// <summary> /// Is called when a buffer is completly read and can be freed up /// </summary> void HandleBufferCompleted(object sender, BufferCompletedEventArgs e) { queuedBufferCount--; IntPtr buf = e.IntPtrBuffer; foreach (var buffer in outputBuffers) { if (buffer.Buffer != buf) continue; // free Buffer buffer.PacketDescriptions.Clear (); buffer.CurrentOffset = 0; lock (buffer) { buffer.IsInUse = false; Monitor.Pulse (buffer); } } if (queuedBufferCount == 0 && Finished != null) Finished (this, new EventArgs ()); }
void OnOutputQueueOutputCompleted(object sender, BufferCompletedEventArgs e) { outputQueue.FreeBuffer (e.IntPtrBuffer); }
void OnOutputQueueOutputCompleted(object sender, BufferCompletedEventArgs e) { outputQueue.FreeBuffer(e.IntPtrBuffer); }