void Player() { MusicFile file; while (IsActive) { do { Queue.TryDequeue(out file); if (!IsActive) { return; } } while (file == null); if (OnFileListUpdate != null) { OnFileListUpdate.Invoke(Queue.ToList()); } Mp3Frame frame = null; try { file.Open(); frame = file.GetFrame(); } catch (Exception) { Logger.SetError(string.Format("MusicPlayer error: 'can't decode file [{0}]'", file.Filename)); } while (frame != null) { foreach (Stream output in OutputStreams.Keys) { try { output.WriteAsync(frame.RawData, 0, frame.RawData.Length); output.FlushAsync(); } catch { output.Close(); Disattach(output); } } frame = file.GetFrame(); if (!IsActive) { return; } if (OnStatusUpdate != null) { OnStatusUpdate.Invoke(new MusicPlayerStatus() { CurrentFile = file, Connections = OutputStreams.Count, Queue = Queue.ToList() }); } } } }
public void EnqueueMusic(MusicFile file) { queue.Enqueue(file); if (OnFileListUpdate != null) { OnFileListUpdate.Invoke(queue.ToList()); } }
public void ClearQueue() { MusicFile musicFile; while (!Queue.IsEmpty) { Queue.TryDequeue(out musicFile); } if (OnFileListUpdate != null) { OnFileListUpdate.Invoke(Queue.ToList()); } }
void PlayerThread() { MusicFile file = null; while (true) { do { queue.TryDequeue(out file); Thread.Sleep(2); } while (file == null); if (OnFileListUpdate != null) { OnFileListUpdate.Invoke(queue.ToList()); } file.Open(); Mp3Frame frame = file.GetFrame(); while (frame != null) { foreach (Stream output in outputStreams.Keys) { try { output.Write(frame.RawData, 0, frame.RawData.Length); output.Flush(); } catch { output.Close(); Disattach(output); } } foreach (BinaryWriter writer in outputWriters.Keys) { try { writer.Write(frame.RawData); //writer.Write(frame.RawData, 0, frame.RawData.Length); writer.Flush(); } catch (Exception e) { writer.Close(); Disattach(writer); } } frame = file.GetFrame(); if (OnStatusUpdate != null) { OnStatusUpdate.Invoke(new MusicPlayerStatus() { CurrentFile = file, Connections = outputStreams.Count, Queue = queue.ToList() }); } while (Pause) { Thread.Sleep(2); } } } }