在写入文件时压缩音频
问题描述:
我试图从声卡中发出的音频创建一个录音机,这是迄今为止我的进展,问题是录制的音频在保存到文件时如同歌曲一样大,最多可达到数百兆字节。在写入文件时压缩音频
这里是我的代码
using NAudio.CoreAudioApi;
using NAudio.Wave;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Record_From_Soundcard
{
public partial class frmMain : Form
{
private WaveFileWriter writer;
private WasapiLoopbackCapture waveInSel;
public frmMain()
{
InitializeComponent();
}
private void frmMain_Load(object sender, EventArgs e)
{
MMDeviceEnumerator deviceEnum = new MMDeviceEnumerator();
MMDeviceCollection deviceCol = deviceEnum.EnumerateAudioEndPoints(DataFlow.Render, DeviceState.Active);
cboAudioDrivers.DataSource = deviceCol.ToList();
}
private void btnStopRecord_Click(object sender, EventArgs e)
{
waveInSel.StopRecording();
writer.Close();
}
private void btnStartRecord_Click(object sender, EventArgs e)
{
using (SaveFileDialog _sfd = new SaveFileDialog())
{
_sfd.Filter = "Mp3 File (*.mp3)|*.mp3";
if (_sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
MMDevice _device = (MMDevice)cboAudioDrivers.SelectedItem;
waveInSel = new WasapiLoopbackCapture(_device);
writer = new WaveFileWriter(_sfd.FileName, waveInSel.WaveFormat);
waveInSel.DataAvailable += (n, m) =>
{
writer.Write(m.Buffer, 0, m.BytesRecorded);
};
waveInSel.StartRecording();
}
}
}
}
}
谁能帮助我如何在保存压缩音频?
也许这将是这部分提前..添加
waveInSel.DataAvailable += (n, m) =>
{
writer.Write(m.Buffer, 0, m.BytesRecorded);
};
感谢;)
答
您不能保存WAV文件带有.MP3扩展使一个MP3文件(该文件就是你在这里做的)。您需要选择机器上可用的编码器,并通过该编码器传递音频。我在this article中详细讨论了如何使用NAudio来做到这一点。
我有这样的想法,将结果编码为mp3,但我总是得到一个错误**请选择一个PCM WAV文件进行编码。**所以也许创建的WAV文件没有完成?或没有正确格式化为WAV? – 2013-03-14 07:05:50
是否有任何代码片断,当数据在** waveInSel.DataAvailable **中可用时,紧凑的m.Buffer? – 2013-03-14 07:25:35