写入文件时压缩音频
Posted
技术标签:
【中文标题】写入文件时压缩音频【英文标题】:Compress Audio upon writing to file 【发布时间】:2013-03-11 01:20:16 【问题描述】:我正在尝试从声卡发出的音频创建一个录音机,这是我迄今为止的进展,问题是保存到文件时录制的音频太大,就像一首歌曲可以达到数百兆字节。
这是我的代码
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);
;
提前谢谢.. ;)
【问题讨论】:
【参考方案1】:使用 naudio dll 试试这个
Using NAudio.Wave; Using NAudio.Wave.SampleProviders;Using NAudio.Lame
Private void WaveToMP3(int bitRate = 128)
String waveFileName = Application.StartupPath + @"\Temporal\mix.wav";
String mp3FileName = Application.StartupPath + @"\Grabaciones\ " + Strings.Format(DateTime.Now, "dd-MM-yyyy.HH.mm.ss") + ".mp3";
Using (var reader = New AudioFileReader(waveFileName))
Using (var writer = New LameMP3FileWriter(mp3FileName, reader.WaveFormat, bitRate))
reader.CopyTo(writer);
reader.Close();
【讨论】:
代码示例看起来很有希望并且可能对 OP 有所帮助,但如果它是在 C# 中可以改进(因为这就是问题的标记)。 哇 8 年了,谢谢@Gabriela【参考方案2】:您不能通过保存扩展名为 .MP3 的 WAV 文件来制作 MP3 文件(这就是您在此处所做的)。您需要选择机器上可用的编码器,然后通过它传递音频。我在this article 中详细介绍了如何使用 NAudio 执行此操作。
【讨论】:
我有将结果编码为mp3的想法,但我总是收到错误请选择一个PCM WAV文件进行编码。所以可能创建的wav文件没有完成?还是没有正确格式化为 wav? 当waveInSel.DataAvailable中的数据可用时,是否有任何代码sn-p可以压缩m.Buffer?以上是关于写入文件时压缩音频的主要内容,如果未能解决你的问题,请参考以下文章