4

開發商喜錄製的音頻,問題,而玩,在WP7

如果我們的錄音保存爲MP3文件。由於Windows Media Player無法播放文件,因此在打開文件時出現錯誤。播放器可能不支持文件類型,或者可能不支持用於壓縮文件的編解碼器。

請給一個解決方案來解決這個問題....

這裏是我的源代碼

namespace Windows_Phone_Audio_Recorder 
{ 
    public partial class MainPage : PhoneApplicationPage 
    { 
     MemoryStream m_msAudio = new MemoryStream(); 
     Microphone m_micDevice = Microphone.Default; 
     byte[] m_baBuffer; 
     SoundEffect m_sePlayBack; 
     ViewModel vm = new ViewModel(); 
     long m_lDuration = 0; 
     bool m_bStart = false; 
     bool m_bPlay = false; 
     private DispatcherTimer m_dispatcherTimer; 

     public MainPage() 
     { 
      InitializeComponent(); 

      SupportedOrientations = SupportedPageOrientation.Portrait | SupportedPageOrientation.Landscape;    
      DataContext = vm; 
      m_dispatcherTimer = new DispatcherTimer(); 

      m_dispatcherTimer.Interval = TimeSpan.FromTicks(10000); 

      m_dispatcherTimer.Tick += frameworkDispatcherTimer_Tick; 
      m_dispatcherTimer.Start(); 
      FrameworkDispatcher.Update();   
      //icBar.ItemsSource = vm.AudioData; 
     } 

     void frameworkDispatcherTimer_Tick(object sender, EventArgs e) 
     { 
      FrameworkDispatcher.Update(); 
     }   

     private void btnStart_Click(object sender, RoutedEventArgs e) 
     { 
      m_bStart = true; 
      tbData.Text = "00:00:00"; 
      m_lDuration = 0; 
      m_micDevice.BufferDuration = TimeSpan.FromMilliseconds(1000); 
      m_baBuffer = new byte[m_micDevice.GetSampleSizeInBytes(m_micDevice.BufferDuration)]; 
      //m_micDevice.BufferReady += new EventHandler(m_Microphone_BufferReady); 
      m_micDevice.BufferReady += new EventHandler<EventArgs>(m_Microphone_BufferReady); 
      m_micDevice.Start(); 
     } 

     void m_Microphone_BufferReady(object sender, EventArgs e) 
     { 
      m_micDevice.GetData(m_baBuffer); 
       Dispatcher.BeginInvoke(()=> 
       { 
        vm.LoadAudioData(m_baBuffer); 
        m_lDuration++; 
        TimeSpan tsTemp = new TimeSpan(m_lDuration * 10000000); 
        tbData.Text = tsTemp.Hours.ToString().PadLeft(2, '0') + ":" + tsTemp.Minutes.ToString().PadLeft(2, '0') + ":" + tsTemp.Seconds.ToString().PadLeft(2, '0'); 
       } 
       ); 
      //this.Dispatcher.BeginInvoke(new Action(() => vm.LoadAudioData(m_baBuffer))); 
      //this.Dispatcher.BeginInvoke(new Action(() => tbData.Text = m_baBuffer[0].ToString() + m_baBuffer[1].ToString() + m_baBuffer[2].ToString() + m_baBuffer[3].ToString())); 
      m_msAudio.Write(m_baBuffer,0, m_baBuffer.Length); 
     } 

     private void btnStop_Click(object sender, RoutedEventArgs e) 
     { 
      if (m_bStart) 
      { 
       m_bStart = false; 
       m_micDevice.Stop(); 
       ProgressPopup.IsOpen = true; 
      } 

      if (m_bPlay) 
      { 
       m_bPlay = false; 
       m_sePlayBack.Dispose(); 
      } 
     } 

     private void btnPlay_Click(object sender, RoutedEventArgs e) 
     { 
      m_bPlay = true; 
      m_sePlayBack = new SoundEffect(m_msAudio.ToArray(), m_micDevice.SampleRate, AudioChannels.Mono); 
      m_sePlayBack.Play(); 
     } 

     private void btnSave_Click(object sender, RoutedEventArgs e) 
     { 
      if (txtAudio.Text != "") 
      { 
       IsolatedStorageFile isfData = IsolatedStorageFile.GetUserStoreForApplication(); 
       string strSource = txtAudio.Text + ".wav"; 
       int nIndex = 0; 
       while (isfData.FileExists(txtAudio.Text)) 
       { 
        strSource = txtAudio.Text + nIndex.ToString().PadLeft(2, '0') + ".wav"; 
       } 

       IsolatedStorageFileStream isfStream = new IsolatedStorageFileStream(strSource, FileMode.Create, IsolatedStorageFile.GetUserStoreForApplication()); 
       isfStream.Write(m_msAudio.ToArray(), 0, m_msAudio.ToArray().Length); 
       isfStream.Close(); 
      } 
      this.Dispatcher.BeginInvoke(new Action(() => ProgressPopup.IsOpen = false));   
     } 
    } 
} 

DOTNET的Weblineindia

我的源代碼將音頻上傳到PHP服務器:

public void UploadAudio() 
    { 
     try 
     { 
      if (m_msAudio != null) 
      { 
       var fileUploadUrl = "uploadurl"; 

       var client = new HttpClient(); 
       m_msAudio.Position = 0; 
       MultipartFormDataContent content = new MultipartFormDataContent(); 

       content.Add(new StreamContent(m_msAudio), "uploaded_file", strFileName); 

       // upload the file sending the form info and ensure a result.it will throw an exception if the service doesn't return a valid successful status code 

       client.PostAsync(fileUploadUrl, content) 

       .ContinueWith((postTask) => 
       { 
        try 
        { 
         postTask.Result.EnsureSuccessStatusCode(); 
         var respo = postTask.Result.Content.ReadAsStringAsync(); 
         string[] splitChar = respo.Result.Split('"'); 
         FilePath = splitChar[3].ToString(); 
         Dispatcher.BeginInvoke(() => NavigationService.Navigate(new Uri("/VoiceSlider.xaml?FName=" + strFileName, UriKind.Relative)));       
        } 
        catch (Exception ex) 
        { 
         // Logger.Log.WriteToLogger(ex.Message); 
         MessageBox.Show("voice not uploaded" + ex.Message); 
        } 

       }); 
      } 
     } 
     catch (Exception ex) 
     { 
      //Logger.Log.WriteToLogger(ex.Message + "Error occured while uploading image to server"); 
     } 
    } 

回答

1

首先,Windows Phone不允許記錄.mp3文件。因此,您保存的.mp3文件將不會由Windows Phone播放器播放。

看看this.這個演示工作正常,錄製.wav文件。

如果您希望保存其他格式,例如.aac,.amr,然後用戶AudioVideoCaptureDevice類。

+0

嗨, DotNet Weblineindia是的,我接受你的答案如何上傳記錄的wav文件到Php服務器? –

+1

嗨,你需要在服務器上創建一個multipart webservice,然後從你的設備上傳你的聲音的字節數據。在服務器端接收該數據,然後將其保存爲服務器上的.wav文件。 –

+0

DotNet Weblineindia,好吧,如果我保存在孤立的存儲MP3保存如果我上傳到服務器它不會得到playing.i在這裏嘗試這樣,對不起,我無法複製代碼和顯示在評論頁所以我發佈我的源代碼上傳音頻到PHP服務器作爲答案Plz檢查它並回復.... –