Exemplo n.º 1
0
        /// <summary>
        /// Initializes the wrapper.
        /// </summary>
        /// <param name="audioSourceDirectory">The directory of the audio source.</param>
        /// <returns>True if successful.</returns>
        public bool Initialize(string audioSourceDirectory)
        {
            try
            {
                _logger = AudioBandLogManager.GetLogger($"AudioSourceWrapper({new DirectoryInfo(audioSourceDirectory).Name})");
                _logger.Debug("Initializing wrapper");

                AppDomain.CurrentDomain.UnhandledException += (o, e) => _logger.Error(e.ExceptionObject as Exception, "Unhandled exception in wrapper");

                _audioSource        = AudioSourceLoader.LoadFromDirectory(audioSourceDirectory);
                _audioSource.Logger = new AudioSourceLogger(_audioSource.Name);

                _audioSource.SettingChanged       += (o, e) => SettingChanged?.Invoke(this, e);
                _audioSource.TrackInfoChanged     += (o, e) => TrackInfoChanged?.Invoke(this, e);
                _audioSource.IsPlayingChanged     += (o, e) => IsPlayingChanged?.Invoke(this, e);
                _audioSource.TrackProgressChanged += (o, e) => TrackProgressChanged?.Invoke(this, e);
                _audioSource.VolumeChanged        += (o, e) => VolumeChanged?.Invoke(this, e);
                _audioSource.ShuffleChanged       += (o, e) => ShuffleChanged?.Invoke(this, e);
                _audioSource.RepeatModeChanged    += (o, e) => RepeatModeChanged?.Invoke(this, e);

                _audioSourceSettingsList = _audioSource.GetSettings();
                foreach (AudioSourceSetting setting in _audioSourceSettingsList)
                {
                    _audioSourceSettings.Add(setting.Attribute.Name, setting);
                }

                _logger.Debug("Wrapper initialization complete");
                return(true);
            }
            catch (Exception e)
            {
                _logger.Error(e);
                return(false);
            }
        }
Exemplo n.º 2
0
        private void ExtractTitle(string title)
        {
            // Spotify title is in the form of <artist> - <title>
            var parts = title.Split(new string[] { " - " }, 2, StringSplitOptions.None);

            if (parts.Length != 2)
            {
                _logger.Warn($"Spotify title invalid: {title}");
                return;
            }

            var artist = parts[0];
            var song   = parts[1];

            if (artist != _currentArtist || song != _currentSong)
            {
                TrackInfoChanged?.Invoke(this, new TrackInfoChangedEventArgs {
                    TrackName = song, Artist = artist
                });
            }

            _currentArtist = artist;
            _currentSong   = song;

            // Already playing
            if (_currentIsPlaying)
            {
                return;
            }

            TrackPlaying?.Invoke(this, EventArgs.Empty);
            _currentIsPlaying = true;
        }
Exemplo n.º 3
0
        private bool UpdateSongInfo()
        {
            var status = _spotifyClient.GetStatus();

            var track = status?.Track;

            if (track == null)
            {
                return(false);
            }
            _trackLength = track.Length;

            TrackProgressChanged?.Invoke(this, CalculateTrackPercentange(status.PlayingPosition));
            TrackInfoChanged?.Invoke(this, new TrackInfoChangedEventArgs
            {
                TrackName = track.TrackResource.Name,
                Artist    = track.ArtistResource.Name,
                AlbumArt  = track.GetAlbumArt(AlbumArtSize.Size640)
            });

            if (status.Playing)
            {
                TrackPlaying?.Invoke(this, EventArgs.Empty);
            }
            else
            {
                TrackPaused?.Invoke(this, EventArgs.Empty);
            }

            return(true);
        }
Exemplo n.º 4
0
 private void ResetState()
 {
     TrackInfoChanged?.Invoke(this, new TrackInfoChangedEventArgs {
         TrackName = "", AlbumArt = null
     });
     TrackPaused?.Invoke(this, EventArgs.Empty);
     TrackProgressChanged?.Invoke(this, 0);
 }
Exemplo n.º 5
0
        private void SetBlankState()
        {
            TrackInfoChanged?.Invoke(this, new TrackInfoChangedEventArgs());
            TrackPaused?.Invoke(this, EventArgs.Empty);
            TrackProgressChanged?.Invoke(this, 0);

            _currentIsPlaying = false;
            _currentArtist    = null;
            _currentSong      = null;
        }
