示例#1
0
        public SongWindow(SongMeta meta)
        {
            _song = SongLoader.Load(meta);
            InitializeComponent();
            Text = $"Score: {meta.Artist} - {meta.Name} [{meta.Instrument}]";
            albumArtwork.Image = _song.GetCover();
            score1.SetSong(_song);

            _player = _song.GetSongPlayer();
            for (int x = 0; x < _player.Channels; x++)
            {
                AddFader(x);
            }


            seekBar1.Samples       = (long)(_player.Length.TotalSeconds * 44100.0 + 0.5);
            seekBar1.OnSliderDrop += i => _player.Position = TimeSpan.FromSeconds(i);
            _timer          = new Timer();
            _timer.Interval = 30;
            _timer.Tick    += TimerTick;
            _timer.Start();
            waveform1.WaveData       = _song.GetWaveform();
            waveform1.Sections       = _song.Sections;
            waveform1.Beats          = _song.Beats;
            waveform1.Looper.OnLoop += d => _player.Position = TimeSpan.FromSeconds(d);
        }
示例#2
0
 public QueueEventPublisher(
     IVoteableQueue<ISongStream> queue,
     ISongStreamPlayer streamPlayer,
     ISongPlayer songPlayer)
 {
     _queue = queue;
     _streamPlayer = streamPlayer;
     _songPlayer = songPlayer;
 }
示例#3
0
 public SongStreamHandler(
     IVoteableQueue<ISongStream> queue,
     ISongStreamPlayer streamPlayer,
     ISongPlayer songPlayer)
 {
     _queue = queue;
     _streamPlayer = streamPlayer;
     _songPlayer = songPlayer;
 }
示例#4
0
 public static void HelpMe(HttpListenerResponse response, string tempId, ISongPlayer songPlayer, bool large)
 {
     if (!large)
     {
         HelpMeSmall(response, tempId ?? string.Empty, songPlayer);
     }
     else
     {
         HelpMeLarge(response, tempId ?? string.Empty, songPlayer);
     }
 }
示例#5
0
 public static void HelpMe(HttpListenerResponse response, string tempId, ISongPlayer songPlayer, bool large)
 {
     if (!large)
     {
         HelpMeSmall(response, tempId ?? string.Empty, songPlayer);
     }
     else
     {
         HelpMeLarge(response, tempId ?? string.Empty, songPlayer);
     }
 }
示例#6
0
        static void SongQueueSample(ISongPlayer player, ISongProvider songProvider)
        {
            var queue = new VoteableQueue<Song>();
            queue.ItemAdded += (sender, eventArgs) =>
            {
                Console.WriteLine("Added song " + eventArgs.Item.Item.Name + " to queue");

                if (queue.CurrentQueue.Count() == 1)
                {
                    VoteableQueueItem<Song> head;

                    if (queue.TryPeek(out head))
                    {
                        player.Start(head.Item);
                    }
                }
            };
            player.CurrentSongChanged += (sender, eventArgs) => Console.WriteLine("Current song is " + eventArgs.NewValue.Name);
            player.CurrentSongCompleted += (sender, eventArgs) =>
            {
                VoteableQueueItem<Song> head;

                if (queue.TryDequeue(out head))
                {
                    if (queue.TryPeek(out head))
                    {
                        player.Start(head.Item);
                    }
                }
            };

            string query;

            do
            {
                Console.WriteLine("Enter query >> ");
                query = Console.ReadLine();

                if (!string.IsNullOrEmpty(query))
                {
                    songProvider
                        .GetSongs(query, CancellationToken.None)
                        .ContinueWith(resultTask =>
                        {
                            var song = resultTask.Result.FirstOrDefault();

                            if (song != null)
                            {
                                queue.Enqueue(song);
                            }
                        });
                }
            } while (string.IsNullOrEmpty(query));
        }
