4

Hi Developers,

If we save the recorded voice as a mp3 file. we get the error while opening the file as Windows Media Player cannot play the file. The Player might not support the file type or might not support the codec that was used to compress the file.

Please Give a Solution to overcome this Issue ....

Here is My Source code

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

my Source Code For UPLOADING A AUDIO TO PHP SERVER:

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");
        }
    }
Flexo
  • 87,323
  • 22
  • 191
  • 272

1 Answers1

1

First of all Windows Phone does not allow to record .mp3 files. So, the .mp3 file that you are saving will not be played by Windows Phone player.

Have a look at this. This demo is working fine for recording .wav file.

If you wish to save other formats like .aac,.amr then user AudioVideoCaptureDevice class.

  • Hi, DotNet Weblineindia Yes,i Accept your Answer how to upload the recorded wav file to Php server ? – PremNath RajaSekaran Apr 18 '14 at 07:09
  • 1
    Hi, you need to create a multipart webservice at server and then upload byte data of your sound from your device. Receive that data at server side and then save it as .wav file on server. –  Apr 19 '14 at 07:11
  • DotNet Weblineindia ,OK if i save in isolated storage mp3 saved if i upload to server it doesn't get played.i tried like this here , Sorry i Can't able to Copy the Code and Display in Comment Page So i Posted my Source Code for UPLOADING A AUDIO TO PHP SERVER as Answer Plz Check it and Reply .... – PremNath RajaSekaran Apr 19 '14 at 10:48