问题标签 [directsound]

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 投票
2 回答
314 浏览

audio - 原始声音播放

我研究图像格式已经有一段时间了,我知道图像是一个像素数组(24 位 - 可能是 32 位长)。问题是:声音文件的表示方式是什么?老实说,我什至不确定我应该搜索什么。我也很感兴趣你如何使用这些数据,我的意思是实际播放文件中的声音。对于图像文件,您有各种抽象设备来绘制图像(图形:java,c#,HDC:cpp(win32)等)。我希望我已经足够清楚了。

0 投票
1 回答
7549 浏览

c# - 使用 SlimDX 和 DirectSound (C#) 播放声音

(抱歉,如果这是重复的......我发布但没有看到它实际上进入论坛的证据)

我一直在尝试让 SlimDX DirectSound 正常工作。这是我的代码。它从 wav 文件填充辅助缓冲区,然后在线程循环中交替填充缓冲区的下半部分或上半部分。

它可以很好地播放缓冲区的第一次加载。AutoResetEvents 在它们应该触发时触发,并且填充缓冲区的下半部分和上半部分(使用 Debug 语句验证)。但是在第一次加载缓冲区后播放不会继续。因此,缓冲区的重新填充以某种方式无法正常工作。

想法?

(我使用 DirectSound 是因为它是我发现设置要使用的音频设备的 guid 的唯一方法。我对其他 .NET 友好的方法持开放态度。)

0 投票
1 回答
758 浏览

file - DirectSound 可以播放原始二进制声音文件吗?

我拿了一个用 U-law 编码的二进制文件并将其解码为 PCM。现在我需要玩它。但是,它没有 WAV 标头。

DirectSound 可以播放没有 WAV 标头的原始二进制声音文件吗?

0 投票
1 回答
1000 浏览

c - 使用 DirectSound 播放立体声 PCM

嘿,我有一个使用 DirectSound 制作的简单 16 位 PCM 播放器。但是当它播放时,它似乎只播放一个扬声器而不是两个。

我不知道要准确发布什么代码,所以如果您需要任何代码,您必须告诉我。我可以说我使用创建声音缓冲区,并使用以下方法锁定流:

0 投票
2 回答
1762 浏览

c# - 在 C# 中生成正弦扫描

我想在 C# 中生成一个正弦扫描,我可以在其中定义开始频率、结束频率和扫描持续时间。我查看了播放缓冲区的声音库,例如 DirectSound 和 ASIO。但是由于缓冲区大小限制,当扫描的持续时间足够长以填充多个缓冲区时,我无法弄清楚如何控制扫描的持续时间。任何样本或指南都会非常有帮助。

0 投票
1 回答
5117 浏览

c++ - 修改音频样本缓冲区的音量增益

我想用语音数据增加缓冲区的音量。关键是我正在使用 DirectSound,并且我有一个主缓冲区和一个辅助缓冲区 - 所有流混合都是手动完成的。在语音聊天中,所有参与者都可以有独立的音量级别。我将每个流数据乘以一个值(增益)并将其相加到一个缓冲区。一切正常,但是当我尝试将数据乘以大于 1.0f 的值时 - 我听到一些剪辑或什么。

我试过使用 Audacity 效果压缩器,但这无助于减少奇怪的噪音。

也许我应该以其他方式修改增益?或者只是使用另一种后处理算法?

更新:哇,我刚刚发现了有趣的事情!我在增加音量之前和之后都转储了音频。

这是图片 剪辑的音频

对不起质量 - 我认为这就是声音应该出现的方式(我自己画了红线)。确实看起来值超出了示例数据类型。但我不明白为什么?我的样本缓冲区是 BYTE,但我只能通过短指针访问它。它已签名,但即使 *ptr 约为 15-20 千,也会发生剪裁。

0 投票
0 回答
134 浏览

audio - 除了 DirectSound 输出之外,是否值得实现其他任何东西?

我正在为 Windows 用户编写音频应用程序。目前音频通过 DirectSound 转储到声卡。在需要回退到多媒体扩展 (WinMM.dll) 的典型桌面上,是否有任何原因可能会失败,或者用户 (XP+) 通常会拥有与 DirectSound 兼容的驱动程序吗?

0 投票
1 回答
1517 浏览

c++ - 检测音频设备的到达/断开

我想向我的应用程序添加功能,允许检测 Windows 操作系统上播放/捕获设备的到达和断开连接。就像在 Skype 中一样 - 当您拔下设备时 - 它会显示设备丢失的通知,例如要求您选择另一个设备。

我正在使用 DirectSound。我认为可以有两种方法来解决这个问题。

  1. 在单独的线程中调用 EnumerateDevices 回调并手动检测更改。
  2. 以某种方式处理 WM_DEVICECHANGE 消息。但是 AFAIK WM_DEVICECHANGE 有一些限制。顺便说一句,它不适用于“智能”声卡 - 允许将任何类型的设备插入任何接收器。如果我在设备管理器中禁用设备 - WM_DEVICHANGE 到达。如果我手动拔下耳机插孔 - 没有任何反应。但我需要处理这种情况。

请建议正确的方法。

提前致谢。

0 投票
2 回答
2123 浏览

windows-7 - 在 Windows Vista 及更高版本中播放音频或视频时,网络性能不佳的原因是什么?

有问题的软件是本机 C++/MFC 应用程序,它通过 UDP 接收大量数据,然后处理数据以进行显示、声音输出和写入磁盘等。当应用程序的 CHM 帮助文档从其帮助菜单启动时,我第一次遇到问题,然后我在从硬件收集数据时单击帮助文档。为了复制这一点,使用 AutoHotkey 脚本在应用程序运行时快速单击帮助文档。一旦系统上出现任何声音,我就开始出错。

如果我完全禁用了声卡,则一切正常,没有错误,尽管声音输出显然被禁用。但是,如果我有声音播放(在这个应用程序中,不同的应用程序,甚至只是来自消息框的哔哔声),我会收到数千个丢弃的数据包(我们知道这一点,因为每个数据包都有时间戳)。作为第二个测试,我根本没有使用我的应用程序,只是使用 Wireshark 来监视来自硬件的传入数据包。果然,每当在 Windows 中播放声音时,我们都会丢包。事实上,声音甚至不必主动播放来导致错误。如果我只是创建一个缓冲区(使用 DirectSound8)并且从不开始播放,我仍然会收到这些错误。

这发生在具有多种网卡(光纤和 RJ45)和声卡(集成卡和独立卡)组合的多台 PC 上。我还为每个 NIC 和声卡尝试了不同的驱动程序版本。所有测试均在 Windows 7 32 位上进行。由于我的应用程序将 DirectSound 用于音频,因此我尝试了不同的 CooperativeLevels(正常操作是 DSSCL_PRIORITY)但没有成功。

在这一点上,我非常确信它与我的应用程序无关,并且想知道在我开始与硬件供应商和/或 Microsoft 打交道之前是否有人知道可能导致此问题的原因。

0 投票
2 回答
7351 浏览

windows - 如何从 DLL 中获取 HWND?

我有一个想要使用 Direct Sound 播放声音的 DLL。为了播放声音,我需要可执行文件的 HWND。我没有加载 DLL 的可执行文件的 HWND。如何在不从可执行文件中传递它的情况下在 DLL 中获取它?