文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Windows Phone – Audio recorder

Windows Phone – Audio recorder

时间:2010-09-18  来源:老潘

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.

view source print?
01 Microphone m_micDevice = Microphone.Default;
02   
03 private 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   
12 void 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

view source print?
01 if (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.

view source print?
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.

view source print?
01 void 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/

 

相关阅读 更多 +
排行榜 更多 +
瓢虫少女

瓢虫少女

飞行射击 下载
潜艇鱼雷

潜艇鱼雷

飞行射击 下载
网络掠夺者

网络掠夺者

飞行射击 下载