Tag: naudio

如何将系统mic音频流传输到连接的设备mic音频流

我正在尝试连接用于远程呼叫的USB设备,它具有用于麦克风和扬声器的pnp声音控制器。 现在我有两个扬声器和两个麦克风用于输入输出,如下图所示。 <img src="http://sofzh.miximages.com/c%23/AXVcd.png" alt="扬声器”> 。 现在我的动机是将音频流从系统麦克风传输到USB麦克风,从USB扬声器传输到系统扬声器。 我试图用虚拟有线电视软件来解决这个问题但是我需要依赖第三方。 使用c#可以获得什么样的解决方案。 我对此并不了解,所以不知道如何开始。 谷歌搜索后我找到了 CS核心 N音频 可以帮助我,我不知道如何。 public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { List sources = new List(); for (int i = 0; i < NAudio.Wave.WaveIn.DeviceCount; i++) { sources.Add(NAudio.Wave.WaveIn.GetCapabilities(i)); } sourceList.Items.Clear(); foreach (var source in […]

如何将麦克风(Line-In)和播放设备(扬声器Line-Out)中的音频录制到一个MP3文件中

我正在尝试将麦克风和扬声器的音频录制到一个MP3文件中。 如何在C#中使用NAudio实现这一目标? 我已经从麦克风录制了音频,但我无法弄清楚如何从扬声器录制,然后混合到一个MP3文件。

来自.wav文件的峰值频率

我有一个.wav文件,当我弹吉他音符时由我录制。 然后我使用下面的程序来读取我的.wav文件数据。 我使用了Naudio库。 AudioFileReader readertest = new AudioFileReader(@”E:\song\music.wav”); int bytesnumber = (int)readertest.Length; var buffer = new float[bytesnumber]; readertest.Read(buffer, 0, bytesnumber); for (int i = 0; i < buffer.Length; i++) { Console.Write(buffer[i] + "\n"); } 它输出如下。(输出的一部分)。 0.00567627 0.007659912 0.005187988 0.005706787 0.005218506 0.003051758 0.004669189 0.0007324219 0.004180908 -0.001586914 0.00402832 -0.003479004 0.003143311 -0.004577637 0.001037598 -0.005432129 -0.001800537 -0.005157471 我对这个输出数据包含的内容感到困惑。 我想拍摄音符的峰值频率。 […]

如何在C#中读取.wav文件的比特率

鉴于我有一个.wav文件,在C#中读取其比特率属性的最佳方法是什么。 我试过Shell,并问了一个问题是“比特率”属性是否固定在索引28中? 没有asnwers所以。 此外,我现在相信Shell不是读取音频文件属性的最佳方式。 我研究过不同的开源媒体库,但是找不到多少。 TagLib#:这个工作正常,但有两个问题。 在比特率非常低(如小于30)的某些情况下,它不反映实际比特率,它只返回0.其次,我不确定是否可以将其用于商业用途。 许可证说http://opensource.org/licenses/LGPL-2.1 NAudio:只是不暴露任何属性来读取比特率,所以我必须计算它。 经过研究,我得到了这个公式来计算比特率。 bitrate = Samplerate * Channels * BitsPerSample。 这在大多数情况下都可以正常工作,但是如果某些.wav文件的BitsPerSample = 0则会失败。 是的文件绝对没问题,我可以播放,但BitsPerSample仍为0。 MediaInfo:再次没有直接属性,必须循环遍历音频文件的所有属性,然后搜索“整体比特率”。 而且必须在项目中添加两个dll,一个是.net包装器,另一个是实际的dll。 为这么长的总结道歉,但我不想问“嘿我怎么能得到音频文件的比特率”而不显示我已经做过的事情。 那么,如果你有一个.wav音频文件,你会用什么库/方法来获得比特率?

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

