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的格式將錄製的音頻數據寫入文件流
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.