2012-09-04 3 views
0

WPF Caliburn.Micro 응용 프로그램이 있고 오디오를 재생할 MediaPlayer 클래스를 사용합니다. 재생, 중지 및 일시 중지 기능을 구현했지만 MediaPlayer에서 다시 시작 (일시 중지 후) 메서드가 표시되지 않습니다. 이걸 좀 도와 주시겠습니까?MediaPlayer로 오디오 재생을 다시 시작 하시겠습니까?

 public void Play() 
    { 
     try 
     { 
      var audio = Tpv.GetAudio(SelectedTpv.TpvId); 
      var file = Path.GetTempFileName().Replace(".tmp", ".wma"); 
      File.WriteAllBytes(file, audio); 

      Player.Open(new Uri(file, UriKind.Absolute)); 
      Player.Play(); 
      IsPlaying = true; 

     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(String.Format("Failed to play audio:\n{0}", ex.Message), "Failure", 
      MessageBoxButton.OK, MessageBoxImage.Error); 

      Console.WriteLine(ex.Message); 
     }   
    } 

감사 :

여기 내 코드의 일부이다.

답변

1

Play은 이력서 기능을 처리하기도합니다. System.Windows.Media.MediaPlayer에 대한 MSDN에 따르면 Play 메서드는 "현재 위치에서 미디어 재생"으로 가정됩니다. 즉, 처음부터 미디어를 재생할 때 위치는 0입니다. 일시 중지하면 미디어가 특정 위치에서 일시 중지됩니다. 재생을 다시 누르면 미디어를 일시 정지 한 위치에서 재생이 재개됩니다.

편집 : 문제는이 파일은 재생을 클릭 할 때마다로드하는 것입니다처럼 사용자가 제공 한 코드 업데이트를 기반으로

, 그것은 보인다. 이렇게하면 이전 일시 중지 정보가 지워지고 파일을 매번 새로운 것으로 처리합니다. 파일이 이미로드되어 있지 않다면로드하는 일종의 수표를 넣어야합니다. 그렇지 않은 경우 Play 메서드를 호출하기 위해서는 Player.Play()을 호출해야합니다.

또한 선택한 항목을 전환 할 때 Player.Close으로 전화해야한다는 점에 유의하십시오. 이렇게하면 Play 메서드가 다른 파일을로드해야한다는 것을 알 수 있습니다.

public void Play() 
{ 
    try 
    { 
     // Check if the player already has a file loaded, otherwise load it. 
     if(Player.Source == null) { 
      var audio = Tpv.GetAudio(SelectedTpv.TpvId); 
      var file = Path.GetTempFileName().Replace(".tmp", ".wma"); 
      File.WriteAllBytes(file, audio); 

      Player.Open(new Uri(file, UriKind.Absolute)); 
     } 

     Player.Play(); 
     IsPlaying = true; 

    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(String.Format("Failed to play audio:\n{0}", ex.Message), "Failure", 
     MessageBoxButton.OK, MessageBoxImage.Error); 

     Console.WriteLine(ex.Message); 
    }   
} 
+0

답장을 보내 주셔서 감사합니다. 나는 똑같은 생각을했지만, 그것은 나를 위해 작동하지 않습니다. 재생을 누르면 처음부터 재생됩니다. 어쩌면 일부 설정이 누락 되었습니까? –

+0

정확히 어떤 유형의 미디어 파일을 재생하는지 잘 모르겠습니다. 스트리밍 오디오 인 경우 다시 시작하는 것을 허용하지 않을 수 있습니다. 이 경우 일시 중지는 중지를 누르는 것과 같습니다. 여러분은 사용중인 오디오 포맷에 대한 문서를 참고해야하고 코드를 디버그하여'CanPause'의 값이'MediaPlayer'에 대한 것이고'Pause '를 클릭했을 때'Position'의 값을 알아야 할 것입니다. – mclark1129

+0

wma 파일이며 CanPause가 true이고 Position에 값이 있습니다. 그리고 WindowsMediaPlayer에서 .wma 파일을 재생하면 멈추고 다시 시작할 수 있습니다. –

관련 문제