【问题标题】: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);
    };

提前谢谢.. ;)

【问题讨论】:

    标签: c# naudio


    【解决方案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?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-17
    • 2016-04-03
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多