草庐IT

directsound

全部标签

windows - 同时将声音输出到多个音频设备

好,第一个问题。我正在尝试编写一个虚拟的音板,该音板将一次输出到多个设备。我希望使用OpenAL,但是如果我必须切换到MS库(我最初是在Windows7上编写的),则可以。无论如何,您的想法是要加载一堆声音文件并准备播放。您使用的是Skype,并且某人主要失败,因此您按了价格正确的失败按钮。您和您的friend都同时听到此声音,并对此大笑。我已经将OAL设置为可以在默认设备上播放的程度,此时选择一个设备似乎很简单。但是,据我了解,每个OAL设备都需要其上下文是最新的,以便缓冲区能够正确填充/传播。这意味着,在标准程序中,声音将在一个设备上播放,然后切换该设备,然后将缓冲的声音在第二个设

windows - DirectSound 和 WinMM 是基于 WASAPI 的吗?

我在这看到slidesvista中的winmm和directsound是基于wasapi的。这是否意味着winmm和directsound实际上是通过调用WASAPI中的函数来完成工作的?我在谷歌搜索后没有找到这个信息,希望这里有人知道。 最佳答案 除了几个高度特化的异常(exception)(directks、ASIO、openal),Windows中的所有音频渲染都通过WASAPI。这包括通过winmm和directsound进行的音频渲染。 关于windows-DirectSoun

c++ - 内存转储分析(应用挂起)

我正在尝试分析在我的应用程序发生挂起后从我的一位最终用户那里收到的内存转储。它似乎与我的应用程序的音频播放部分有关。我相信涉及两个线程,即将开始播放声音的主线程,以及一个更新程序线程,它迭代链表中的声音以不断更新它们的状态。但是,我不明白挂起的来源是什么。我的WinDbg知识有限,但我设法弄清楚挂起似乎发生在音频库的SetLoop方法中(具体在静态声音代码中)。我使用DirectSound,在这种情况下应用程序在Windows732位上运行(我自己在XP上开发,我从来没有遇到过这样的问题)。静态声音类在检查声音是否正在播放之前锁定关键部分,如果不是,则将循环标志设置为true或fals

c - 在 Windows 上使用 C 将数据流式传输到声卡

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭7年前。Improvethisquestion作为大学项目的一部分,我必须进行一些信号处理,并想使用PC声卡输出结果。该软件必须用C语言编写,并且需要与Windows(最好是7和XP)一起工作。我找到了输出.wav和类似文件的代码示例,但我对连续输出数据而不是从文件输出感兴趣。尽管一些可靠的API似乎有自己的缓冲区处理方式,但输出数据很可能会以数组形式呈现。任何建议都很好,代码示例甚至最好的API也很好。我看过D

windows - 使用 portaudio 设置音频输入电平

我正在处理在Windows上使用portaudio的遗留代码。该代码从桌面麦克风获取音频并能够配置输入音量。它在windowsxp下完美运行,但在windows7下调整音频输入电平被破坏,更改参数对输出音频流没有影响。代码执行以下调整音量mp_mixer=Px_OpenMixer(mp_inputStream,m_dev_num);if(mp_mixer)Px_SetInputVolume(mp_mixer,m_volume);我发现,底层winmme函数在WindowsVista和更新版本中不起作用。我已经更新到最新版本的portaudiopa_stable_v19_20140130

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

我想增加语音数据缓冲区的音量。关键是我正在使用DirectSound,并且我有一个主缓冲区和一个辅助缓冲区-所有流混合都是手动完成的。在语音聊天中,所有参与者都可以有独立的音量级别。我将每个流数据乘以一个值(增益)并将其加到一个缓冲区中。一切正常,但当我尝试将数据乘以大于1.0f的值时-我听到一些削波或其他声音。我试过使用Audacity效果压缩器,但这无助于减少奇怪的噪音。也许我应该以其他方式修改增益?或者只是使用另一种后处理算法?更新:哇,我刚刚发现了一件有趣的事情!我在增加音量之前和之后都转储了音频。这是图片对不起质量-我认为这就是声音应该出现的方式(我自己画了红线)。看起来值确

c++ - 使用 Speex 和 DirectSound 的回声消除 (AEC)

我正在尝试使用Speex编解码器库执行回声消除(AEC)。根据Speex文档,我需要执行两个调用:speex_echo_playback(echo_state,echo_frame);每次播放一个音频帧,并且speex_echo_capture(echo_state,input_frame,output_frame);对于捕获的每一帧。因为我使用的是DirectSound,所以我想我可以在调用speex_echo_playback时使用主DirectSound缓冲区作为echo_frame,例如,DWORDoffset=0;DWORDlength=0;LPVOIDblock1,bloc

windows - 如何在控制台程序中向 DirectSound SetCooperativeLevel 提供 HWND?

我正在编写一个控制台程序,它使用DirectSoundAPI来呈现一些音频数据。在关注DirectSoundProgrammingGuide(fromMicrosoft)时,我偶然发现了一个奇怪的问题.根据documentation:Aftercreatingadeviceobject,youmustsetthecooperativelevelforthedevicebyusingtheIDirectSound8::SetCooperativeLevelmethod.Unlessyoudothis,nosoundswillbeheard.问题是我正在编写一个控制台程序,SetCoope

c# - 如何产生精确定时的音调和静音?

我有一个C#项目可以为RSS提要播放摩尔斯电码。我使用ManagedDirectX编写它,却发现ManagedDirectX已过时且已弃用。我的任务是播放纯正弦波脉冲串,中间穿插着静默期(代码),这些静默期的持续时间是精确计时的。我需要能够调用一个函数来播放纯音这么多毫秒,然后Thread.Sleep()然后播放另一个,等等。最快时,音调和空格可以短至40毫秒。它在ManagedDirectX中运行良好。为了获得精确定时的音调,我创建了1秒。正弦波进入辅助缓冲区,然后播放一定持续时间的音调,我寻求在缓冲区结束后的x毫秒内播放,然后播放。我试过System.Media.SoundPlay

c# - 如何产生精确定时的音调和静音?

我有一个C#项目可以为RSS提要播放摩尔斯电码。我使用ManagedDirectX编写它,却发现ManagedDirectX已过时且已弃用。我的任务是播放纯正弦波脉冲串,中间穿插着静默期(代码),这些静默期的持续时间是精确计时的。我需要能够调用一个函数来播放纯音这么多毫秒,然后Thread.Sleep()然后播放另一个,等等。最快时,音调和空格可以短至40毫秒。它在ManagedDirectX中运行良好。为了获得精确定时的音调,我创建了1秒。正弦波进入辅助缓冲区,然后播放一定持续时间的音调,我寻求在缓冲区结束后的x毫秒内播放,然后播放。我试过System.Media.SoundPlay
12