示例#7
0
        private static void HelpMeLarge(HttpListenerResponse response, string tempId, ISongPlayer songPlayer)
        {
            // use cached image if possible
            if (tempId.Equals(_lastId, StringComparison.OrdinalIgnoreCase) && _lastImage != null)
            {
                WriteImage(response, _lastImage);
                return;
            }

            // get from player
            MemoryStream imageStream = null;
            if (!string.IsNullOrEmpty(tempId))
            {
                try
                {
                    // this is locked in function
                    imageStream = songPlayer.GetImageStream(tempId, true);
                }
                catch (Exception)
                {
                    imageStream = null;
                }

                using (MemoryStream streamFromSongPlayer = imageStream)
                {
                    if (streamFromSongPlayer != null)
                    {
                        // set last id
                        _lastId = tempId;
                        _lastImage = streamFromSongPlayer.ToArray();
                        WriteImage(response, _lastImage);
                        return;
                    }
                }
            }

            // cache large if not present
            if (_emptyImageLarge == null)
            {
                using (Stream stream = Assembly.GetEntryAssembly().GetManifestResourceStream("SongRequest.Static.empty.png"))
                using (MemoryStream memoryStream = new MemoryStream())
                {
                    stream.CopyTo(memoryStream);
                    _emptyImageLarge = memoryStream.ToArray();
                }
            }

            WriteImage(response, _emptyImageLarge);
        }
示例#8
0
        public AppModule(
            IRegionManager regionManager,
            IVoteableQueue<ISongStream> queue,
            ISongPlayer songPlayer,
            ISongStreamPlayer streamPlayer)
        {
            _regionManager = regionManager;

            _queue = queue;
            _queue.ItemAdded += QueueOnItemAdded;

            _streamPlayer = streamPlayer;
            _streamPlayer.NextSong += StreamPlayerNextSongChanged;

            _songPlayer = songPlayer;
            _songPlayer.CurrentSongCompleted += SongPlayerOnCurrentSongCompleted;
        }
示例#9
0
        public GtGameController(GtFactory pFactory, GtFileLoader pFileLoader, ISongPlayer pSongPlayer, IAudioEffects pAudioEffects)
        {
            if (pSongPlayer == null)
            {
                throw new InvalidParameter("pSongPlayer can't be null");
            }

            if (pFactory == null)
            {
                throw new InvalidParameter("pFactory can't be null");
            }

            if (pAudioEffects == null)
            {
                throw new InvalidParameter("pAudioEffects can't be null");
            }

            Initialize(pFactory, pFileLoader, pSongPlayer, pAudioEffects);
        }
示例#10
0
        private void Initialize(GtFactory pFactory, GtFileLoader pFileLoader, ISongPlayer pSongPlayer, IAudioEffects pAudioEffects)
        {
            this.Factory = pFactory;

            this.SongPlayer = pSongPlayer;

            this.fFileLoader = pFileLoader;

            this.AudioEffects = pAudioEffects;

            this.CurrentScreen = EnumGameScreen.Undefined;

            this.AudioListener = pFactory.Instantiate <IAudioListener>(SAMPLE_FREQUENCE);

            //must be after AudioListener instantiation
            this.GameRoundController = pFactory.Instantiate <IGtGameRoundController>(pFactory, this);

            this.TuneController = pFactory.Instantiate <IGtTuneController>();

            this.AudioListener.Start();
        }
示例#11
0
        public static void HelpMe(HttpListenerResponse response, string tempId, ISongPlayer songPlayer, bool large)
        {
            // if no temp id, return
            if (string.IsNullOrEmpty(tempId))
            {
                response.StatusCode = (int)HttpStatusCode.NotFound;
                return;
            }

            lock (_lockObject)
            {
                if (!large)
                {
                    HelpMeSmall(response, tempId, songPlayer);
                }
                else
                {
                    HelpMeLarge(response, tempId, songPlayer);
                }
            }
        }
        public void SetupSong(int pNumberOfPlayers, ISongPlayer pSongPlayer,
                              string pArtist, string pAlbum, string pSong, float pPitch, params GtSceneGuitar[] pGtSceneGuitars)
        {
            this.fNumberOfPlayers = pNumberOfPlayers;

            if ((this.fNumberOfPlayers < 1) || (this.fNumberOfPlayers > 2))
            {
                throw new InvalidGameRoundControlerParameters(string.Format("GtGameController must have one or two players: {0} found.", this.fNumberOfPlayers));
            }

            if (pGtSceneGuitars == null)
            {
                throw new InvalidGameRoundControlerParameters("null parameter is not allowed.");
            }

            if (pGtSceneGuitars.Count() != this.fNumberOfPlayers)
            {
                throw new InvalidGameRoundControlerParameters(string.Format("There are {0} players and {1} GtSceneGuitar in SetupSong(pGtSceneGuitars).", pGtSceneGuitars.Count(), this.fNumberOfPlayers));
            }

            if (pSongPlayer == null)
            {
                throw new InvalidGameRoundControlerParameters("null parameter is not allowed.");
            }

            this.SongPlayer = pSongPlayer;

            this.Artist = pArtist;

            this.Album = pAlbum;

            this.Song = pSong;

            this.Pitch = pPitch;

            fSceneGuitars = pGtSceneGuitars;
        }
