Windows phone 7 播放时出现问题,WP7中录制的音频

Windows phone 7 播放时出现问题,WP7中录制的音频,windows-phone-7,windows-phone-8,windows-phone,windows-phone-7.1,windows-phone-7.8,Windows Phone 7,Windows Phone 8,Windows Phone,Windows Phone 7.1,Windows Phone 7.8,大家好, 如果我们将录制的声音保存为mp3文件。打开文件时出现错误,因为Windows Media Player无法播放该文件。播放器可能不支持该文件类型,或者可能不支持用于压缩该文件的编解码器 请给出解决此问题的方法 这是我的源代码 namespace Windows_Phone_Audio_Recorder { public partial class MainPage : PhoneApplicationPage { MemoryStream m_msAud

大家好,

如果我们将录制的声音保存为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));           
        }
    }
}

首先,Windows Phone不允许录制.mp3文件。因此,您正在保存的.mp3文件将不会由Windows Phone player播放

看一看这个演示,它可以很好地录制.wav文件


如果您希望保存其他格式,如.aac、.amr,然后保存用户类。

您好,DotNet Weblineindia是的,我接受您的答案如何将录制的wav文件上载到Php服务器?您好,您需要在服务器上创建一个多部分Web服务,然后从设备上载声音的字节数据。在服务器端接收数据,然后在server.DotNet Weblineindia上将其保存为.wav文件,如果我将其保存在独立存储中,则可以。如果我上传到服务器,则不会播放mp3。我在这里尝试过这样做,很抱歉,我无法复制代码并显示在评论页面中,所以我发布了将音频上传到PHP服务器的源代码,作为答案Plz检查并回复。。。。
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");
        }
    }