Esempio n. 1
0
        private void PlayAudioFile(int idx)
        {
            var album = mContentList.GetSelectedAlbum();
            var af    = album.AudioFileNth(idx);

            switch (mPlaybackController.GetState())
            {
            case PlaybackController.State.Playing:
            case PlaybackController.State.Paused:
                // 再生中。またはポーズ中。
                if (mPlaybackController.LoadedGroupId() == af.GroupId)
                {
                    // 再生中のグループと同じグループである。
                    // 再生曲を切り替える。
                    mPlaybackController.Play(idx);
                    UpdatePlaybackControlState();
                    return;
                }
                else
                {
                    // 異なるグループの曲なので再ロードが必要。
                    // 再生停止してロードする。
                    mPlaybackController.Stop();
                }
                break;

            default:
                break;
            }

            if (!SetWasapiParams())
            {
                return;
            }

            // 選択曲が含まれるグループをロードする。
            var args = new BackgroundLoadArgs(
                mContentList.GetSelectedAlbum(), idx, mListBoxPlaybackDevice.SelectedIndex);

            var playList = CreatePlayList(args.Album, args.First);

            int ercd = mPlaybackController.PlaylistCreateStart(args.DeviceIdx, args.Album.AudioFileNth(args.First));

            if (ercd < 0)
            {
                MessageBox.Show(string.Format(Properties.Resources.ErrorPlaybackStartFailed, ercd));
                return;
            }

            // お気に入りデバイスの更新。
            mPreference.PreferredDeviceIdString = mPlaybackController.GetDeviceAttribute(args.DeviceIdx).DeviceIdString;

            // PlaybackController stateがLoadingになった。
            UpdatePlaybackControlState();

            mBackgroundLoad = new BackgroundWorker();
            mBackgroundLoad.WorkerReportsProgress      = true;
            mBackgroundLoad.WorkerSupportsCancellation = true;
            mBackgroundLoad.DoWork             += new DoWorkEventHandler(OnBackgroundLoad_DoWork);
            mBackgroundLoad.ProgressChanged    += new ProgressChangedEventHandler(OnBackgroundLoad_ProgressChanged);
            mBackgroundLoad.RunWorkerCompleted += new RunWorkerCompletedEventHandler(OnBackgroundLoad_RunWorkerCompleted);
            mBackgroundLoad.RunWorkerAsync(args);
        }
Esempio n. 2
0
 public BackgroundLoadResult(BackgroundLoadArgs args, bool result)
 {
     Args   = args;
     Result = result;
 }