问题标签 [xaudio2]

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 回答
147 浏览

audio - 如何使用 IXAudio2Voice::SetChannelVolume 函数

我想知道如何使用该IXAudio2Voice::SetChannelVolume功能。文档告诉我传递第一个参数的通道数。但是我需要哪个“通道数”以及如何获得该值?我是否必须使用可以从GetVoiceDetails-function 检索到的输入通道数(请参见此处)?

0 投票
0 回答
951 浏览

windows-runtime - 将源语音回调与 XAudio2 for Windows 运行时组件一起使用时,WaitForSingleObjectEx 应该如何实现?

当我尝试使用 WaitForSingleObjectEx 函数来表示 Xaudio2 源语音已完成处理其缓冲区中的所有数据时,我收到了系统错误代码 x05 error_access_denied。

我想将此用作事件处理程序,以了解何时将另一个音频数据缓冲区提交给源语音,因此它可以继续播放,直到调用我的 stop() 函数/方法。

应该如何正确实现 WaitForSingleObjectEx 函数,以便我不会收到 error_access_denied 系统错误代码?

这是针对 Windows Phone 8 C++/CX Windows 运行时组件...

TestTone.h 文件:

TestTone.cpp 文件:

XAudio2VoiceBufferCallback.h 文件:

XAudio2VoiceBufferCallback.cpp 文件:

0 投票
0 回答
828 浏览

xaudio2 - IXAudio2::CreateSourceVoice 方法失败

我正在尝试按照此处列出的步骤使用 XAudio2 和 C++ 播放基本音效:http: //msdn.microsoft.com/en-us/library/windows/desktop/ee415762%28v=vs.85%29。 aspx

在我看来,好像 XAudio2 当前正在正确初始化并且正在创建主控声音。然后我填充一个 WAVEFORMATEX 结构和一个 XAUDIO2_BUFFER 结构。

目前,我坚持使用 CreateSourceVoice() 方法。它返回 HRESULT 0x88960003,MSDN 说这是 XAUDIO2_E_XAPO_CREATION_FAILED 结果。然而,我无法弄清楚是什么导致它失败。有没有办法从 XAudio2 方法生成更有用的错误消息,这些错误消息可能对调试有用?这种方法失败的常见原因是什么?我无法找到有关此问题的任何详细信息。

这是我初始化 XAudio2 的方法:

这是我填充结构的方式:

然后我调用 CreateSourceVoice(),但调用后 sourceVoice 为 NULL:

0 投票
1 回答
782 浏览

c++ - C ++如何将智能指针传递给将修改指针的输出参数

所有原始指针都需要在程序中使用智能指针进行处理。

但是我遇到了这个 Xaudio2 调用的问题

我的问题是在将智能指针作为指向指针的指针传递时如何使用它,这甚至可能吗?如果不是,我应该如何以聪明的方式解决这个问题?即如何为参数传递智能指针_Out_ IXAudio2 **ppXAudio2

任何帮助都感激不尽。

0 投票
1 回答
219 浏览

win-universal-app - 如何使用 sharpDX/Xaudio2 更改波的音高?

我想做的就是在我的通用应用程序中以随机音高播放 WAV。如果有比 SharpDX 需要的更直接的方法来做到这一点,请告诉我!

0 投票
1 回答
99 浏览

c# - 如何将浮点数组指针传递给 Volumemeter

我正在尝试在 Xaudio2 中使用 SharpDX VolumeMeter。我想使用 SetEffectParameters 传递一个 VolumeMeterLevels 对象,但该对象只有一个公共 int ChannelCount 而不是 MSDN 部分中提到的两个指针。API 将它们列为内部。

我需要传递 pPeakLevels 和 pRMSLevels 的两个指针。我怎样才能做到这一点?

用代码更新。下面我创建一个新的 VolumeMeter、MasteringVoice 和 VolumeMeterDescriptor。我在 MasteringVoice 的效果链中设置了 VolumeMeter。

