问题标签 [waveout]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
404 浏览

c++ - WaveOut 程序崩溃

我正在尝试读取原始 .wav 数据并将数据输出到扬声器,主要用于自我实验和教学。我自己想要数据的第二个原因是我可以解析它以尝试分离音高,或者构建均衡器或某种形式的可视化。到目前为止,我已经从正在工作的文件中读取数据,验证了标题和诸如此类的东西,但是后来我转到 WaveOut,它开始搞砸了。我的代码目前是相当意大利面条代码,当然,但这更像是一个初步测试,看看我是否可以这样做。据我现在所知,我的程序在 waveOutWrite() 处崩溃,老实说,我不知道为什么,而且我找不到任何关于如何让 WaveOut 工作的好例子。这是相关的位:

0 投票
1 回答
573 浏览

c# - 记忆样本中的 Naudio 回放会在声音中产生延迟和不美观的间隙

用于 BufferedWaveProvider播放存储在数据库中的音频样本double[]

播放时的音频会产生声音间隙。Consume()样本每 100 毫秒在方法内部发送一次。是否存在WaveOut()播放速度比我们调用Consume()方法快的问题?我们如何同步这个阅读和回放。

0 投票
0 回答
311 浏览

multithreading - waveOutOpen(), waveOutWrite() 给我的线程未记录的消息 1024

声音输出功能给了我意想不到的信息。这是我做错了什么的迹象吗?如果是这样呢?否则是否有一个很好的来源可以解释这些消息可能是什么?

根据 https://wiki.winehq.org/List_Of_Windows_Messages,waveOutOpen() 给了我消息 955 MM_WOM_OPEN 作为记录,然后是未记录的 1024(可能是 DDM_SETFMT、DM_GETDEFID、NIN_SELECT、TBM_GETPOS、WM_PSD_PAGESETUPDLG、WM_USER

在主线程中:

在生成的音频线程中:

waveOutWrite() 没有记录以提供任何消息,但也给了我消息 1024。

0 投票
1 回答
404 浏览

c# - NAudio WaveOut.GetCapabilities().ProductName 返回设备名称中的无效字符

我们的应用程序使用 NAudio WaveOut 将音频设备连接到用户计算机。在这种特殊情况下,用户使用以波兰语运行的 windows 机器。因此,当我们枚举设备时,WaveOut 在设备名称中返回无效字符。

例如。设备名称应为“Głośniki (Urządzenie zgodne ze standardem High Definition Audio)”

但是 WaveOut 返回这样的东西

Gԯ宮iki (Urzڤzenie zgodne ze

可能是 UTF-8 编码的情况,在这种情况下是缺失的。

需要帮助来解决这个问题。

谢谢,

0 投票
1 回答
167 浏览

c# - NAudio 播放样本值远小于记录值

当我使用 waveIn 使用 nAudio 录制时,我得到的缓冲区值很大,我的图表需要缩放到 20 000 左右才能正确显示样本。当我从录制的波形文件中重放此音频并使用 SampleChannel 样本提供程序从 waveOut 捕获样本时,值很小。

文件格式说它给我的值有一个 8 的块对齐,每个样本 32 位(浮点数?)和 2 个通道。这是否意味着应该以某种方式组合 2x4 浮点数以创建每个通道值?

我注意到提供的缓冲区数组中的浮点数是离散的,它们是浮点格式的 3.05175781E-05 的倍数。

我不知道在这里做什么。我是否需要处理 waveout sampleProvider 创建的浮点数?

0 投票
0 回答
163 浏览

c# - WaveOut 在另一个环境中播放另一个媒体时出现口吃

我正在使用 NAudio 库实时流式传输 mp3。我已经准备了一个代码来做到这一点,它通常运行良好,除非另一个媒体正在另一个进程中播放(例如 Youtube、本地 mp3 播放器..),. 那个时候,mp3是口吃的。我不知道为什么会这样。如何解决这个问题呢?

在控制台应用程序中流式传输的代码。复制粘贴,你可以试试。

0 投票
1 回答
595 浏览

c# - 调用 waveOutOpen 的无效参数

我正在尝试使用 NAudio 的 BufferedWaveProvider 来实现 Mp3 流媒体,这里是 Mark Heath 的博客

我已经实现了所有的流式传输,但是我收到了一个带有消息“InvalidParameter calling waveOutOpen”的 MmException。

我看到了这个相关的问题:InvalidParameter calling waveOutOpen MmException,所以我查看了使用以下代码片段获得的 WaveFormat:

这是我从调试器中获取的 WaveFormat:

为了测试这一切,我将一个测试 Mp3 文件加载到 FileStream 中。当我使用 Mp3FileReader 读取整个流时,我决定看看 WaveFormat 的样子,有趣的是,我得到了一个完全不同的 WaveFormat:

在这两种情况下,我查看了流的前 16 个字节,它们是相同的。有什么想法我哪里出错了吗?还是不同的 WaveFormats 是一个红鲱鱼?可能是其他问题吗?

谢谢你的时间!

0 投票
0 回答
547 浏览

c# - WaveOutOpen 在 C# 中的 waveOutClose 之后挂起

我有一个小型 c# 应用程序,它使用 waveout 接口定期调用 waveoutwrite 将音频数据写入声卡。我不使用 NAudio,因为我需要使用 8192 字节的固定缓冲区大小。

我在一个名为 WaveNative 的包装类中使用 mmdll 库:

现在我通过调用打开设备:

这有效,我可以将音频数据写入设备。但是:当声音播放完毕后,我等待回调方法通知我所有的音频缓冲区(我有 2 个,每个 8192 字节)已完成播放:

现在,每当我尝试再次调用 waveOutOpen() 方法时,我的程序都会挂起。它不返回任何错误,它只是挂起。

我究竟做错了什么?

0 投票
3 回答
1482 浏览

c++ - 双缓冲 waveOutWrite() 结结巴巴

【谜底已解开;对于那些寻找解释的人,它在这篇文章的底部]

下面是我尝试使用 WindowswaveOut*()函数编写的 Windows 音调发生器。

尽管实际上按照 MSDN 做了所有事情(例如,应该手动重置的回调事件),但我无法从该死的东西中获得平滑的方波播放——实际上,任何平滑的播放,但为了简单起见,我演示了正方形。缓冲区边界总是以点击来迎接我!看起来 Windows 只是忽略了我使用双缓冲的事实。

生成器本身与缓冲区大小无关,如果我使用更大的缓冲区,无缝播放会持续更长的时间——但是当缓冲区最终结束时,会有一个点击。

帮助。

[更新:]

正如我被告知的那样复制标题,但无济于事:

[实际发生的事情:]

由于 Windows 在我切换缓冲区的那一刻就用完了数据,因此播放一直卡顿。为避免这种情况,您必须在反馈循环开始之前向系统提供两个缓冲区,以便当其中一个缓冲区播放完毕时,下一个缓冲区已经准备好并发送,而您重新填充刚刚退出的缓冲区。

愿迷失的灵魂(就像两天前的我)终于在这里找到清晰的方向=)

说真的,目前这是 Internet 上唯一一个提出实际可行解决方案的页面,它没有使用计时器或任何杂物,而是使用正确的方法。

0 投票
1 回答
333 浏览

c# - 重放 BufferedWaveProvider

我使用 NAudio 从麦克风记录数据,然后我需要播放音频而不编写 wav 文件。

播放/暂停/停止效果很好,但是如何将位置设置回 bwp 的开头并从音频开始播放。

我还不能写 wav 文件,因为我需要播放文件,用滑块导航它,然后用新记录的数据擦除缓冲区的末尾,然后保存修改后的文件。