Tag: naudio

使用NAudio从MIDI文件中读取音符

任务是使用NAudio库从MIDI文件中获取所有音符和时间。 到目前为止,我从文件中获取所有笔记,但我无法得到他们的时间。 Note noteOn = new Note(); //custom class Note MidiFile midi = new MidiFile(open.FileName); List tempo = new List(); for (int i = 0; i < midi.Events.Count(); i++) { foreach (MidiEvent note in midi.Events[i]) { TempoEvent tempoE; try { tempoE = (TempoEvent)note; tempo.Add(tempoE); } catch { } if (note.CommandCode == MidiCommandCode.NoteOn) { var t_note […]

NAudio分割mp3文件

我是音频或mp3的新手,正在寻找一种方法来在C#,asp.net中分割mp3文件。 谷歌搜索了3天没有太大的帮助,我希望有人能指出我正确的方向。 我可以用NAudio来完成这个吗? 有没有示例代码? 提前致谢。

如何使用NAudio播放MP3文件

WaveStream waveStream = new Mp3FileReader(mp3FileToPlay); var waveOut = new WaveOut(); waveOut.Init(waveStream); waveOut.Play(); 这引发了一个exception: WaveBadFormat调用waveOutOpen 编码类型是“MpegLayer3”作为NAudio。 如何播放NAudio的mp3文件?

流包装器使Stream可以搜索?

我有一个不可搜索的只读System.IO.Stream实现(并且其Position始终返回0)。 我需要将它发送给在流上执行一些Seek操作(也就是设置Position)的消费者。 这不是一个巨大的寻求 – 比如当前位置的+/- 100。 是否存在现有的Stream包装器,它将为流添加缓冲function以进行简单的Seek操作? 更新:我应该补充一点,我的消费者是NAudio Mp3FileReader。 我真的只需要一种播放(缓慢且无限期)流式MP3的方法。 我认为这是一个错误,NAudio希望能够随意寻找他们的数据源。

使用NAudio更改wav文件(到16KHz和8bit)

我想用NAudio将WAV文件更改为8KHz和8bit。 WaveFormat format1 = new WaveFormat(8000, 8, 1); byte[] waveByte = HelperClass.ReadFully(File.OpenRead(wavFile)); Wave using (WaveFileWriter writer = new WaveFileWriter(outputFile, format1)) { writer.WriteData(waveByte, 0, waveByte.Length); } 但是当我播放输出文件时,声音只是嘶嘶声。 我的代码是正确的还是错的? 如果我将WaveFormat设置为WaveFormat(44100,16,1),它可以正常工作。 谢谢。

如何使用AsioOut使用NAudio录制和播放

我正在尝试使用C# 直接 获得声音输入并以较少的延迟发送输出 。 我正在使用支持ASIO的库NAudio以获得更好的延迟。 特别是,我使用AsioOut对象进行录制,另一个用于使用BufferedWaveProvider初始化的回放, BufferedWaveProvider填充了一个回调函数: OnAudioAvailable ,它允许我使用ASIO缓冲区。 问题是我听到了各种故障和延迟的声音。 我认为问题在于OnAudioAvailable函数,其中缓冲区充满了从声卡输入的数据。 声明: NAudio.Wave.AsioOut playAsio; NAudio.Wave.AsioOut recAsio; NAudio.Wave.BufferedWaveProvider buffer; 播放程序: if (sourceList.SelectedItems.Count == 0) return; int deviceNumber = sourceList.SelectedItems[0].Index; recAsio = new NAudio.Wave.AsioOut(deviceNumber); recAsio.InitRecordAndPlayback(null, 2, 44100); //rec channel = 1 NAudio.Wave.WaveFormat formato = new NAudio.Wave.WaveFormat(); buffer = new NAudio.Wave.BufferedWaveProvider(formato); recAsio.AudioAvailable += new EventHandler(OnAudioAvailable); //Collego l’output col […]

naudio从麦克风录制声音然后保存