示例#13
0
 public PlayerController(ISongPlayer songPlayer)
 {
     _songPlayer = songPlayer;
 }
示例#14
0
        private static void HelpMeSmall(HttpListenerResponse response, string tempId, ISongPlayer songPlayer)
        {
            if (thumbnailBuffer.ContainsKey(tempId))
            {
                WriteImage(response, thumbnailBuffer[tempId]);
                return;
            }

            // get from player
            MemoryStream imageStream = null;
            if (!string.IsNullOrEmpty(tempId))
            {
                try
                {
                    // this is locked in function
                    imageStream = songPlayer.GetImageStream(tempId, false);
                }
                catch (Exception)
                {
                    imageStream = null;
                }

                using (MemoryStream streamFromSongPlayer = imageStream)
                {
                    if (streamFromSongPlayer != null)
                    {
                        if (!thumbnailBuffer.ContainsKey(tempId))
                            thumbnailBuffer.Add(tempId, streamFromSongPlayer.ToArray());
                        WriteImage(response, streamFromSongPlayer);
                        return;
                    }
                }
            }

            // cache small if not present
            if (_emptyImageSmall == null)
            {
                using (Stream stream = Assembly.GetEntryAssembly().GetManifestResourceStream("SongRequest.Static.empty_small.png"))
                using (MemoryStream memoryStream = new MemoryStream())
                {
                    stream.CopyTo(memoryStream);
                    _emptyImageSmall = memoryStream.ToArray();
                }
            }

            if (!thumbnailBuffer.ContainsKey(tempId))
                thumbnailBuffer.Add(tempId, _emptyImageSmall);
            WriteImage(response, _emptyImageSmall);
        }
示例#15
0
        public SongsController(
            ICommandService <EditSong> editSong,
            ICommandService <UploadSong> uploadSong,
            ICommandService <DeleteSong> deleteSong,

            IQueryService <GetSongForEditById, Song> getSongForEdit,
            IQueryService <GetSongForDeleteById, Song> getSongForDelete,
            IQueryService <GetSongsCount, int> getSongsCount,
            IQueryService <GetSongs, IEnumerable <Song> > getSongs,
            IQueryService <GetApprovedSongsByUser, IEnumerable <Song> > getSongsByUser,

            ISongPlayer songPlayer)
        {
            if (editSong is null)
            {
                throw new ArgumentNullException(nameof(editSong));
            }

            if (uploadSong is null)
            {
                throw new ArgumentNullException(nameof(uploadSong));
            }

            if (deleteSong is null)
            {
                throw new ArgumentNullException(nameof(deleteSong));
            }


            if (getSongForEdit is null)
            {
                throw new ArgumentException(nameof(getSongForEdit));
            }

            if (getSongForDelete is null)
            {
                throw new ArgumentException(nameof(getSongForDelete));
            }

            if (getSongsCount is null)
            {
                throw new ArgumentException(nameof(getSongsCount));
            }

            if (getSongs is null)
            {
                throw new ArgumentException(nameof(getSongs));
            }

            if (getSongsByUser is null)
            {
                throw new ArgumentException(nameof(getSongsByUser));
            }

            if (songPlayer is null)
            {
                throw new ArgumentException(nameof(songPlayer));
            }

            this.editSong   = editSong;
            this.uploadSong = uploadSong;
            this.deleteSong = deleteSong;

            this.getSongForEdit   = getSongForEdit;
            this.getSongForDelete = getSongForDelete;
            this.getSongsCount    = getSongsCount;
            this.getSongs         = getSongs;
            this.getSongsByUser   = getSongsByUser;

            this.songPlayer = songPlayer;
        }
