0

Windows 8 の Metro スタイル アプリを作成しています。さまざまなサウンドを同時に実行して管理できるようにしたいと考えています。この目標のために、それを可能にするメソッドを含む必要がある MediaPlayService を作成しました。

「_mediaElement.SetSource()」の後、音量を変更できないという問題が 1 つ見つかりました。SetVolume を呼び出していますが、何も起こりません。

Initialize(sound);
 SetVolume(100);
 Play();        --- this sequence works


Initialize(sound);
 Play();       
SetVolume(100); --- does not work (I can not change the volume during playback)

 public void SetVolume(int volume)
         {

          //_m ediaElement.Volume = Math.Round((double)((double)volume / 100), 2);
             double dvolume = Math.Round((double)((double)volume / 100), 2);

            _mediaElement.SetValue(MediaElement.VolumeProperty, dvolume);

        }

        string _mediaPath;

        public void Initialize(Sound sound)
         {
             _mediaElement = new MediaElement();
             _mediaPath = sound.FilePath;
             _mediaElement.AudioCategory = Windows.UI.Xaml.Media.AudioCategory.Communications;
             _mediaElement.IsLooping = true;
             _mediaElement.MediaFailed += _mediaElement_MediaFailed;
             _mediaElement.RealTimePlayback = true;
         }

        public async void Play()
         {

            var pack = Windows.ApplicationModel.Package.Current;

            var installedLoction = pack.InstalledLocation;
             var storageFile = await installedLoction.GetFileAsync(_mediaPath);

            if (storageFile != null)
             {
                 var stream = await storageFile.OpenAsync(Windows.Storage.FileAccessMode.Read);
                 _mediaElement.SetSource(stream, storageFile.ContentType);

                _mediaElement.Play();
             }
  }
4

1 に答える 1

0

MediaElement はページの VisualTree の一部ではありません。結果として、音量や位置の設定が正しく機能しないなどの奇妙な動作に対処する必要があります。

解決策として、XAML ファイルで MediaElement を作成するか、コード ビハインドから VisualTree に追加することができます (contentGrid.Children.Add( _mediaElement など)。後者の場合、別のページに移動する前におそらくそれを削除する必要があります。次に戻るときに再生されない場合があります。

于 2012-07-26T12:03:20.370 に答える