问题是 VolumeMeter 有两个非公共属性 PeakLevelPointer 和 RmsLevelsPointer 根据 API ( http://sharpdx.org/documentation/api/t-sharpdx-xaudio2-fx-volumemeterlevels ) 必须由应用程序分配。VolumeMeter 然后将填充指针指向的浮点数组以使仪表工作。问题是:如何传递两个非公共指针?

0 投票
1 回答
270 浏览

c# - 如何同步两个 Xaudio2 Streaming SourceVoices

我正在使用 SharpDX Samples ( https://github.com/sharpdx/SharpDX-Samples/blob/master/WindowsDesktop/XAudio2/AudioPlayerApp/AudioPlayer.cs ) 中的流式传输原则同时播放多个声音。

我有一个包含同一首歌多个版本的列表。我想在完全相同的时间启动它们。我为每首歌曲开始一个新任务,并结合使用 CountDownEvent 和 ManualResetEvent 来确保它们同时开始:

在任务中,我准备缓冲区并向 CountDownEvent 发出歌曲已准备好播放的信号。然后歌曲等待来自 ManualResetEvent 的信号。当 CountDownEvent 有来自每首歌曲准备好的信号时,它会发出 ManualResetEvent 信号并调用 SubmitSourceBuffer。

歌曲 10 次中有 9 次开始采样同步(歌曲之间没有可检测到的相位,只是声音更大),但有时有一首稍微偏离。

这是一些详细说明的代码:

旁注:我使用 foreach 语句将每首歌曲的缓冲区发送到多个音频设备,每首歌曲的顺序相同。使用预设内存、音频解码器等的加载方法预先设置就绪状态。

我知道可以使用操作集同时启动 sourcevoices,但是否有另一种方法(使用时钟或其他同步方法)来确保为每首播放歌曲同时发送样本?

0 投票
1 回答
1270 浏览

winapi - 使用 Waveform Audio API Windows 从扬声器捕获声音

我想使用Waveform Audio API.

我搜索并找到了解释如何使用 Waveform Audio 从麦克风捕获音频并保存到文件或播放的帖子。但是,没有人解释如何从扬声器捕获音频。

我的理解是,如果我提供播放设备的句柄,waveInOpen()那么我可以从扬声器中捕捉声音。这是我需要帮助的地方。如何获取播放设备的句柄?当我提供WAVE_MAPPER (or 0) for uDeviceID时,它总是从麦克风录制。如果我设置任何其他值,我总是会出现超出范围的错误。

编辑:

自从我发布问题以来,我做了更多的研究。我找到了可用于音频捕获的其他选项/API。我需要帮助来指出正确的方向,该方向用于从扬声器捕获音频。我不想要任何涉及大量代码的花哨的东西。我的目标操作系统是 XP 及以上。

WaveInOpen 和混音器:

对这些链接的评论/讨论提示waveInOpen()可用于从扬声器中获取音频。根据这些,必须打开Mixer。我曾经mixerOpen()得到搅拌机手柄,但不知道如何使用这个手柄waveInOpen()

如何捕捉正在播放的音频?

来自麦克风的声音与来自扬声器的声音

XAudio2:

我可以使用 XAudio2 从扬声器捕获音频吗?如果是,那么请分享一些示例代码。

0 投票
3 回答
1190 浏览

c# - XAudio2 - 在改变频率点击声音时播放生成的正弦波

我想开发一个应用程序来匹配你的耳鸣频率:播放一个频率,用户通过按加号或减号按钮来降低或增加频率。(参见部分代码,基于stackoverflow thx :-) 的一些编码)

播放频率很好,但是当用户按下按钮时,当频率更新时,您会在此处发出咔哒声。你知道是什么产生了声音以及我如何摆脱它吗?谢谢。

0 投票
1 回答
186 浏览

c# - Windows 8 xaudio2 在多点触控应用程序中播放 wav 文件

我正在学习如何使用 xAudio2。在 Visual Studio 2012 Express For Windows 8 中制作了一个简单的应用程序 Windows 8。简单的 xAudio2 播放器类:

和 Xaml:

在此处输入图像描述

和:

在 Windows 8 模拟器中测试。如果我按一根手指,那么一切都很好。当我点击按钮时——放开手指时会播放声音——声音停止。

在此处输入图像描述

如果我用两根手指单击并松开两根手指,声音会继续播放。结果是混叠。

在此处输入图像描述

调用了两个事件:btnAPointerPressed 和两个事件:btnAPointerReleased 但声音继续播放。好像音频流冻结并继续播放。好像音频流冻结并继续播放。我想了解问题 hadio2?或者我没有正确地做某事?