使用NAudio录制wav音频

本文介绍了如何在Unity2019.4.34f1c1环境中使用NAudio库进行音频录制,包括使用WaveInEvent类启动和停止录音,以及WaveFileWriter类存储音频。同时提到需要确保台式电脑已插入耳机才能启用麦克风。
摘要由CSDN通过智能技术生成

NAudio

NAudio官网

环境

Unity2019.4.34f1c1
Window10
NAudio 1.10 .Net 3.5

录制音频

WaveInEvent类可录制音频

  1. StartRecording方法 启用录制
  2. StopRecording方法 停止录制
  3. DataAvailable 录制中回调
  4. RecordingStopped 录制结束回调

WaveFileWriter类可存储音频

Write方法可存储音频

检测麦克风设备数量

WaveIn.DeviceCount 返回音频捕获设备数量

注意

台式电脑,可能需要插入耳机才可以启用麦克风

示例

  1. 检测到麦克风,显示开始录制按钮
  2. 点击开始录制按钮,显示停止录制按钮
  3. 点击停止录制按钮,回到步骤1
using NAudio.Wave;
using System;
using System.IO;
using UnityEngine;

public class RecordNAudio : MonoBehaviour
{
    bool recording;

    string outputFolder;
    string outputFilePath
    {
        get
        {
            return Path.Combine(outputFolder, DateTime.Now.ToString("yyyyMMddHHmmss") + ".wav");
        }
    }

    WaveInEvent waveIn;
    WaveFileWriter writer;

    private void Awake()
    {
        recording = false;

        outputFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "NAudio");

        if (!Directory.Exists(outputFolder))
            Directory.CreateDirectory(outputFolder);

        waveIn = new WaveInEvent();
        waveIn.DataAvailable += Recording;
        waveIn.RecordingStopped += RecordingStopped;

        writer = null;
    }

    private void OnGUI()
    {
        if (recording == false)
        {
            if (WaveIn.DeviceCount > 0)
            {
                if (GUILayout.Button("开始录制"))
                {
                    writer = new WaveFileWriter(outputFilePath, waveIn.WaveFormat);
                    waveIn.StartRecording();
                    recording = true;
                }
            }
            else
                GUILayout.Label("无法启用麦克风,请在主机上插入耳机,尝试启用麦克风");            
        }
        else
        {
            if (GUILayout.Button("停止录制"))
            {
                waveIn.StopRecording();
                recording = false;
            }
        }
    }

    private void Recording(object sender, WaveInEventArgs e)
    {
        if (writer != null)
            writer.Write(e.Buffer, 0, e.BytesRecorded);
    }

    private void RecordingStopped(object sender, StoppedEventArgs e)
    {
        if (writer != null)
            writer.Dispose();
        writer = null;
        waveIn.Dispose();
    }
}

NAudio 是一个 .NET 平台下的音频处理,它可以用来读取、播放、录制、处理和转换音频文件。下面是一些基本的使用方法: 1. 安装 NAudio 包 在 Visual Studio 中,可以通过 NuGet 包管理器安装 NAudio 包。或者也可以从 NAudio 的 GitHub 页面下载源代码并自行编译。 2. 读取音频文件 使用 NAudio 可以很容易地读取音频文件。以下代码演示了如何读取一个 WAV 文件并将其存储到一个缓冲区中: ``` using (var waveStream = new WaveFileReader("audio.wav")) { var buffer = new byte[waveStream.Length]; waveStream.Read(buffer, 0, (int)waveStream.Length); } ``` 3. 播放音频文件 以下代码演示了如何使用 NAudio 播放一个 WAV 文件: ``` using (var waveStream = new WaveFileReader("audio.wav")) { using (var outputDevice = new WaveOutEvent()) { outputDevice.Init(waveStream); outputDevice.Play(); while (outputDevice.PlaybackState == PlaybackState.Playing) { Thread.Sleep(100); } } } ``` 4. 录制音频 以下代码演示了如何使用 NAudio 录制音频并将其保存为 WAV 文件: ``` var waveIn = new WaveInEvent(); waveIn.WaveFormat = new WaveFormat(44100, 16, 1); waveIn.DataAvailable += (sender, args) => { writer.Write(args.Buffer, 0, args.BytesRecorded); }; var writer = new WaveFileWriter("output.wav", waveIn.WaveFormat); waveIn.StartRecording(); ``` 5. 处理音频 NAudio 还提供了一些音频处理功能,例如音量增益、均衡器、混响等等。以下代码演示了如何使用 NAudio 实现一个简单的音量增益器: ``` using (var waveStream = new WaveFileReader("audio.wav")) { var volumeProvider = new VolumeWaveProvider16(waveStream); volumeProvider.Volume = 0.5f; // 将音量增益为原来的一半 using (var outputDevice = new WaveOutEvent()) { outputDevice.Init(volumeProvider); outputDevice.Play(); while (outputDevice.PlaybackState == PlaybackState.Playing) { Thread.Sleep(100); } } } ``` 以上是一些基本的使用方法,更多高级功能可以参考 NAudio 的官方文档。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值