示例#16
0
        public override void Process(HttpListenerRequest request, HttpListenerResponse response)
        {
            string[] actionPath = request.RawUrl.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries);

            string action = actionPath[1].ToLower();

            ISongPlayer songPlayer = SongPlayerFactory.GetSongPlayer();
            string      requester  = GetRequester(request);

            response.AppendHeader("Cache-Control", "no-cache");

            switch (action)
            {
            case "queue":
                switch (request.HttpMethod)
                {
                case "GET":
                    response.ContentType = "application/json";
                    WriteUtf8String(response.OutputStream, JsonConvert.SerializeObject(
                                        new
                    {
                        Queue        = songPlayer.PlayQueue.ToList(),
                        PlayerStatus = songPlayer.PlayerStatus,
                        Self         = requester
                    }
                                        ));
                    break;

                case "POST":
                    if (!ClientAllowed(requester))
                    {
                        return;
                    }

                    using (var reader = new StreamReader(request.InputStream))
                    {
                        songPlayer.Enqueue(reader.ReadToEnd(), requester);
                    }
                    break;

                case "DELETE":
                    if (!ClientAllowed(requester))
                    {
                        return;
                    }

                    using (var reader = new StreamReader(request.InputStream))
                    {
                        songPlayer.Dequeue(reader.ReadToEnd(), requester);
                    }
                    break;
                }
                break;

            case "playlist":
            {
                if (!ClientAllowed(requester))
                {
                    return;
                }

                if (request.HttpMethod == "POST")
                {
                    using (var reader = new StreamReader(request.InputStream))
                    {
                        string posted          = reader.ReadToEnd();
                        var    playlistRequest = JsonConvert.DeserializeAnonymousType(posted, new { Filter = string.Empty, Page = 0, SortBy = "artist", Ascending = true });

                        Song[] songs = songPlayer.GetPlayList(
                            playlistRequest.Filter,
                            playlistRequest.SortBy,
                            playlistRequest.Ascending
                            ).ToArray();

                        response.ContentType = "application/json";
                        WriteUtf8String(response.OutputStream, JsonConvert.SerializeObject(
                                            new
                            {
                                TotalPageCount      = (songs.Length + (_pageSize - 1)) / _pageSize,
                                CurrentPage         = playlistRequest.Page,
                                SongsForCurrentPage = songs.Skip((playlistRequest.Page - 1) * _pageSize).Take(_pageSize).ToArray(),
                                SortBy    = playlistRequest.SortBy,
                                Ascending = playlistRequest.Ascending
                            }
                                            ));
                    }
                }
                break;
            }

            case "next":
                if (!ClientAllowed(requester))
                {
                    return;
                }

                response.ContentType = "application/json";
                songPlayer.Next(requester);
                break;

            case "rescan":
                if (!ClientAllowed(requester))
                {
                    return;
                }

                response.ContentType = "application/json";
                songPlayer.Rescan();
                ImageHelper.Purge();
                break;

            case "pause":
                if (!ClientAllowed(requester))
                {
                    return;
                }

                response.ContentType = "application/json";
                songPlayer.Pause();
                break;

            case "volume":
                if (!ClientAllowed(requester))
                {
                    return;
                }

                response.ContentType = "application/json";
                if (request.HttpMethod == "POST")
                {
                    using (var reader = new StreamReader(request.InputStream))
                    {
                        string posted = reader.ReadToEnd();

                        int volume;
                        if (int.TryParse(posted, out volume))
                        {
                            songPlayer.Volume = volume;
                        }

                        WriteUtf8String(response.OutputStream, JsonConvert.SerializeObject(songPlayer.Volume));
                    }
                }
                break;

            case "image":
                string tempId;
                bool   large = false;
                if (actionPath.Length == 4)
                {
                    tempId = actionPath[2];
                    if (!string.IsNullOrEmpty(tempId))
                    {
                        tempId = WebUtility.HtmlDecode(tempId);
                    }

                    if (actionPath[3].Equals("large", StringComparison.OrdinalIgnoreCase))
                    {
                        large = true;
                    }
                }
                else
                {
                    tempId = string.Empty;

                    if (actionPath[2].Equals("large", StringComparison.OrdinalIgnoreCase))
                    {
                        large = true;
                    }
                }

                ImageHelper.HelpMe(response, tempId, songPlayer, large);
                break;

            default:
                response.ContentType = "text/plain";
                WriteUtf8String(response.OutputStream, request.RawUrl);
                break;
            }
        }
