Example #1
0
        public static void StartStream()
        {
            _initialized     = false;
            _wo              = new WaveOut();
            _listenMoeThread = new Thread(() =>
            {
                using (var mf = new MediaFoundationReader(Url))
                {
                    _wo.Init(mf);
                    _initialized = true;

                    while (true)
                    {
                        Thread.Sleep(1000 * 60 * 60 * 24); // 1 day because this loop literally does nothing
                    }
                }
            });

            _listenMoeThread.Start();

            while (!_initialized)
            {
                Thread.Sleep(100);
            }

            _wo.Volume = Properties.Settings.Default.volume;
            _wo.Play();
            IsPlaying = true;
            PlayingStateChanged?.Invoke();
            SongDataChanged?.Invoke();
        }
Example #2
0
        public static void StartWs()
        {
            _ws = new WebSocket(Gateway);

            _ws.OnMessage += (s, e) =>
            {
                Debug.WriteLine(e.Data);
                dynamic data = JObject.Parse(e.Data);

                var opcode = (int)data.op;

                switch (opcode)
                {
                case 0:     // welcome
                    _wsHeartbeatThread = new Thread(() =>
                    {
                        while (true)
                        {
                            Thread.Sleep((int)data.d.heartbeat);
                            _ws.Send(@"{""op"":9}");     // heartbeat opcode
                        }
                    });

                    _wsHeartbeatThread.Start();
                    break;

                case 1:     // playback information
                    if (data.t == "TRACK_UPDATE" || data.t == "TRACK_UPDATE_REQUEST")
                    {
                        SongInfo = new SongData
                        {
                            Seconds   = (int)data.d.song.duration,
                            StartTime = (DateTime)data.d.startTime,

                            Name         = (string)data.d.song.title,
                            Author       = string.Join(", ", ((JArray)data.d.song.artists).Select(a => a["name"])),
                            AuthorRomaji = string.Join(", ", ((JArray)data.d.song.artists).Select(a => a["nameRomaji"]))
                        };

                        if (((JArray)data.d.song.albums).Count > 0)
                        {
                            SongInfo.Album       = (string)((JArray)data.d.song.albums)[0]["name"];
                            SongInfo.AlbumRomaji = (string)((JArray)data.d.song.albums)[0]["nameRomaji"];
                            if ((string)((JArray)data.d.song.albums)[0]["image"] != null)
                            {
                                SongInfo.AlbumArtUrl = "https://cdn.listen.moe/covers/" + (string)((JArray)data.d.song.albums)[0]["image"];
                            }
                        }

                        SongDataChanged?.Invoke();
                    }
                    break;

                // not required but nice
                case 10:     // heartbeat acknowledged serverside
                    Debug.WriteLine("heartbeat acknowledged");
                    break;

                default:
                    Debug.WriteLine("unknown opcode " + opcode);
                    break;
                }
            };

            _ws.Connect();
        }