Exemplo n.º 6
0
        private void SpotifyClientOnOnTrackChange(object sender, TrackChangeEventArgs trackChangeEventArgs)
        {
            var track = trackChangeEventArgs.NewTrack;

            _trackLength = track.Length;
            TrackInfoChanged?.Invoke(this, new TrackInfoChangedEventArgs
            {
                TrackName = track.TrackResource.Name,
                Artist    = track.ArtistResource.Name,
                AlbumArt  = track.GetAlbumArt(AlbumArtSize.Size640)
            });
        }
Exemplo n.º 7
0
    private IEnumerator WaitSecondsToGenerateTrack(float AdditionTime)
    {
        TrackAvailable = false;
        TrackInfoChanged?.Invoke(this, new TrackInfoChangeArgs(TrackAvailable, 0));
        yield return(new WaitForSeconds(ZDGameRule.CrossTrack.NextTrackDelay + AdditionTime));

        while (GetSoul() >= GetMaxSoul())
        {
            yield return(new WaitForSeconds(2));
        }
        SpawnNewTrackMission();
    }
Exemplo n.º 8
0
        private void NotifyTrackChange(Track track)
        {
            var trackInfo = new TrackInfoChangedEventArgs
            {
                Artist      = track.Artist,
                Album       = track.Album,
                AlbumArt    = track.Artwork,
                TrackLength = track.Length,
                TrackName   = track.Name,
            };

            TrackInfoChanged?.Invoke(this, trackInfo);
        }
Exemplo n.º 9
0
 private void TrackFullFilled()
 {
     if (TrackAngles.Count == 1)
     {
         TrackMissionSuccess();
     }
     else
     {
         TrackAngles.RemoveAt(0);
     }
     TrackInfoChanged?.Invoke(this, new TrackInfoChangeArgs(TrackAvailable, TrackAngles[0]));
     //Debug.Break();
 }
Exemplo n.º 10
0
    private void SpawnNewTrackMission()
    {
        if (GetSoul() < GetMaxSoul())
        {
            TrackAvailable    = true;
            TrackDurationTime = (GetMaxSoul() - GetSoul()) * ZDGameRule.CrossTrack.TrackDurationConst;
            TrackRemainTime   = TrackDurationTime;
            TrackAngles.Clear();

            for (int i = 0, _i = (int)Mathf.Pow(ZDGameRule.CrossTrack.TrackCountsConst, GetSoul() + 1);
                 i < _i;
                 ++i)
            {
                TrackAngles.Add(ZDGameRule.QuadAngle(Random.Range(0, 359)));
            }
            TrackInfoChanged?.Invoke(this, new TrackInfoChangeArgs(TrackAvailable, TrackAngles[0]));
        }
    }
Exemplo n.º 11
0
        private void NotifyTrackChange()
        {
            var track  = _ipc.GetFileTag(MusicBeeIPC.MetaData.TrackTitle);
            var artist = _ipc.GetFileTag(MusicBeeIPC.MetaData.Artist);

            var id = artist + track;

            if (_currentId == id)
            {
                return;
            }

            _currentId = id;

            var album = _ipc.GetFileTag(MusicBeeIPC.MetaData.Album);

            if (!TimeSpan.TryParseExact(_ipc.GetFileProperty(MusicBeeIPC.FileProperty.Duration), TimeFormats, null, out var trackLength))
            {
                Logger.Warn($"Unable to parse track length: {_ipc.GetFileProperty(MusicBeeIPC.FileProperty.Duration)}");
            }

            Image albumArt = null;
            var   bytes    = Convert.FromBase64String(_ipc.GetArtwork());

            using (var ms = new MemoryStream(bytes))
            {
                albumArt = new Bitmap(ms);
            }

            TrackInfoChanged?.Invoke(this, new TrackInfoChangedEventArgs
            {
                Album       = album,
                Artist      = artist,
                AlbumArt    = albumArt,
                TrackLength = trackLength,
                TrackName   = track
            });
        }
Exemplo n.º 12
0
 private void OnTrackInfoChanged(object s, TrackInfoChangedEventArgs e)
 {
     TrackInfoChanged?.Invoke(this, e);
 }