Silverlight中调用麦克风模拟录音机设备,存储为WAV音频

Silverlight中调用麦克风模拟录音机设备,存储为WAV音频,第1张

概述在Silverlight 4中支持了麦克风设置的调用,在本节中我们将调用麦克风设备,然后进行录音,并且将录制的声音存取为Wav音频文件。 第一步、首先我们从AudioSink类派生一个音频接收器类:WavAudioSink。其代码如下所示: public class WavAudioSink:AudioSink { 在Silverlight 4中支持了麦克风设置的调用,在本节中我们将调用麦克风设备,然后进行录音,并且将录制的声音存取为Wav音频文件。 第一步、首先我们从AudioSink类派生一个音频接收器类:WavAudioSink。其代码如下所示:
          public             class       WavAudioSink:AudioSink
{
// 设置需要记录的内存流
private MemoryStream _stream;
设置当前的音频格式 AudioFormat _format;

Stream backingStream
{
get { return _stream; }
}

AudioFormat CurrentFormat
{
_format; }
}

protected overrIDe voID OnCaptureStarted()
{
_stream
= new MemoryStream( 1024 );
}

OnCaptureStopped()
{
}

OnFormatChange(AudioFormat audioFormat)
{
if (audioFormat.WaveFormat != WaveFormatType.Pcm)
throw InvalIDOperationException( " WavAudioSink只支持PCM音频格式 " );

_format
audioFormat;
}

OnSamples( long sampleTime, sampleDuration,
byte [] sampleData)
{
新的音频数据到达,将它们写入流 _stream.Write(sampleData, 0 ,sampleData.Length);
}
}
第二步、然后我们将编写一个保存音频的函数类,以保存读取到的音频数据:
           SaveWAVHelper
{
static SavePcmToWav(Stream rawData,Stream output,AudioFormat audioFormat)
{
ArgumentException( Only PCM Coding is supported. );

BinaryWriter bwOutput
BinaryWriter(output);

-- RIFF 块 bwOutput.Write( RIFF .tochararray());
包的总长度
计算的数据长度加上数据头的长度没有数据
写数据(44 - 4 ("RIFF") - 4 (当前数据)) bwOutput.Write(( uint )(rawData.Length + 36 ));
bwOutput.Write(
WAVE .tochararray());

-- FORMAT 块 fmt FORMAT 块的长度 (Binary,总是 0x10) ) 0x10 );
总是 0x01 ushort 0x01 通道数( 0x01=单声道,0x02=立体声) )audioFormat.Channels);
采样率 (Binary,Hz为单位) )audioFormat.SamplesPerSecond);
字节每秒 )(audioFormat.BitsPerSample * audioFormat.SamplesPerSecond
audioFormat.Channels
/ 8 ));
每个样品字节: 1=8 bit 单声道,2=8 bit 立体声 or 16 bit 单声道,4=16 bit 立体声 audioFormat.Channels 每个样品字节 )audioFormat.BitsPerSample);

-- DATA 块 data DATA数据块的长度 )rawData.Length);
原始PCM数据如下
复位rawData地位,记住它的原点位置
恢复底。 originalRawDataStreamposition rawData.position;
rawData.Seek(
追加到输出流中的所有数据从rawData流 [] buffer [ 4096 ];
int read;
循环读取字节数据 while ((read rawData.Read(buffer,0)">)) > )
{
bwOutput.Write(buffer,read);
}
开始写入数据 rawData.Seek(originalRawDataStreamposition,SeekOrigin.Begin);
}
}
第三步、然后再MainPage.xaml中我们添加三个按钮,分别是开始记录音频、停止录制音频、保存音频文件三个按钮。
          <      GrID x:name      =      LayoutRoot       Background      White      button Content      开始录制       Height      28       HorizontalAlignment      left      
margin
30,15,0 name btnRecord VerticalAlignment top
WIDth
71 Click btnRecord_Click /> 停止录制 150,0)">btnStopRecord btnStopRecord_Click 保存音频 268,0)">btnSaveWav btnSaveWav_Click </ GrID >
第四步、最后在MainPage.xaml.cs代码中我们进行录制、停止、保存音频的 *** 作如下所示:
          partial       MainPage : UserControl
{
MainPage()
{
InitializeComponent();

btnRecord.IsEnabled
true ;
btnStopRecord.IsEnabled
false ;
btnSaveWav.IsEnabled
;
}

声明私有变量 WavAudioSink _wavSink;
CaptureSource _captureSource;
SavefileDialog _savefileDialog SavefileDialog()
{ Filter
Audio files (*.wav)|*.wav };

btnRecord_Click( object sender,RoutedEventArgs e)
{

初始化_captureSource var audioDevice CaptureDeviceConfiguration.GetDefaultAudioCaptureDevice();
_captureSource
CaptureSource() { AudioCaptureDevice audioDevice };

有默认设置的设备且可以用来录制音频 (CaptureDeviceConfiguration.AllowedDeviceAccess ||
CaptureDeviceConfiguration.RequestDeviceAccess())
{
判断当前没有开始录制音频 (_captureSource.State == CaptureState.Stopped)
{
初始化WavAudioSink _wavSink WavAudioSink();
_wavSink.CaptureSource
_captureSource;
开始录制音频 _captureSource.Start();

}
}


btnRecord.IsEnabled
btnStopRecord_Click( 如果当前状态为开始录制,则停止录制 CaptureState.Started)
{
_captureSource.Stop();
}


btnRecord.IsEnabled
btnSaveWav_Click( (_savefileDialog.ShowDialog() )
{
;
}
保存Wav文件 Stream stream _savefileDialog.Openfile();
SaveWAVHelper.SavePcmToWav(_wavSink.backingStream,stream,_wavSink.CurrentFormat);

stream.Close();

MessageBox.Show(
你的音频已经保存 );


btnRecord.IsEnabled
;
}
}
通过以上步骤我们就可以开始调用麦克风录制音频文件了,本实例采用Silverlight 4.0+VS2010编写,如需源码请点击 SL4Audio.zip下载 总结

以上是内存溢出为你收集整理的Silverlight中调用麦克风模拟录音机设备,存储为WAV音频全部内容,希望文章能够帮你解决Silverlight中调用麦克风模拟录音机设备,存储为WAV音频所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1067637.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存