我正在编写吉他(小提琴)英雄的克隆作为本学年的最终项目。 我的想法是从我的电子小提琴中获取输入,通过FFT进行分析,做一些逻辑并绘制并通过扬声器输出。 也许是并行线程中的一些步骤。 我已经实现了Asio低延迟输入输出,但我在实现实时FFT时遇到了很大的问题。 这是一个与sampleAggregator一起设置asioOut的代码。 样本聚合器应存储每次调用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(FftCalculated); var asioOut = new AsioOut(); BufferedWaveProvider wavprov = new BufferedWaveProvider(new WaveFormat(48000, 1)); asioOut.AudioAvailable += new EventHandler (asio_DataAvailable); asioOut.InitRecordAndPlayback(wavprov, 1, 25); asioOut.Play(); } void asio_DataAvailable(object […]

使用Naudio将每个WAV通道保存为单通道WAV文件

我正在尝试将WAV文件(PCM,48kHz,4通道,16位)转换为单通道WAV文件。 我尝试将WAV文件拆分成4个字节数组,就像这个答案一样,并创建了一个WaveMemoryStream,如下所示,但不起作用。 byte[] chan1ByteArray = new byte[channel1Buffer.Length]; Buffer.BlockCopy(channel1Buffer, 0, chan1ByteArray, 0, chan1ByteArray.Length); WaveMemoryStream chan1 = new WaveMemoryStream(chan1ByteArray, sampleRate, (ushort)bitsPerSample, 1); 我在创建WAVE标题时遗漏了什么? 或者更多的是将WAV分成单声道WAV文件?

使用NAudio修剪mp3文件

是否可以使用NAudio修剪MP3文件? 我正在寻找一种方法来采取一个标准的MP3文件,并采取它的一部分,使其成为一个单独的MP3。

NAudio用于播放正弦波的算法,其频率可以实时平滑地改变

到目前为止,我已经实现了在这篇博客文章中找到的算法,但成效有限。 我的程序的概念是初始化正弦波,然后根据鼠标在屏幕上的位置改变频率 – 向上移动鼠标,正弦波变高,反之亦然(基本上是使用鼠标的一种类型仪器)。 到目前为止我所实现的问题是,当正弦波的频率更新时,会发出一声咔哒声,而不是提供平滑的频率扫描,使其听起来像是有离散的频率级别。 我一直在NAudio论坛和这里搜索高低,但似乎没有其他人尝试使用NAudio做这种事情,或者其他任何声音模块 – 所有执行的类似程序类似地使用像Kinect这样的设备使用虚拟midi布线和现有的软件模块,但我想在不依赖外部软件包的情况下实现相同的概念。 我已经在NAudio论坛上发布了有关此问题的代码部分,正如您所看到的,我正在通过MarkHeath的建议来尝试找到解决问题的方法。

我如何使用LAME将wav编码为mp3 c#

我目前正在使用NAudio捕获声音,它只创建一个wav文件。 我正在寻找一种方法,在保存文件之前将其编码为mp3。 我找到了LAME,但是当我尝试添加lame_enc.dll文件时,它说“无法添加引用。请确保该文件是可访问的,这是一个有效的程序集或COM组件”。 任何帮助,将不胜感激。

在NAudio的内存流中将格式从wav更改为mp3

嗨,我试图在内存流中将文本转换为语音(wav)将其转换为mp3然后在用户页面上播放。所以我需要帮助下一步做什么? 这是我的asmx代码: [WebMethod] public byte[] StartSpeak(string Word) { MemoryStream ms = new MemoryStream(); using (System.Speech.Synthesis.SpeechSynthesizer synhesizer = new System.Speech.Synthesis.SpeechSynthesizer()) { synhesizer.SelectVoiceByHints(System.Speech.Synthesis.VoiceGender.NotSet, System.Speech.Synthesis.VoiceAge.NotSet, 0, new System.Globalization.CultureInfo(“en-US”)); synhesizer.SetOutputToWaveStream(ms); synhesizer.Speak(Word); } return ms.ToArray(); } 谢谢。