using NAudio.Lame;
using NAudio.Wave;
using System;
using System.IO;
public class Sound_Record
{
public WaveIn waveSource = null;
static LameMP3FileWriter waveFile;
string Sound_Card_name = " ";//录制设备名
FileStream nStream;
BufferedStream buffers;
//MMDevice enumerator;
/// <summary>
/// 开始录音
/// </summary>
public void StartRec()
{
waveSource = new WaveIn();
waveSource.WaveFormat = new WaveFormat(44100,16, 2);
waveSource.DataAvailable += new EventHandler<WaveInEventArgs>(waveSource_DataAvailable);
waveSource.RecordingStopped += new EventHandler<StoppedEventArgs>(waveSource_RecordingStopped);
nStream = new FileStream(@"love.mp3", FileMode.Create);
buffers = new BufferedStream(nStream, 2048);
//将数据写入文件流以MP3的格式
waveFile = new LameMP3FileWriter(buffers, waveSource.WaveFormat,128);
//遍历本机的可录制音频数据的设备,查找自己选定的进行设置
//如果不进行选定则只要是打开的录制设备都进行音频录制
for (int deviceid = 0; deviceid < WaveIn.DeviceCount; deviceid++)
{
var capabilities = WaveIn.GetCapabilities(deviceid);
if (capabilities.ProductName.StartsWith(Sound_Card_name))
{
//设置录制的设备是哪一个
waveSource.DeviceNumber = deviceid;
}
}
waveSource.StartRecording();
}
/// <summary>
/// 停止录音
/// </summary>
public void StopRec()
{
waveSource.StopRecording();
if (waveFile != null)
{
waveFile.Dispose();
waveFile = null;
}
if (waveSource != null)
{
waveSource.Dispose();
waveSource = null;
}
buffers.Close();
buffers.Dispose();
nStream.Close();
nStream.Dispose();
}
// 要录制的设备名
public void Sound_Card(String sound_cards)
{
Sound_Card_name = sound_cards;
}
/// <summary>
/// 开始录音回调函数
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void waveSource_DataAvailable(object sender, WaveInEventArgs e)
{
if (waveFile != null)
{
//这里可以拿到PCM流数据
waveFile.Write(e.Buffer, 0, e.BytesRecorded);
}
}
/// <summary>
/// 录音结束回调函数
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void waveSource_RecordingStopped(object sender, StoppedEventArgs e)
{
if (waveSource != null)
{
waveSource.Dispose();
waveSource = null;
}
if (waveFile != null)
{
waveFile.Dispose();
waveFile = null;
}
}
}
C# 以MP3的格式将录制的音频数据写入文件流
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.