示例#17
0
        private static void HelpMeLarge(HttpListenerResponse response, string tempId, ISongPlayer songPlayer)
        {
            int    size        = 300;
            string cacheFolder = Path.Combine(_imageCachePath, tempId.Length > 2 ? tempId.Substring(0, 2) : tempId);
            string cacheKey    = Path.Combine(cacheFolder, tempId + "_" + size + ".png");

            if (File.Exists(cacheKey))
            {
                using (FileStream fileStream = File.OpenRead(cacheKey))
                {
                    WriteImage(response, fileStream);
                    return;
                }
            }

            lock (_lockObject)
            {
                // get from player
                MemoryStream imageStream = null;
                if (!string.IsNullOrEmpty(tempId))
                {
                    try
                    {
                        // this is locked in function
                        imageStream = songPlayer.GetImageStream(tempId, size);
                    }
                    catch (Exception)
                    {
                        imageStream = null;
                    }

                    using (MemoryStream streamFromSongPlayer = imageStream)
                    {
                        if (streamFromSongPlayer != null)
                        {
                            if (!Directory.Exists(cacheFolder))
                            {
                                Directory.CreateDirectory(cacheFolder);
                            }

                            using (FileStream fileStream = File.Create(cacheKey))
                            {
                                streamFromSongPlayer.CopyTo(fileStream);
                            }

                            WriteImage(response, streamFromSongPlayer);
                            return;
                        }
                    }
                }

                // cache large if not present
                if (_emptyImageLarge == null)
                {
                    using (Stream stream = Assembly.GetEntryAssembly().GetManifestResourceStream("SongRequest.Static.empty.png"))
                        using (MemoryStream memoryStream = new MemoryStream())
                        {
                            stream.CopyTo(memoryStream);
                            _emptyImageLarge = memoryStream.ToArray();
                        }
                }

                WriteImage(response, _emptyImageLarge);
            }
        }
示例#18
0
        private static void HelpMeSmall(HttpListenerResponse response, string tempId, ISongPlayer songPlayer)
        {
            if (thumbnailBuffer.ContainsKey(tempId))
            {
                WriteImage(response, thumbnailBuffer[tempId]);
                return;
            }

            // get from player
            MemoryStream imageStream = null;

            if (!string.IsNullOrEmpty(tempId))
            {
                try
                {
                    // this is locked in function
                    imageStream = songPlayer.GetImageStream(tempId, false);
                }
                catch (Exception)
                {
                    imageStream = null;
                }

                using (MemoryStream streamFromSongPlayer = imageStream)
                {
                    if (streamFromSongPlayer != null)
                    {
                        if (!thumbnailBuffer.ContainsKey(tempId))
                        {
                            thumbnailBuffer.Add(tempId, streamFromSongPlayer.ToArray());
                        }
                        WriteImage(response, streamFromSongPlayer);
                        return;
                    }
                }
            }

            // cache small if not present
            if (_emptyImageSmall == null)
            {
                using (Stream stream = Assembly.GetEntryAssembly().GetManifestResourceStream("SongRequest.Static.empty_small.png"))
                    using (MemoryStream memoryStream = new MemoryStream())
                    {
                        stream.CopyTo(memoryStream);
                        _emptyImageSmall = memoryStream.ToArray();
                    }
            }

            if (!thumbnailBuffer.ContainsKey(tempId))
            {
                thumbnailBuffer.Add(tempId, _emptyImageSmall);
            }
            WriteImage(response, _emptyImageSmall);
        }
示例#19
0
 public MainWindowViewModel(ISongProvider songProvider, ISongPlayer songPlayer)
 {
     _songProvider = songProvider;
     _songPlayer = songPlayer;
 }
