如何使用NAudio获取计算机上所有录制设备的列表?当你想要录制时,你必须给它你想要使用的设备的索引,但是没有办法知道它是什么设备.我希望能够选择Mic,Stereo Mix等.
我希望能够通过NAudio.WaveIn从麦克风设备获取输入,然后通过NAudio.WaveOut将精确输入输出到输出设备.
我该怎么做?
我一直在努力解决这个问题很长一段时间,我找不到一个有效的解决方案.
我有一个wav文件(16位PCM:44kHz 2通道),我想为两个通道中的每一个提取两个数组的样本.据我所知,NAudio库中不存在直接的方法,所以我尝试运行以下代码来读取一些隔行扫描的样本,但缓冲区数组保持为空(只是一堆零):
using (WaveFileReader pcm = new WaveFileReader(@"file.wav"))
{
byte[] buffer = new byte[10000];
using (WaveStream aligned = new BlockAlignReductionStream(pcm))
{
aligned.Read(buffer, 0, 10000);
}
}
Run Code Online (Sandbox Code Playgroud)
任何有关这方面的帮助将非常感激.
我是NAudio和C#的新手,我设法创建了一个简单的MP3播放器,你可以选择一个文件并播放它.它还有一个播放/暂停按钮.
我现在想添加一个搜索栏,但不知道如何做到这一点.波形样式的搜索条也可以吗?
openButton单击处理程序
private void openButton_Click(object sender, EventArgs e)
{
OpenFileDialog open = new OpenFileDialog();
open.Filter = "Audio File|*.mp3;";
if (open.ShowDialog() != DialogResult.OK)
return;
CloseWaveOut(); // disposes the waveOutDevice and audiofilereader
waveOutDevice = new WaveOut();
audioFileReader = new AudioFileReader(open.FileName);
waveOutDevice.Init(audioFileReader);
waveOutDevice.Play();
pauseButton.Enabled = true;
}
Run Code Online (Sandbox Code Playgroud) 我有一个使用NAudio从mp3转换为wav的项目.(使用WaveFormatConversionStream.CreatePcmStream()方法)
它在我的开发机器上工作正常,但现在我正在一个新的服务器上尝试它并抛出这个错误:
NAudio.MmException:NoDriver
在NAudio.WmException.Try(MmResult结果,字符串函数)
上调用acmFormatSuggest ,
位于NAudio.Wave.Wave.WaveFormatConversionStream.CreatePcmStream(WaveStream sourceStream )的NAudio.Wave.Compression.AcmStream.SuggestPcmFormat(WaveFormat compressedFormat )
我假设NAudio需要一些不在新服务器上的依赖.它是什么,我应该从哪里安装它?
Server是一个刚孵化的Amazon EC2 Windows 2008 32位实例,安装了"Web服务器"和"app server"角色.
我想用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);
}
Run Code Online (Sandbox Code Playgroud)
但是当我播放输出文件时,声音只是嘶嘶声.我的代码是正确的还是错的?
如果我将WaveFormat设置为WaveFormat(44100,16,1),它可以正常工作.
谢谢.
我有一个使用NAudio的音频播放器,我想为每个频段显示实时强度.
我为每个1024个样本块触发了一个事件:
public void Update(Complex[] fftResults)
{
// ??
}
Run Code Online (Sandbox Code Playgroud)
我想要的是一组数字,表示每个频段的强度.让我们说我想将窗口划分为16个波段.
例如,当有更多低音频率时,它可能如下所示:
????????????????
????????????????
????????????????
????????????????
????????????????
????????????????
Run Code Online (Sandbox Code Playgroud)
如果可以使用该数据,我应该将什么放入该事件处理程序?
来自(Complex [])的数据已经通过FFT进行了转换.这是一个立体声流.
第一次尝试:
double[] bandIntensity = new double[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
public void Update(Complex[] fftResults)
{
// using half fftResults because the others are just mirrored
int band = 0;
for (int n = 0; n < fftResults.Length/2; n++)
{
band = (int)((double)n / (fftResults.Length / …Run Code Online (Sandbox Code Playgroud) 我是NAudio的新手,我正在尝试编写一个小程序,用于记录麦克风中的一些音频并将其写入Wave文件.当我在程序的Main函数中调用recordStuff()函数时,程序没有通过WaveIn对象的构造,并且程序死于InvalidOperationException,其中包含消息"使用WaveInEvent在后台线程上记录" .知道NAudio的人可能会告诉我这意味着什么吗?我试过在它自己的线程中调用recordStuff()函数,但我最终得到了相同的结果.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NAudio.Wave;
namespace SimpleWave
{
class Recorder
{
public Recorder()
{
writer = new WaveFileWriter("C:\\Users\\Paul\\Desktop\\yeah.wav", new NAudio.Wave.WaveFormat(44100, 1));
}
public static List<byte> buff = new List<byte>();
public static WaveFileWriter writer;
public void recordStuff()
{
// WaveIn Streams for recording
WaveIn waveInStream;
waveInStream = new WaveIn();
waveInStream.DeviceNumber = 0;
waveInStream.WaveFormat = new WaveFormat(44100, 2);
writer = new WaveFileWriter(@"C:\Users\Paul\Desktop\this.wav", waveInStream.WaveFormat);
waveInStream.DataAvailable += new EventHandler<WaveInEventArgs>(waveInStream_DataAvailable);
waveInStream.StartRecording();
}
public void waveInStream_DataAvailable(object sender, WaveInEventArgs e) …Run Code Online (Sandbox Code Playgroud) 我一直在寻找答案,我只能找到一些零碎的东西.我想要做的是加载多个mp3文件(暂时合并它们),然后使用静音检测将它们分割成碎片.
我的理解是我可以使用Mp3FileReader,但问题是:1.如何从mp3文件中读出20秒的音频?我是否需要阅读20次阅读器.WaveFormat.AverageBytesPerSecond?或者可能继续阅读框架,直到Mp3Frame.SampleCount/Mp3Frame.SampleRate的总和超过20秒?2.我如何真正发现沉默?我会查看相应数量的连续样本,以检查它们是否都低于某个阈值.但是我如何访问样本,无论它们是8位还是16位,单声道还是立体声等?我可以直接解码MP3帧吗?3.在示例10465处检测到静音后,如何将其映射回mp3帧索引以执行切割而无需重新编码?
byte[] bytes = new byte[1024];
Run Code Online (Sandbox Code Playgroud)
假设bytes是一个充满音频原始数据的数组.
如何使用WaveOut对象播放此字节数组?
_waveOut.Init(bytes); // <- Error: cannot resolve method.
_waveOut.Play();
Run Code Online (Sandbox Code Playgroud)