NAudio AsioOut + Sockets
我是音频编程和插座编程的新手.我正在尝试使用Naudio Asioout类和套接字通过网络发送吉他信号. 这是接收器和发件人的源代码. 似乎接收器确实从发件人那里获得了字节数组,但我所听到的都是白噪声. 接收器源代码 using System; using System.Net; using System.Net.Sockets; using System.Runtime.InteropServices; using System.Threading; using NAudio.Utils; using NAudio.Wave; using NAudio.Wave.SampleProviders; namespace Reciever { internal class Program { private static Socket Listener; private static Socket Accept
2 2024-01-07
编程技术问答社区
NAudio WasapiLoopbackCapture ComException(0x88890003)。
我正在尝试使用wasapiloopbackcapture类(naudio 1.7.1.17),并以comexception(0x888890003)结束.录制格式为WaveFormat(44100, 16, 2).我的系统上有多个播放设备,并尝试将每个设备设置为具有相同结果的默认设备.我还验证了这些设备中的每种设备都列出为受支持的格式. 控制台输出: WasapiCapture_RecordingStopped. Exception: System.Runtime.InteropServices.COMException (0x88890003): Exception from HRESULT: 0x88890003 at System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo) at NAudio.CoreAudio
8 2024-01-07
编程技术问答社区
用NAudio在特定通道上播放声音
我正在使用Naudio进行声音工作.而且我有具体的任务.我有8个频道声卡.我只能在1、2或更多特定的频道中播放声音.例如,我有此代码: Device = new WaveOut(); var provider = new SineWaveProvider32(); provider.SetWaveFormat(44100, 1); provider.Frequency = 1000f; provider.Amplitude = 1f; Device.DeviceNumber = number; Device.Init(provider); Device.Play(); 此代码在所有频道上播放声音. 我需要改变什么? 解决
4 2024-01-07
编程技术问答社区
声音的FFT频率
在某个时候,在麦克风上开始流动声音定义的频率(500Hz).我怎么知道信号何时开始进入麦克风?为了解决这个问题,我知道我需要使用FFT(快速傅立叶变换).但是我不明白,在FFT频率之后我应该如何接受?我在C#上使用Naudio.我来自麦克风的缓冲区是字节阵列. 解决方案 使用FFT为此是过度的,不是特别合适.解决此类问题的更简单解决方案(音调检测/发作检测)是 goertzel filter . 其他解决方案 确定何时将信号采样到缓冲区是一个编程问题. 与确定采样信号的频率含量无关(使用FFT).查看我的其他问题的答复... 其他解决方案 狭窄的IIR带通滤波器,然后是一个信封检测器可能是一种可能的方法.如果您知道音调的上升时间爆发,则可以尝试的另一件事可能是与匹配的过滤器进行互相关.您还必须校准音频输入信号路径的延迟.
4 2024-01-07
编程技术问答社区
在不使用Windows Media Player的情况下,是否可以获得WMA文件的长度?
我需要找到一种方法来获取WMA文件的长度,而无需使用任何Windows Media Player(WMP)DLL.我找到了使用WMP DLL进行的方法,您可以看到在这里在另一个问题上,我宁愿找到不必使用WMP的方法. 使用double GetMediaDuration(string MediaFilename) { double duration = 0.0; using (FileStream fs = File.OpenRead(MediaFilename)) { Mp3Frame frame = Mp3Frame.LoadFromStream(fs); if (frame != null) { _sampleFrequency = (uint)frame.SampleRate; } while (frame != null) { if (frame.ChannelMode == ChannelMode.Mono) { duration += (double)frame.Sam
4 2024-01-06
编程技术问答社区
从MP3转换流中创建波形流时,收到 "不是WAVE文件-没有RIFF头 "的信息
我正在尝试使用Naudio将MP3转换为波流.不幸的是,我在创建波浪读取器时在第三行上收到错误Not a WAVE file - no RIFF header. var mp3Reader = new Mp3FileReader(mp3FileLocation); var pcmStream = WaveFormatConversionStream.CreatePcmStream(mp3Reader); var waveReader = new WaveFileReader(pcmStream) 这些流不应该正确地工作吗?我的目标是将几个MP3和WAV结合到单个流中,以进行播放和保存光盘(作为WAV). 解决方案 我将以我从未使用过naudio的注释来序言.话虽如此,这里有一个指南查看了API,您无法直接使用Mp3FileReader,因为它不实现ISampleProvider.但是,您 can 使用AudioFileReader. 假设您有要加入的文件名的IEn
6 2024-01-06
编程技术问答社区
NAudio:保留最后一个例子:5s的录音,并随时保存。
我正在使用Naudio作为库来管理音频.我要实现的功能之一是能够连续录制一个(或多个)音频输入并随时能够保存它们. 我认为这可能的方法是保留最后一个EX的圆形缓冲区:音频输入拾取的5s样本. 我还想避免将所有数据保持到启动时,因为我不想过度使用内存. 我尝试了许多解决此问题的方法: 使用圆形缓冲区,并将其提供给" DataAvailable"事件的数据; 使用" Queue"和" BufferedWaveProvider"添加缓冲区并将其转换为样本. 我尝试使用2个" BufferedWaveProvider"并交替填充,具体取决于哪个已满. 我还尝试使用2个波输入和计时器进行录制. 我尝试使用一系列字节,并将其用作圆形缓冲区.我使用" WaveineVent"的" DataAvailable"事件填充了缓冲区. " WaveineVentargs"具有缓冲区,因此我将数据从其中添加到圆形缓冲区中. privat
0 2024-01-06
编程技术问答社区
我如何在没有文件的情况下进行游戏?
我想在不加载/流从文件中加载/流式传输戒指警报. 我可以在代码中嵌入它的信号或音调吗?我正在使用NAudio. 我的目的是通过删除IO动作来提高性能. 我不想使用嵌入式资源. 只有我要在代码中生成环警报. 解决方案 使用Naudio,您可以选择这些选择: 从流中播放文件(内存).您在其他答案中为此提供了代码,实际上,您甚至不需要naudio来完成此任务的原因System.Media.SoundPlayer就足够了). 生成将播放的信号(无需将其保存在某个地方). 播放一连串的声音命令(像我们在上一样,在基本的play上都做过). 生成信号 第一种情况的示例来自 Charles Petzold 在MSDN上(但请看 naudio文档也是): class SineWaveOscillator : WaveProvider16 { double phaseAngle; public SineWaveOscillator(int s
0 2024-01-06
编程技术问答社区
如何在C#中使用NAudio将3个wav文件连接成3个通道的单一文件?
使用C#和Naudio,我有三个Wave文件,我想加入一个带有三个通道的单个波浪文件,每个文件对应于三个输入文件之一.此外,我希望每个Wave文件的音频剪辑从最终流的不同点开始.例如,如果三个波文件的长度为3秒,则为5秒.和2秒钟,输出波文件将长10秒,并且... 频道1包含文件1的3秒钟,然后是7 沉默的秒. 通道2包含3秒的寂静,然后是5秒 文件2的声音,然后是2秒的沉默. 频道3包含8秒的沉默,然后是2秒 文件3. 我一直在为每个文件创建一个WaveChannel32实例,然后使用WaveOffSetStream类,但是我对这种事情是新手,但我没有太大的成功. 有人有任何建议吗? 解决方案 您将通过编写自己的自定义iWaveProvider/waveStream来执行此操作,其输出WoveFormat具有三个通道.它包含您三个输入文件中的每个文件的引用. 然后,在读取方法中,它可以算出所请求的示例数,并从每个源文件中读取适当的数字.然后需要交错
0 2024-01-06
编程技术问答社区
NAudio WaveStream和多通道
我有一个波流,我可以读取waveformat以获取许多通道数.当我从该波源中阅读时,我会读取所有混合的通道的第一个通道或数据吗? 我想执行用户控件以显示波形,但是我不确定我的控件是否正确显示. 解决方案 当您从WaveStream读取时,您正在阅读所有频道样本,一一.首先,您正在阅读第一个通道,第二个样本是第二个通道的第一个样本. 如果将它们放在数组中,则第一个索引是第一个通道,第二个索引是第二个通道,第三个索引是第三个通道.因此,如果您在波形中显示左通道,则应显示索引0、2、4和6,如果要显示正确的通道索引索引1、3、5和7(如果您有一个立体声波浪文件课程).
6 2024-01-05
编程技术问答社区
用Naudio或Win API同时播放多个.wav文件
嗨,所有我都有一个应用程序,该应用程序通过来自不同UDP端口的多个线程同时接收WAV数据: 是否可以同时使用Wave Out API? 同时播放所有接收的WAV数据 是否可以同时使用Naudio同时播放所有收到的WAV数据? Naudio对象是否安全? 同时播放我的意思是,当媒体播放器中播放的文件和YouTube中的某些内容同时播放时,您可以同时听到扬声器的两种声音: 任何帮助或提示将不胜感激.预先感谢. 解决方案 是的,您可以使用多个WaveOut实例(一个用于每个流)进行操作,也可以使用单个浪潮进行操作并自己混合(例如,使用MixingSample -Provider) 其他解决方案 我认为您可以做到. 本教程可以为您提供帮助: 它解释了如何集成视频,但我认为二手库可以播放音频
6 2024-01-05
编程技术问答社区
WPF应用程序,滑块缺少Thumb/Thumb.DragCompleted事件
我正在关注有关如何在WPF应用程序中使用滑块的教程.我创建了一个滑块.该教程试图告诉我,当滑块重新定位时该怎么办=" https://i.stack.imgur.com/dvvjf.png" alt ="在此处输入图像说明"> "拇指"属性在Visual Studio的Intellisense中根本没有显示出来,并在我尝试设置拇指的sub fir时注意错误.DragCompleted事件:"找不到附加属性'在类型的拇指'. 在"属性"窗口中,当我显示滑块的属性时,没有任何关于拇指的话题,甚至滑块都没有显示在事件列表中的拖放事件. 我如何告诉Visual Studio我会挥舞着滑块的拇指来使用我为拇指编码的事件.我必须完全缺少关于拇指的明显的东西,因为我已经搜索了此错误消息,但绝对没有发现. 解决方案 不必担心消息,只需键入即可运行.告诉您是否无法运行代码.这些
6 2024-01-04
编程技术问答社区
将32位浮点音频转换为16位字节数组?
我正在使用Naudio库获得音频,该库返回了32位float[]音频数据.我正在尝试找到一种将其转换为16位byte[]进行播放的方法. private void sendData(float[] samples) { Buffer.BlockCopy(samples, 0, byteArray, 0, samples.Length); byte[] encoded = codec.Encode(byteArray, 0, byteArray.Length); waveProvider.AddSamples(byteArray, 0, byteArray.Length); s.Send(encoded, SocketFlags.None); } 发送到waveProvider的音频正在静止 - 我认为我无法正确转换.如何转换为16位样品的字节阵列? 解决方案 Buffer.BlockCopy 字节数,但是您将其传递到许多元素.由于A fl
6 2024-01-04
编程技术问答社区
用NAudio转换为WAV后,用SoundPlayer播放MP3
我想使用网络使用网络下载的mp3文件 system.media.soundplayer 机制.由于它符合WAV格式,因此需要支持例如 naudio 库 - 我需要将mp3转换为wav. 我想在内存中执行所有操作,因为我需要这样称呼很快,但是我有问题.在下面,我显示了可以按预期工作的代码,但它与文件合作.相反,我需要仅使用内存操作使其正常工作. (1)有效,但涉及磁盘操作: public void Speak(Uri mp3FileUri) { using (var client = new WebClient()) { using (var networkStream = client.OpenRead(mp3FileUri)) { if (networkStream != null) { var temp = Path.GetTempPath
2 2024-01-04
编程技术问答社区
用naudio播放.wav文件,1秒后停止播放
我正在使用C#中的naudio lib,并且想播放一个简单的文件.问题是,播放在1秒后停止.我无法找出这样做的原因. using System; using System.Collections.Generic; using System.Linq; using System.Text; using NAudio.Wave; namespace NAudioTest { class Program { static IWavePlayer waveout; static WaveStream outputStream; static string filename = null; static void Main(string[] args) { waveout = new WaveOut(); filename = "C:\\1.w
2 2024-01-04
编程技术问答社区
如何将系统麦克风音频流传输到附加设备麦克风音频流
我正在尝试连接用于电视通话的USB设备,这些设备具有用于麦克风和扬声器的PNP声音控制器.现在,我有两个扬声器和两个麦克风输入输出. https://i.stack.imgur.com/axvcd.png" alt =" speaker "> .现在,我的动机是将音频流从系统麦克风转移到USB麦克风,从USB扬声器转移到系统扬声器. 我试图用虚拟有线软件解决此问题,但是我需要依靠第三方.使用C#. 可以实现的可能解决方案是什么 我对此一无所知,所以不知道如何开始.谷歌搜索后,我找到了 cs core n音频 可以帮助我我不知道如何. public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) {
4 2024-01-04
编程技术问答社区
Lex聊天机器人C#客户端的语音
我的聊天机器人客户端带有文本,但现在想将其更改为语音,但我不确定如何从麦克风中获取流以获取帖子.对于录制音频,我正在使用naudio,但是在发送内存流时,我会发现一个错误 system.io.io exception:无法关闭流,直到所有字节为 写. 这是我的代码: private void recordAudio() { if (memoryStream == null) memoryStream = new MemoryStream(); sourceStream = new NAudio.Wave.WaveIn(); sourceStream.WaveFormat = new NAudio.Wave.WaveFormat(16000, 1); waveIn = new NAudio.Wave.WaveInProvider(
0 2024-01-03
编程技术问答社区
调用waveOutOpen时发生错误,已经分配了资源。
private void receiveAudio(object sender) { IPEndPoint senderEP = new IPEndPoint(IPAddress.Any, 0); MemoryStream audioDataStream; BufferedWaveProvider bufferedWaveProvider; //RawSourceWaveStream receivedRawAudioData; byte[] receivedAudioData; waveOutStream = new WaveOut(); while (IsAudioTransferActive) { receivedAudi
4 2024-01-03
编程技术问答社区