2013-03-11 168 views
0

我试图从声卡中发出的音频创建一个录音机,这是迄今为止我的进展,问题是录制的音频在保存到文件时如同歌曲一样大,最多可达到数百兆字节。在写入文件时压缩音频

这里是我的代码

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); 
    }; 

感谢;)

回答

0

您不能保存WAV文件带有.MP3扩展使一个MP3文件(该文件就是你在这里做的)。您需要选择机器上可用的编码器,并通过该编码器传递音频。我在this article中详细讨论了如何使用NAudio来做到这一点。

+0

我有这样的想法,将结果编码为mp3,但我总是得到一个错误**请选择一个PCM WAV文件进行编码。**所以也许创建的WAV文件没有完成?或没有正确格式化为WAV? – 2013-03-14 07:05:50

+0

是否有任何代码片断,当数据在** waveInSel.DataAvailable **中可用时,紧凑的m.Buffer? – 2013-03-14 07:25:35