问题标签 [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 投票
1 回答
2142 浏览

c# - Directsound 对数音量到线性音量滑块

我正在使用 DirectX.DirectSound 开发音乐播放器。我的音量有问题。直接音量是对数。这意味着对于无声的声音,对幅度的微小变化比对大声的声音更敏感。这也意味着使用线性音量滑块,我们对音量变化有一种对数感觉,而这感觉不太对劲。我的问题是:我怎样才能使它成为线性的?直到这里我的代码是:

0 投票
1 回答
1442 浏览

c# - 我应该为我的音频项目使用 DirectSound 还是 WASAPI?

我正在启动一个最低要求为 Windows 7 的项目。我将使用 NAudio 作为我的音频接口。我不确定我应该使用什么:DirectSound 还是 WASAPI?我将执行以下操作:

  1. 在多个 USB 声卡上为扬声器和麦克风操作音量/静音。
  2. 将声卡 2 的输入重新路由到声卡 2 的输出(如果可能的话)。
  3. 使用一些效果来操作声卡的音频输入。

我知道 DirectSound 在幕后通过 WASAPI 处理所有音频,听起来 DirectSound 已加入弃用技术列表。

但是,我的问题更多来自功能层面:哪个 API 可以让我做我上面描述的事情。

0 投票
1 回答
431 浏览

c++ - C++ - DirectSoundBuffer 停止在特定位置播放 - 没有通知

我正在使用 DirectSound 的 DirectSoundBuffer 播放通过网络传输的语音数据。语音/语音的本质是它不一定不断地流式传输(它开始和停止),它也可以以不同的数据包大小出现(这使得很难预测缓冲区应该停止的位置)。我保留一个StoppingPoint变量来跟踪我在缓冲区中写入的位置(它还考虑了该缓冲区的循环性质)。如果StoppingPoint达到,我想停止播放我的缓冲区。另外,我StoppingPoint还要指出我也想从哪里开始写作。

另外,我不能使用通知,因为为了使用通知,必须停止缓冲区。但就我而言,当缓冲区播放时,很可能会有更多数据进入,从而推回我的“StoppingPoint”值。

我现在拥有的是一个每帧都调用的函数。除其他外,此功能正在检查播放光标的位置。如果播放光标经过该StoppingPoint位置,它会停止缓冲区,并将播放光标移回该StoppingPoint位置。到目前为止,这似乎工作正常,但正如您所料,Play 光标经常超过StoppingPoint. 这意味着每次到达流数据的末尾时都会播放一些旧/垃圾数据。

我只是好奇是否有办法在特定偏移处停止播放 DirectSoundBuffer?我想要的是将数据写入缓冲区,然后播放,然后让它精确地停在我的StoppingPoint变量描述的位置而不会超出它。

注意:我没有包含任何代码,因为这更像是我需要的高级解决方案。我的实现非常简单、典型,并且在大多数情况下它确实有效。我只需要朝正确的方向轻推即可消除我的StoppingPoint. 也许有一个我可以使用的功能?或者其他一些常用来实现这一点的算法?

0 投票
2 回答
1440 浏览

vb.net - 如何绘制 .wav 文件的波形

我有一个非常具体的问题。我想确切地知道如何为 .wav 文件绘制波形。更具体地说,我需要帮助从 wav 文件中获取波形 x 和 y 坐标,绘制这些点的过程不是这个问题的主题。我没有相关的代码可以发布,因为到目前为止我的所有尝试都是基于其他人的工作,我无法让他们工作。

谢谢。

我已经从下面第一个链接中的代码开始工作。由于没有定义,原始代码会出现许多错误,尽管这相对容易修复。

我基本上为每个未定义的变量添加了一个“Dim x as y”。唯一不清楚类型的变量是“SoundFile”,我发现它应该是“Microsoft.DirectX.DirectSound.BufferDescription”类型。所以上面变成了:

问题是我迷失了从这里去哪里。这是我的问题。

0 投票
1 回答
4191 浏览

vb.net - 如何从 .wav 文件 vb.net 中读取字节

我正在尝试使用 .wav 文件做一些工作,并且我已经能够通过创建一个字节数组来随机播放文件和播放声音(请参阅下面的代码)我想知道是否有我的方法可用于从 .wav 文件中获取字节。我的想法是,如果我可以从 .wav 文件中获取字节,我应该能够像处理随机噪声一样播放声音。这应该可以让我弄清楚如何修改声音。

播放 .wav 文件:

使用直达声播放随机噪声:

我要做的是从 .wav 文件中获取字节数组,这样我就可以像播放随机噪声一样播放它。

提前致谢!

更新:

我编写了以下代码来使用从 .wav 文件中读取的字节:

错误出现在这一行:

错误是:“值不在预期范围内。”

我相信我已经从数组中为每个变量读取了正确的位。我也注意到了字节顺序。再次提前感谢:)

0 投票
2 回答
1116 浏览

c++ - 如何让这段代码播放波形文件更长时间?

我不知道如何创建自己的声音播放器,所以我选择使用 ChiliTomatoNoodle 框架中的一个。

然而,我遇到的问题是我有一个 180 秒的波形文件,它只播放第一秒左右。我该怎么做才能让它播放更长的时间?

声音.h:

声音.cpp:

提前感谢您的帮助!

0 投票
2 回答
1722 浏览

c# - 启用和禁用播放和录制设备

我是 c# 的新手。如果我的问题有点傻,请不要生气。

我需要通过 c# 代码查看禁用的播放和录制设备,并希望根据我的需要启用或禁用它。我该如何接近..?我使用 DirectX.DirectSound API 编写了一个代码,但它仅限于枚举仅启用的设备,我无法看到存在的禁用设备。而且我认为没有任何方法可以禁用或启用这些设备。

我会非常感谢你的帮助。

如果可能的话,还请建议我如何使用其他 API 来做到这一点。

0 投票
0 回答
244 浏览

c# - C# DirectSound Buffer.Write() 参数异常(DirectX SDK 2010 年 6 月)

这里有人使用过 DirectSound 缓冲区吗?我试图通过使用计时器在每次播放 % 时将新数据写入缓冲区来获得一个连续的循环缓冲区。我正在使用 ms 计时器来执行此操作。

当我使用 Record() 函数时,执行以下操作:

我正在使用 LockFlag.None 因为我不希望缓冲区被锁定,所以我可以连续写入它。但是,如果我使用 LockFlag.None,我会得到一个 ArgumentException。如果我使用 LockFlag.EntireBuffer,我会得到一个 AccessViolationException。

有没有人对此有解释或如何解决它(或关于更好的循环缓冲区实现的建议)?

0 投票
1 回答
1135 浏览

c++ - 在directsound中,对于IDirectSoundBuffer,由哪个方法负责buffer的写入位置。

在 directsound 中,我们知道,调用 IDirectSoundBuffer::getcurrentposition(),会在 directsound 缓冲区中获取播放位置和写入位置。但我认为将数据复制到缓冲区应该改变 writeposition(这种行为,改变 write_position,会导致用什么方法,解锁?)。我认为只有复制数据功能应该只影响缓冲区中的数据,而不是写入位置..

0 投票
1 回答
364 浏览

directsound - 未设置 DirectSound Wave 格式

我一直在尝试在我的程序中设置波形格式已经有一段时间了,但没有成功......

它总是在 directsound->setFormat 方法中返回 false ......有人可以帮我吗?

下面发布的是我正在处理的代码