标签: naudio

如何使用 NAudio 实时计算 FFT(ASIO 输出)

我正在对吉他(小提琴)英雄进行克隆编程,作为本学年的期末项目。

这个想法是从我的电小提琴中获取输入,通过 FFT 对其进行分析,进行一些逻辑和绘图,然后通过扬声器输出。也许并行线程中的一些步骤。

我已经实现了 Asio 低延迟输入输出,但在实现实时 FFT 时遇到了很大的问题。

这是设置 asioOut 和 SampleAggregator 的代码。样本聚合器应存储每次调用 AudioAvailable() 时添加的样本,并在样本数量超过 fftLength 时触发 FFT 计算。

private static int fftLength = 8192;
private SampleAggregator sampleAggregator = new SampleAggregator(fftLength);

void asioStartPlaying(object sender, EventArgs e)
{
    sampleAggregator.PerformFFT = true;
    sampleAggregator.FftCalculated += new EventHandler<FftEventArgs>(FftCalculated);
    var asioOut = new AsioOut();
    BufferedWaveProvider wavprov = new BufferedWaveProvider(new WaveFormat(48000, 1));
    asioOut.AudioAvailable += new EventHandler<AsioAudioAvailableEventArgs> (asio_DataAvailable);
    asioOut.InitRecordAndPlayback(wavprov, 1, 25);
    asioOut.Play();
}