示例#20
0
 public SongHistoryService(ISongPlayer songPlayer)
 {
     _songPlayer = songPlayer;
     _songHistory = new ConcurrentStack<Song>();
     _maximumLength = 200;
 }
示例#21
0
 public MainHub()
 {
     _songPlayer = GlobalHost.DependencyResolver.Resolve<ISongPlayer>();
     _queue = GlobalHost.DependencyResolver.Resolve<IVoteableQueue<ISongStream>>();
 }
示例#22
0
 public PlayerEventPublisher(ISongPlayer player, IVoteableQueue<ISongStream> queue)
 {
     _player = player;
     _queue = queue;
 }
示例#23
0
        private static void HelpMeLarge(HttpListenerResponse response, string tempId, ISongPlayer songPlayer)
        {
            int size = 300;
            string cacheFolder = Path.Combine(_imageCachePath, tempId.Length > 2 ? tempId.Substring(0, 2) : tempId);
            string cacheKey = Path.Combine(cacheFolder, tempId + "_" + size + ".png");
            if (File.Exists(cacheKey))
            {
                using (FileStream fileStream = File.OpenRead(cacheKey))
                {
                    WriteImage(response, fileStream);
                    return;
                }
            }

            lock (_lockObject)
            {
                // get from player
                MemoryStream imageStream = null;
                if (!string.IsNullOrEmpty(tempId))
                {
                    try
                    {
                        // this is locked in function
                        imageStream = songPlayer.GetImageStream(tempId, size);
                    }
                    catch (Exception)
                    {
                        imageStream = null;
                    }

                    using (MemoryStream streamFromSongPlayer = imageStream)
                    {
                        if (streamFromSongPlayer != null)
                        {
                            if (!Directory.Exists(cacheFolder))
                                Directory.CreateDirectory(cacheFolder);

                            using (FileStream fileStream = File.Create(cacheKey))
                            {
                                streamFromSongPlayer.CopyTo(fileStream);
                            }

                            WriteImage(response, streamFromSongPlayer);
                            return;
                        }
                    }
                }

                // cache large if not present
                if (_emptyImageLarge == null)
                {
                    using (Stream stream = Assembly.GetEntryAssembly().GetManifestResourceStream("SongRequest.Static.empty.png"))
                    using (MemoryStream memoryStream = new MemoryStream())
                    {
                        stream.CopyTo(memoryStream);
                        _emptyImageLarge = memoryStream.ToArray();
                    }
                }

                WriteImage(response, _emptyImageLarge);
            }
        }
示例#24
0
        private static void HelpMeLarge(HttpListenerResponse response, string tempId, ISongPlayer songPlayer)
        {
            // use cached image if possible
            if (tempId.Equals(_lastId, StringComparison.OrdinalIgnoreCase) && _lastImage != null)
            {
                WriteImage(response, _lastImage);
                return;
            }

            // get from player
            MemoryStream imageStream = null;

            if (!string.IsNullOrEmpty(tempId))
            {
                try
                {
                    // this is locked in function
                    imageStream = songPlayer.GetImageStream(tempId, true);
                }
                catch (Exception)
                {
                    imageStream = null;
                }

                using (MemoryStream streamFromSongPlayer = imageStream)
                {
                    if (streamFromSongPlayer != null)
                    {
                        // set last id
                        _lastId    = tempId;
                        _lastImage = streamFromSongPlayer.ToArray();
                        WriteImage(response, _lastImage);
                        return;
                    }
                }
            }

            // cache large if not present
            if (_emptyImageLarge == null)
            {
                using (Stream stream = Assembly.GetEntryAssembly().GetManifestResourceStream("SongRequest.Static.empty.png"))
                    using (MemoryStream memoryStream = new MemoryStream())
                    {
                        stream.CopyTo(memoryStream);
                        _emptyImageLarge = memoryStream.ToArray();
                    }
            }

            WriteImage(response, _emptyImageLarge);
        }
示例#25
0
 public TorshifyHub()
 {
     _player = GlobalHost.DependencyResolver.Resolve<ISongPlayer>();
 }