我在使用naudio和保存录音方面遇到了一些问题。 我目前使用的代码可以保存wav文件,但是当我打开它时,Windows Media Player会返回错误:“Windows Media Player在播放文件时遇到问题” 我有两个按钮,一个“录制”按钮,按下后会变成停止按钮。 我有一个“保存”按钮,单击该按钮,将记录保存到sample.wav 。 NAudio.Wave.WaveIn sourceStream = null; NAudio.Wave.DirectSoundOut waveOut = null; NAudio.Wave.WaveFileWriter waveWriter = null; private void recordButton_Click(object sender, EventArgs e) { int deviceNumber = sourceList.SelectedItems[0].Index; sourceStream = new NAudio.Wave.WaveIn(); sourceStream.DeviceNumber = deviceNumber; sourceStream.WaveFormat = new NAudio.Wave.WaveFormat(44100, NAudio.Wave.WaveIn.GetCapabilities(deviceNumber).Channels); NAudio.Wave.WaveInProvider waveIn = new NAudio.Wave.WaveInProvider(sourceStream); waveOut = new NAudio.Wave.DirectSoundOut(); waveOut.Init(waveIn); sourceStream.StartRecording(); […]

NAudio fft结果给出所有频率C#的强度

我有一个工作实现NAudio的wasapi环回录制和数据的FFT。 我获得的大部分数据都是应该的,但每隔一段时间(10秒到几分钟的间隔),它几乎在所有频率上都显示振幅。 基本上,图像从右到左滚动,时间和频率从底部的最低频率开始以对数标度进行。 这些线是错误。 据我所知,那些不应该在那里。 我得到音频缓冲区并将样本发送到聚合器(应用汉明窗口),该聚合器实现了NAudio FFT。 在我以任何方式修改它之前检查了数据(FFT结果)(图像不是来自原始FFT输出,而是desibel缩放),确认FFT结果给出了那些线。 我还可以指出图片是用LockBits修改的,所以我认为那里的逻辑有问题,但这就是我查看显示同样问题的FFT输出数据的原因。 好吧,我可能是错的,问题可能在某个地方,我说它不是,但它似乎真的来自FFT或缓冲数据(数据本身或样本的聚合)。 不知怎的,我怀疑缓冲区本身是否像这样被破坏了。 如果有人知道是什么原因造成这种情况我会非常感激! UPDATE 所以我决定绘制整个FFT结果范围而不是它的一半。 它表现出奇怪的一些。 我不确定FFT,但我认为傅立叶变换应该给出一个围绕中间反映的结果。 这当然不是这种情况。 图像是线性比例的,因此图像的精确中间是FFT结果的中间点。 底部是第一个,顶部是最后一个。 我正在播放一个10kHz的正弦波,它给出了两条水平线,但顶部超出了我。 看起来这些线条在图片的底部四分之一处被镜像,所以这对我来说也很奇怪。 更新2 所以我将FFT大小从4096增加到8192再次尝试。 这是我输出正弦频率的输出。 似乎结果反映了两次。 一旦在中间,然后再在上半部和下半部。 现在,巨大的线条已经消失了……看起来这些线条现在只出现在下半部分。 在使用不同的FFT长度进行一些进一步测试之后,该线路中的线条似乎是完全随机的。 更新3 我做过很多测试。 我添加的最新内容是样本重叠,以便在下一个FFT开始时重用示例数组的后半部分。 在汉明和汉恩的窗户上,它给了我很大的强度(就像我发布的第二张照片一样)但不是布莱克曼哈里斯。 禁用重叠可消除每个窗口函数上的最大错误。 即使使用BH窗口,顶部图片中的较小错误仍然存​​在。 我仍然不知道为什么会出现这些线条。 我当前的表单允许控制使用哪个窗口function(前面提到的三个),重叠(开/关)和多个不同的绘图选项。 这允许我在更改时比较所有影响方效果。 我会进一步调查(我很确定我在某些方面犯了一个错误)但是很好的建议非常受欢迎!