void asio_DataAvailable(object sender, AsioAudioAvailableEventArgs e)
{
    byte[] buf = new byte[e.SamplesPerBuffer*4];

    for (int …
Run Code Online (Sandbox Code Playgroud)

c# fft naudio asio

5
推荐指数
1
解决办法
1万
查看次数

使用Vorbis和NAudio播放OGG文件

我正在尝试使用 NVorbis 和 NAudio 播放 OGG 文件流,如文档中所述,我正在尝试访问 VorbisWaveReader 类,但没有成功,这是我的代码:

using System;
using System.Collections.Generic;
using System.Text;
using NVorbis;
using NAudio;

namespace Paradise
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var vorbis = new NVorbis.NAudioSupport.VorbisWaveReader(@"C:\PATH\TO\OGG\FILE.ogg"))
            using (var waveOut = new NAudio.Wave.WaveOut())
            {
            waveOut.Init(vorbis);
            waveOut.Play();
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

type or namespace name 'VorbisWaveReader' does not exist in the namespace 'NVorbis.NAudioSupport'
Run Code Online (Sandbox Code Playgroud)

它看起来非常基本并且应该可以工作,我可以在源代码中看到代码中存在 VorbisWaveReader,你能帮我完成这个任务吗?

谢谢!

c# ogg naudio vorbis

5
推荐指数
1
解决办法
5463
查看次数

如何将内存中的wav文件转换为mp3?

我有一个在 Asp.Net MVC 5 框架之上使用 C# 编写的应用程序。

我的目标是调用第三方服务来下载波形文件。然后我想把这个文件转换成mp3。最后,我想将 mp3 文件返回为 (byte[]),以允许用户直接从内存下载它。

这是我的代码最终的结果,允许用户从内存下载转换后的文件

public ActionResult Download(int? id)
{

    // Download and convert the file
    // the variable "someUri" is generated based on the provided id value
    byte[] filedata = ConvertToMp3(someUri);

    var cd = new System.Net.Mime.ContentDisposition
    {
        FileName = "filename.mp3",
        Inline = true,
    };

    Response.AppendHeader("Content-Disposition", cd.ToString());

    return File(filedata, "audio/mpeg"); 
}
Run Code Online (Sandbox Code Playgroud)

但我对该方法有疑问ConvertToMp3

我正在使用NAudio库来转换文件。到目前为止,这是我的代码

public void ConvertToMp3(Uri uri)
{
    using (var client = new WebClient())
    {
        byte[] file = client.DownloadData(uri); …
Run Code Online (Sandbox Code Playgroud)

c# mp3 file-conversion naudio lamemp3

5
推荐指数
1
解决办法
8540
查看次数

如何将 NAudio 添加到我的项目中?

所以,如果这是一个愚蠢的问题,我很抱歉,但我一直在研究音频,我打算尝试一下 NAudio,所以我访问了该网站(顺便说一句,该网站在 Chrome 中被阻止),并下载了它。然后我就在文件里找啊找啊。大多数文件夹甚至不包含任何.dll文件,而那些包含的文件夹也没有可供参考的文件。然后我回到网站并环顾四周,我在互联网上搜索并搜索了与“如何将 NAudio 添加到您的项目”或“如何链接 NAudio”相关的内容,我想出了没有什么。

如何将 NAudio 添加到我的项目中?

c# dll naudio

5
推荐指数
1
解决办法
8273
查看次数

当扬声器静音时,WasapiLoopbackCapture 在某些设备上会收到静音

我正在使用NAudio 库,并使用其 WasapiLoopbackCapture 以非常简单的方式记录“您听到的内容”:

        var outputFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "NAudio");
        Directory.CreateDirectory(outputFolder);
        var outputFilePath = Path.Combine(outputFolder, "recorded.pcm");

        var loopback = new WasapiLoopbackCapture();
        var fileWriter = new WaveFileWriter(outputFilePath, loopback.WaveFormat);
        loopback.RecordingStopped += (s, a) => { fileWriter.Dispose(); };
        loopback.DataAvailable += (object? sender, WaveInEventArgs args) =>
        {
            fileWriter.Write(args.Buffer, 0, args.BytesRecorded);
        };
Run Code Online (Sandbox Code Playgroud)

然后我在 YouTube 上播放视频并将扬声器静音。

在大多数设备上,这种方法效果很好,并且无论扬声器是否静音,生成的文件都会包含设备上正在播放的音频。

但在某些设备中,当扬声器静音时,接收到的音频因此文件内容只是静音。

我不确定发生了什么或如何解决它,我尝试更新驱动程序并尝试创建我自己的 WasapiLoopbackCapture 版本来更改音频设备等,但目前没有任何效果。

任何人都知道这里发生了什么以及我如何在所有设备上实现这一目标?

以下是发生不良行为的设备示例:

ACER Aspire 3 A315-23-R8T0
Windows 10 Pro 22H2 Build 19045.3208
Realtek(R) Audio
Driver Provider: Microsoft
Driver Version: 10.0.19041.1
Run Code Online (Sandbox Code Playgroud)

作为参考,我也在 NAudio 上发布了该问题 …

c# windows audio naudio wasapi

5
推荐指数
0
解决办法
66
查看次数

NAudio演示不再工作了

我只是试图运行NAudio演示,我得到一个奇怪的错误:

System.BadImageFormatException: Could not load file or a
ssembly 'NAudio, Version=1.3.8.0, Culture=neutral, PublicKeyToken=null' or one o
f its dependencies. An attempt was made to load a program with an incorrect form
at.
File name: 'NAudio, Version=1.3.8.0, Culture=neutral, PublicKeyToken=null'
   at NAudioWpfDemo.AudioGraph..ctor()
   at NAudioWpfDemo.ControlPanelViewModel..ctor(IWaveFormRenderer waveFormRender
er, SpectrumAnalyser analyzer) in C:\Users\Admin\Downloads\NAudio-1.3\NAudio-1-3
\Source Code\NAudioWpfDemo\ControlPanelViewModel.cs:line 23
   at NAudioWpfDemo.MainWindow..ctor() in C:\Users\Admin\Downloads\NAudio-1.3\NA
udio-1-3\Source Code\NAudioWpfDemo\MainWindow.xaml.cs:line 15

WRN: Assembly binding logging is turned OFF.
To enable assembly bind failure logging, set the registry value [HKLM\Software\M
icrosoft\Fusion!EnableLog] (DWORD) to 1. …
Run Code Online (Sandbox Code Playgroud)

.net c# audio naudio

4
推荐指数
1
解决办法
1517
查看次数

使用NAudio解码mu-law音频

我正在尝试使用NAudio将mu-law编码的音频解码为pcm音频。我的服务发布了原始mu-law编码的音频字节,并且我从NAudio收到一个错误,即数据没有RIFF标头。我需要以某种方式添加它吗?我使用的代码是:

WaveFileReader reader = new WaveFileReader(tmpMemStream);
using (WaveStream convertedStream = WaveFormatConversionStream.CreatePcmStream(reader))
{
    WaveFileWriter.CreateWaveFile(recordingsPath + "/" + outputFileName, convertedStream);
}
Run Code Online (Sandbox Code Playgroud)

我还将原始数据保存到磁盘,并在Matlab中进行解码,这没有问题。谢谢。

.net c# audio naudio

4
推荐指数
1
解决办法
4083
查看次数

如何将NAudio WaveStream写入内存流?

我有一个程序,它接收一个字节数组中的mp3数据.它必须将mp3数据转换为wav格式并将其存储在字节数据中.我正在尝试将NAudio用于此目的.我为此目的使用以下代码.

Stream inputStream = ...;
Stream outputStream = ...;

using (WaveStream waveStream = WaveFormatConversionStream.CreatePcmStream(new Mp3FileReader(inputStream)))
using (WaveFileWriter waveFileWriter = new WaveFileWriter(outputStream, waveStream.WaveFormat))
{
    byte[] bytes = new byte[waveStream.Length];
    waveStream.Read(bytes, 0, waveStream.Length);
    waveFileWriter.WriteData(bytes, 0, bytes.Length);
    waveFileWriter.Flush();
}
Run Code Online (Sandbox Code Playgroud)

当我运行上面的代码时,我收到的所有字节数组都是0.但是如果使用WaveFileWriter将数据直接写入文件,该文件将接收正确的数据.有什么原因?

c# stream naudio

4
推荐指数
1
解决办法
1万
查看次数

MonoDevelop + NAudio + Ubuntu Linux告诉我Winmm.dll未找到?

因此,我尝试将MonoDevelop与NAudio和Ubuntu Linux结合使用,由于某种原因,错误消息指出未找到winmm.dll,因此我尝试下载它,并且“添加引用”对话框声称其不是有效的.NET库。这是我的代码。

using System;
using System.IO;
using Gst;
using GLib;
using Gst.BasePlugins;

using NAudio;
using NAudio.Wave;


namespace record_audio_simple_test
{


class MainClass
{

        //Define class variables
        private NAudio.Wave.WaveFileReader waveFile = null;
        private NAudio.Wave.DirectSoundOut output = null;

        public static void Main (string[] args)
        {
            WaveFileReader waveFile = new WaveFileReader("../../convo47.wav");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它说这行的错误 WaveFileReader waveFile = new WaveFileReader(“ ../../ convo47.wav”);

c# linux ubuntu monodevelop naudio

4
推荐指数
1
解决办法
3173
查看次数

如何获得MIDI事件的准确时间

我正在尝试读取一个MIDI文件,我想在C#中确定它的NoteOn事件的确切时间.
我试图使用绝对时间,但输出类似于256632.
这是多少?这是我的代码行返回时间:

(note as NoteOnEvent).AbsoluteTime
Run Code Online (Sandbox Code Playgroud)

c# midi naudio

4
推荐指数
1
解决办法
2497
查看次数

标签 统计

c# ×10

naudio ×10

audio ×3

.net ×2

asio ×1

dll ×1

fft ×1

file-conversion ×1

lamemp3 ×1

linux ×1

midi ×1

monodevelop ×1

mp3 ×1

ogg ×1

stream ×1

ubuntu ×1

vorbis ×1

wasapi ×1

windows ×1