Beispiel #1
0
        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());
     }
 }
Beispiel #3
0
        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);
                    }
                }
            }
        }