Windows Phone – Audio recorder

http://rongchaua.net/blog/windows-phone-audio-recorder/

 

 

Audio recorder is a typical application of a mobile phone. Man can use it to record audio from microphone and use it for his ring phone, store audio note or record evidence of crimes as in Hollywood films, etc… Therefore today I decide to write a small audio recorder which should run on any mobile phone using windows phone OS. The application is very small but helpful. You can get source code in the end of this post.

The core of this application is class Microphone of Microsoft.Xna.Framework.Audio which can be used by referencing to Microsoft.Xna.Framework. By declaring a microphone device, setting some predefined features, then I can handle the event BufferReady to record sound section of 1 second from microphone into an array of byte and append it to memory stream.

01Microphone m_micDevice = Microphone.Default;
02  
03private void btnStart_Click(object sender, RoutedEventArgs e)
04{
05    ...
06    m_micDevice.BufferDuration = TimeSpan.FromMilliseconds(1000);
07    m_baBuffer = new byte[m_micDevice.GetSampleSizeInBytes(m_micDevice.BufferDuration)];
08    m_micDevice.BufferReady +=new EventHandler(m_Microphone_BufferReady);
09    m_micDevice.Start();
10}
11  
12void m_Microphone_BufferReady(object sender, EventArgs e)
13{
14    m_micDevice.GetData(m_baBuffer);
15    ...
16    m_msAudio.Write(m_baBuffer,0, m_baBuffer.Length);
17}

When the users click on Stop button, they will be asked for saving the memory stream to IsolateStorageFile

01if (txtAudio.Text != "")
02{
03    IsolatedStorageFile isfData = IsolatedStorageFile.GetUserStoreForApplication();
04    string strSource = txtAudio.Text;
05    int nIndex = 0;
06    while (isfData.FileExists(txtAudio.Text))
07    {
08        strSource = txtAudio.Text + nIndex.ToString().PadLeft(2, '0') + ".wav";
09    }
10  
11    IsolatedStorageFileStream isfStream = new IsolatedStorageFileStream(txtAudio.Text, FileMode.Create, IsolatedStorageFile.GetUserStoreForApplication());
12    isfStream.Write(m_msAudio.ToArray(), 0, m_msAudio.ToArray().Length);
13    isfStream.Close();
14}

So it’s very simple to write an audio recorder in Windows Phone 7. In my recorder I add some data visualizer to notify the user that the recording is going on. This visualizer uses first 100 value of audio data and shows them in a bar chart. These values will vary continuously and make visualizer animating.

01<phoneNavigation:PhoneApplicationPage.Resources>
02    <DataTemplate x:Key="template">
03        <StackPanel Orientation="Horizontal" VerticalAlignment="Bottom">
04            <Rectangle Height="{Binding}" Width="5" Fill="Blue" />
05            <Rectangle Width="2" />
06        </StackPanel>
07    </DataTemplate>
08</phoneNavigation:PhoneApplicationPage.Resources>
09  
10<ItemsControl x:Name="icBar" ItemsSource="{Binding Path=AudioData}"
11    ItemTemplate="{StaticResource template}" Margin="0,6,0,114">
12    <ItemsControl.ItemsPanel>
13        <ItemsPanelTemplate>
14            <StackPanel Orientation="Horizontal"/>
15        </ItemsPanelTemplate>
16    </ItemsControl.ItemsPanel>
17</ItemsControl>

As you can see in order to update record progressing on GUI, I used data binding for ItemsSource property of ItemsControl and update this source each time when the event BufferReady is fired.

01void m_Microphone_BufferReady(object sender, EventArgs e)
02{
03    ...
04    this.Dispatcher.BeginInvoke(() =>
05        {
06            vm.LoadAudioData(m_baBuffer);
07            ...
08        }
09        );
10    ...
11}

The complete source code of this audio recorder you can download here “Windows Phone Audio Recorder“. If the archive is corrupted, see source code here

http://rongchaua.net/Web/Source/Windows%20Phone%20Audio%20Recorder/

 

转载于:https://www.cnblogs.com/nio-nio/archive/2010/09/18/1830496.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值