2012-02-07 3 views
1

나는 MP3가 재생되지 않지만 WCF, 언어 C#을 사용하여 실버 라이트로 오디오 파일을 재생하려고하는데, 내 앱에서 오류가 발생하지 않습니다.실버 라이트로 재생되지 않는 오디오 파일

stream fileStream; 
private void DownloadMusic_Click(object sender, RoutedEventArgs e)//this is the button that plays the music 
    { 
     FileServiceClient FSC = new FileServiceClient(); 
     FSC.DownloadTestCompleted += new EventHandler<DownloadTestCompletedEventArgs>(FSC_DownloadTestCompleted); 
     FSC.DownloadTestAsync(FileSearch.Text); 
    } 
void FSC_DownloadTestCompleted(object sender, DownloadTestCompletedEventArgs e) 
    { 
     FileObject fileObject; 
     if (e.Error == null) 
     { 
      if (e.Result != null) 
      { 
       fileObject = e.Result; 
       fileStream = new MemoryStream(fileObject.FileStream); 
       mediaElement1.SetSource(fileStream); 
       mediaElement1.AutoPlay = false; 
       mediaElement1.Play(); 
       ResultBlock.Text = "Song is playing . . ."; 
      } 
      else 
      { 
       ResultBlock.Text = "Song could not be found"; 
      } 
     } 
    } 

서비스 :

public FileObject DownloadTest(string fileName) 
    { 
     FileStream fileStream = null; 
     BinaryReader reader = null; 
     string filePath = ""; 
     byte[] fileBytes; 

     try 
     { 
      filePath = Path.Combine(HttpContext.Current.Server.MapPath("."), "Pictures", fileName); 

      if (File.Exists(filePath)) 
      { 
       fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read); 
       reader = new BinaryReader(fileStream); 
       fileBytes = reader.ReadBytes((int)fileStream.Length); 

       return new FileObject() { FileName = fileName, FileStream = fileBytes }; 
      } 
      return null; 
     } 
     catch (Exception) 
     { 
      return null; 
     } 
    } 

인터페이스 : 모든 도움을 이해할 수있을 것이다

namespace WCF_Silverlight_UploadFile.Web 
{ 
    [ServiceContract] 
    public interface IFileService 
    { 

    [OperationContract] 
    bool UploadTest(FileObject file); 

    [OperationContract] 
    FileObject DownloadTest(string fileName); 

    } 

[DataContract] 
public class FileObject 
{ 
    [DataMember] 
    public string FileName { get; set; } 

    [DataMember] 
    public byte[] FileStream { get; set; } 

    [DataMember] 
    public string FileType { get; set; } 
} 
} 

을 여기

내가 지금까지있는 것입니다. 감사합니다.

답변

0

어떻게 든 .AutoPlay을 true로 변경했습니다. 나는 이유를 이해할 수는 없지만 효과가있다. 그러나 음악이 재생되기 전에 2 초의 지연이 있습니다.

mediaElement1.AutoPlay = true; 

도움 주셔서 감사합니다.

1

mediaElement1.SetSource(fileStream); 앞에 fileStream.Seek(0, SeekOrigin.Begin); 진술을 넣으십시오.

코드는 다음과 같아야합니다

fileObject = e.Result; 
fileStream = new MemoryStream(fileObject.FileStream); 
fileStream.Seek(0, SeekOrigin.Begin); 
mediaElement1.SetSource(fileStream); 
mediaElement1.AutoPlay = false; 

MSDN에 대한 자세한에 대한 Seek()을 읽어보십시오.

도움이 될 수 있습니다.

+0

여전히 mediaElement1.SetSource (fileStream)와 함께 mp3가 재생되지 않습니다. 지금 seek()을 살펴볼 것입니다. –

+0

내 대답이 업데이트 되었습니까? 같은 것을 시도 했습니까? –

+0

언제 작동하는지 알려주세요. –

관련 문제