我的 NAudio 代码中都有哪些错误?
Posted
技术标签:
【中文标题】我的 NAudio 代码中都有哪些错误?【英文标题】:What are the errors in my code with NAudio?我的 NAudio 代码中有哪些错误? 【发布时间】:2018-11-24 13:14:34 【问题描述】:有这样一个任务: 需要执行一个程序。该程序有一个文本框,并且能够打开文本文件并将文件中的文本粘贴到该文本框中。 此外,该程序应录制音频。为此,我使用 NAudio 库。 当您按 CTRL + 1 时,正在录制音频。当您按 CTRL + 2 时,停止录制。 每个文件都按记录号记录。每次输入后数字都会增加。 我正确地实现了程序,我从关于通过 NAudio 在 C# 中录制音频的文章中获取了 NAudio 的代码。按钮事件中有一个编写代码,但我实现了单独的方法。 因此,Visual Studio 会生成一个错误列表。 请帮我弄清楚。 表单文件代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using NAudio.Wave;
using NAudio.FileFormats;
using NAudio.CoreAudioApi;
using NAudio;
namespace RecordBooks
public partial class Form1 : Form
WaveIn waveIn;
WaveFileWriter writer;
string recordFile = "";
int numberRecords = 0;
public Form1()
InitializeComponent();
KeyPreview = true;
KeyDown += Form1_KeyDown;
private void Form1_KeyDown(object sender, KeyEventArgs e)
if (e.Control && e.KeyCode == Keys.D1)
StartRecording();
else if (e.Control && e.KeyCode == Keys.D2)
if (waveIn != null)
StopRecording();
void waveIn_DataAvailable(object sender, WaveInEventArgs e)
if (this.InvokeRequired)
this.BeginInvoke(new EventHandler<WaveInEventArgs>(waveIn_DataAvailable), sender, e);
else
writer.WriteData(e.Buffer, 0, e.BytesRecorded);
void StartRecording()
try
waveIn = new WaveIn();
waveIn.DeviceNumber = 0;
waveIn.DataAvailable += waveIn_DataAvailable;
waveIn.RecordingStopped += new EventHandler(waveIn_RecordingStopped);
waveIn.WaveFormat = new WaveFormat(8000, 1);
recordFile = numberRecords + ".wav";
writer = new WaveFileWriter(recordFile);
waveIn.StartRecording();
catch (Exception ex)
MessageBox.Show(ex.Message);
void StopRecording()
waveIn.StopRecording();
numberRecords += 1;
void waveIn_RecordingStopped(object sender, EventArgs e)
if (this.InvokeRequired)
this.BeginInvoke(new EventHandler(waveIn_RecordingStopped), sender, e);
else
waveIn.Dispose();
waveIn = null;
writer.Close();
writer = null;
void menuNew_Click(object sender, EventArgs e)
richTextBox1.Clear();
numberRecords = 0;
void menuExit_Click(object sender, EventArgs e)
Application.Exit();
void menuOpen_Click(object sender, EventArgs e)
if (openFileDialog1.ShowDialog() == DialogResult.OK && openFileDialog1.FileName.Length > 0)
richTextBox1.LoadFile(openFileDialog1.FileName, RichTextBoxStreamType.PlainText);
numberRecords = 0;
void menuSave_Click(object sender, EventArgs e)
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
richTextBox1.SaveFile(saveFileDialog1.FileName, RichTextBoxStreamType.PlainText);
【问题讨论】:
能否请您显示您遇到的错误? i.paste.pics/2f7a200fbd070b1f2b0a616b29197dca.png 【参考方案1】:您没有使用 关闭方法 StartRecording()。因此,以下所有方法都是 StartRecording 的本地方法,在外部不可见。
void StartRecording()
try
waveIn = new WaveIn();
waveIn.DeviceNumber = 0;
waveIn.DataAvailable += waveIn_DataAvailable;
waveIn.RecordingStopped += new EventHandler(waveIn_RecordingStopped);
waveIn.WaveFormat = new WaveFormat(8000, 1);
recordFile = numberRecords + ".wav";
writer = new WaveFileWriter(recordFile);
waveIn.StartRecording();
catch (Exception ex)
MessageBox.Show(ex.Message);
// <<<-- this was missing
void StopRecording()
waveIn.StopRecording();
numberRecords += 1;
【讨论】:
错误仍然存在 我更新了我的答案以更清楚。您是否收到相同的错误消息?如果它们现在不同,请发布新的(最好为此编辑您的问题而不是添加其他评论,也最好将错误消息添加为文本,而不是图片)。 错误 CS0029 无法将类型“System.EventHandler”隐式转换为“System.EventHandlerwaveIn.RecordingStopped += new EventHandler(waveIn_RecordingStopped);
;将其更改为 waveIn.RecordingStopped += waveIn_RecordingStopped;
并 alco 将 waveIn_RecordingStopped 的方法签名更正为 void waveIn_RecordingStopped(object sender, StoppedEventArgs e)
CS0123 'waveIn_RecordingStopped' 没有重载匹配委托 'EventHandler' RecordBooks 第 86 行以上是关于我的 NAudio 代码中都有哪些错误?的主要内容,如果未能解决你的问题,请参考以下文章