コード例 #1
0
        public void SetTrack(QuranAudioTrack request)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            if (MediaPlayerState.Closed == CurrentPlayer.CurrentState)
            {
                // Start task
                StartBackgroundAudioTask();                
            }

            MessageService.SendMessageToBackground(new TrackChangedMessage(request));
        }
コード例 #2
0
 public void SetTrack(QuranAudioTrack request)
 {
     //BackgroundAudioPlayer.Instance.Track = new AudioTrack(source, title, artist, album, albumArt, tag,
     //    EnabledPlayerControls.All);
     throw new NotImplementedException();
 }
コード例 #3
0
 private void PlayStreaming(QuranAudioTrack request)
 {
     QuranApp.NativeProvider.AudioProvider.SetTrack(request);
 }
コード例 #4
0
 private async void AudioProvider_TrackChanged(IAudioProvider sender, QuranAudioTrack request)
 {
     await UpdateAudioState();
 }
コード例 #5
0
        public async Task PlayFromAyah(QuranAyah ayah)
        {
            int currentQari = AudioUtils.GetReciterIdByName(SettingsUtils.Get<string>(Constants.PREF_ACTIVE_QARI));
            if (currentQari == -1)
                return;

            var request = new QuranAudioTrack(currentQari, ayah, 
                FileUtils.ScreenInfo);

            // if necessary download aya position file
            await DownloadAyahPositionFile();

            QuranApp.NativeProvider.AudioProvider.SetTrack(request);
        }
コード例 #6
0
        /// <summary>
        /// Create a playback list from the list of songs received from the foreground app.
        /// </summary>
        /// <param name="songs"></param>
        private async Task CreatePlaybackList(QuranAudioTrack newTrack)
        {
            BackgroundMediaPlayer.Current.Pause();

            // Make a new list
            if (_playbackList != null)
            {
                _playbackList.CurrentItemChanged -= PlaybackListCurrentItemChanged;
                _playbackList.Items.Clear();
            }
            else
            {
                _playbackList = new MediaPlaybackList();
            }

            // Initialize FileUtils
            await FileUtils.Initialize(newTrack.ScreenInfo);

            var missingFiles = await AudioUtils.GetMissingFiles(newTrack);

            // Add playback items to the list
            QuranAudioTrack nextTrack = newTrack.GetFirstAyah();
            var reciter = nextTrack.GetReciter();
            while (nextTrack != null)
            {
                string fileName = AudioUtils.GetFileName(nextTrack.GetQuranAyah(), reciter);
                MediaSource source;
                if (missingFiles.Contains(fileName))
                {
                    source = MediaSource.CreateFromUri(new Uri(Path.Combine(reciter.ServerUrl, fileName)));
                }
                else
                {
                    var file = await FileUtils.GetFile(await reciter.GetStorageFolder(), fileName);
                    if (file != null)
                    {
                        source = MediaSource.CreateFromStorageFile(file);
                        //source = MediaSource.CreateFromUri(new Uri(file.Path));
                    }
                    else
                    {
                        source = MediaSource.CreateFromUri(new Uri(Path.Combine(reciter.ServerUrl, fileName)));
                    }
                }
                source.CustomProperties[SurahKey] = nextTrack.Surah;
                source.CustomProperties[AyahKey] = nextTrack.Ayah;
                source.CustomProperties[ReciterKey] = nextTrack.ReciterId;
                source.CustomProperties[QuranTrackKey] = nextTrack.ToString();
                source.CustomProperties[TitleKey] = QuranUtils.GetSurahAyahString(nextTrack.Surah, nextTrack.Ayah);
                _playbackList.Items.Add(new MediaPlaybackItem(source));
                nextTrack = nextTrack.GetNextInSurah();
            }

            // Don't auto start
            BackgroundMediaPlayer.Current.AutoPlay = false;

            // Assign the list to the player
            BackgroundMediaPlayer.Current.Source = _playbackList;

            // Add handler for future playlist item changes
            _playbackList.CurrentItemChanged += PlaybackListCurrentItemChanged;
        }
コード例 #7
0
        /// <summary>
        /// Gets track index from playbackList if found. Otherwise -1.
        /// </summary>
        /// <param name="newTrack"></param>
        /// <returns></returns>
        private int FindTrack(QuranAudioTrack newTrack)
        {
            if (_playbackList != null)
            {
                return _playbackList.Items.ToList().FindIndex(i =>
                    (int)i.Source.CustomProperties[AyahKey] == newTrack.Ayah &&
                    (int)i.Source.CustomProperties[SurahKey] == newTrack.Surah &&
                    (int)i.Source.CustomProperties[ReciterKey] == newTrack.ReciterId);
            }

            return -1;
        }
コード例 #8
0
        private async Task ChangeTrack(QuranAudioTrack newTrack)
        {
            _originalTrackRequest = newTrack;
            int index = FindTrack(newTrack);

            // If playlist contains track - change track
            if (index >= 0)
            {
                await ChangeTrack((uint)index);
            }
            // Otherwise load new playlist and then change track
            else
            {
                await CreatePlaybackList(newTrack);
                await ChangeTrack(newTrack);
            }
        }
コード例 #9
0
 public TrackChangedMessage(QuranAudioTrack audioRequest)
 {
     this.AudioTrack = audioRequest;
 }