问题标签 [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 回答
426 浏览

xaudio2 - XAudio2.7 停止源语音后崩溃

我在 Windows 7 x86 应用程序上使用 XAudio2.7 来渲染流式音频样本。源声音以 8KHz、单声道和 16 位/采样波形格式创建。然后我运行一个等待语音回调并提交新缓冲区的后台线程。一切都很好,直到我停止声音并且它使应用程序崩溃并出现访问冲突异常。创建转储文件后,我注意到 XAudio2 内部处理线程上发生了崩溃:

堆栈跟踪

我尝试在停止声音之前停止引擎线程,但结果是一样的。

请指教,谢谢

0 投票
1 回答
412 浏览

uwp - AudioGraph 在第二帧输入节点上抛出 XAUDIO2_E_INVALID_CALL

我正在尝试使用 UWP 的 AudioGraph API 来重现合成语音和简短通知声音(“earcons”)的混合。

UWP 有一个语音合成 API,它为我提供了一个包含 WAV 文件的流,但我不想对参数(比特率、样本深度等)做出太多假设,所以我的想法是拥有一个AudioSubmixNode并添加AudioFrameInputNodes每当有一些演讲要重现。将单独的话语排队以使它们不重叠存在一些复杂性。

该图被初始化为

然后播放当前的话语

这工作一次。当第一个话语结束时,StreamFinished?.Invoke(this, EventArgs.Empty);通知队列管理系统应该播放下一个话语,并且线路

抛出一个Exceptionwith 消息Exception from HRESULT: 0x88960001。一点挖掘表明它对应于 XAUDIO2_E_INVALID_CALL,但这不是很有描述性。

在这两种情况下,传递给的参数AudioEncodingProperties.CreatePcm都是(22050, 1, 16).

我怎样才能找到有关出了什么问题的更多详细信息?在最坏的情况下,我想我可以把整个图表扔掉,每次都建立一个新的,但这似乎效率很低。

0 投票
0 回答
28 浏览

c++ - 为 windows phone 8 应用程序实现 Xaudio2

我是 windows phone 8 编码的新手,但之前在 python 中编码过很多。我正在尝试制作一个使用 Xaudio2 实时生成正弦波并将其作为无人机音高无限循环的应用程序。我正在使用 Visual Studio Express 2012 并用 C++ 和 XAML 编写应用程序。想通了图形界面,不是很辛苦,尝试用MediaElement循环一个短的声音文件,使音高恒定,但是每次文件重新启动时声音都有一个小间隙。我读到使用 Xaudio2 可以消除间隙,甚至可以实时生成声音,而无需录制声音(因为我担心内存)而没有任何间隙。这听起来正是我所需要的,但我在使用 Xaudio2 时遇到了极大的麻烦。我看过教程,尽可能多,但我不知道如何启动函数,如何调用函数,或者代码在页面上的位置。我假设它出现在 C++ 页面上,但我什至不知道。我想做的很简单,但我无法开始,因为我不知道如何在我的代码中使用这个 API。如果有人可以帮助我弄清楚如何启动 Xaudio2 并在我的代码中工作,那真是太棒了!

0 投票
1 回答
729 浏览

c - 在 C 中使用 XAudio2

我正在使用 Windows 10 上的 Visual Studio 2015 开发 C 程序。当我包含 XAudio2.h 时,我得到了几百个编译器错误,我相信这些错误都源于这个:

错误 C2485 'uuid':无法识别的扩展属性

无论如何让 XAudio2 与 C 应用程序一起工作?

0 投票
1 回答
724 浏览

c# - XAudio2 - Cracking output when using a dynamic buffer

To provide a little bit of context. I am trying to output live audio from a camera in my c# application. After doing some research it seems pretty obvious to do it in a c++ managed dll. I chose the XAudio2 api because it should be pretty easy to implement and use with dynamic audio content.

So the idea is to create the XAudio device in c++ with an empty buffer and push in the audio from the c# code side. The audio chunks are pushed every 50ms because I want to keep the latency as small as possible.

Everytime the timer runs it gets the pointer of the audio buffer, reads the data from the audio, copies the data to the pointer and calls the PushAudio method. I am also using a stopwatch to check how long the processing took and calculate the interval again for the timer to include the processing time.

This is the implementation of the c++ part.

Regarding to the documentation on msdn I created a XAudio2 device and added the MasterVoice and SourceVoice. The buffer is empty at first because the c# part is responsible to push in the audio data.

The problem I am facing is that I always have some cracking in the output. I tried to increase the interval of the timer or increased the buffer size a bit. Everytime the same result.

What am I doing wrong?

Update:

I created 3 buffers the XAudio engine can go through. The cracking got away. The missing part now is to fill the buffers at the right time from the c# part to avoid buffers with the same data.

0 投票
1 回答
1209 浏览

c++ - XAudio2 教程 - 分离线程和异步读取?

我过去曾使用此 XAudio2 流式传输教程成功地创建了一个程序来流式传输和播放磁盘中的音频(https://msdn.microsoft.com/en-us/library/windows/desktop/ee415791(v=vs .85).aspx )。

现在我正在修改代码,有些奇怪的东西对我来说很突出。他们创建了一个单独的线程来从文件中读取小块的音频数据并将这些块提交到语音缓冲区。太好了,现在主线程可以在播放音频时做它需要的任何事情,但是为什么还要在流线程中使用异步文件读取呢?据我所知,每次循环迭代都会执行文件读取,线程会立即等待,直到块被完全读取,然后再将其提交到语音缓冲区。

他们正在做的事情有优势还是没有必要?

0 投票
1 回答
249 浏览

xaudio2 - 如何确定在出现严重错误后何时可以安全地重新创建母带声音?

我的应用程序使用 XAudio2 播放音频。当它调用CreateMasteringVoice它时,它传递NULLszDeviceId参数,根据此文档页面,该参数执行以下操作:

如果您为 IXAudio2::CreateMasteringVoice 指定 NULL 或 szDeviceId 参数,则系统使用虚拟音频客户端来表示音频端点。在这种情况下,如果底层 WASAPI 渲染设备不可用,系统会自动选择新的音频渲染设备进行渲染,音频处理继续进行,并且不会引发 OnCriticalError。

但是,我发现如果所有的音频设备都被删除或禁用,那么OnCriticalError仍然会被调用,此时,如果我想让音频再次在我的应用程序中工作,它需要CreateMasteringVoice在至少有一个音频时再次调用设备已插入并启用。

所以我的问题是,我的应用程序如何判断何时应该重新创建母带声音?(即,当至少有一个正常工作的音频设备时。)除了反复尝试重新创建母带声音直到成功之外,还有什么更好的方法吗?

请注意,我无法检查结果,GetDeviceCount因为从 XAudio2 2.8 开始已将其删除。

0 投票
0 回答
473 浏览

c++ - XAudio2 - 移除活动音频设备时源语音挂起

我有一个我无法解决的问题。我的应用程序应该能够在运行时切换默认音频设备。为了实现这一点,我使用了 DirectXTK 中的 XAudio2。

我在我的音频类中实现了 IMMNotificationClient,以便能够对默认设备更改做出反应。

例如,当默认设备更改时,我会停止当前的源语音,重置音频引擎并再次启动源语音。一切都按预期工作。

但是,当我的默认设备是 USB 声卡并且我在播放源语音期间拔下它时,应用程序会冻结。

原因是停止语音时源语音挂起。有时也在刷新源缓冲区时。移除源语音正在使用的音频设备后,似乎无法再停止源语音。

有人有同样的问题并且能够解决这个问题吗?

这是我用来重置音频引擎的功能。

0 投票
2 回答
1118 浏览

c++ - 如何在 XAudio2 上同时播放多个声音?

我目前正在尝试使用 XAudio2 在 Windows 中制作游戏应用程序,但我无法弄清楚如何使应用程序在播放声音时不被阻塞。我尝试在此存储库的示例中调用一个新线程。

但这只会导致错误。我尝试在函数中传递对母带声音的引用,但它只会引发“XAudio2:必须首先创建母带声音”错误。我错过了什么吗?我只是想让它同时播放两种声音并从那里构建。我查看了文档,但它非常模糊。

0 投票
1 回答
1221 浏览

windows-7 - XAudio 是否随 Windows 7 提供?

我想针对我可以预期已经在 Windows 7 上的低级音频 API 进行开发。

此链接:XAudio2 版本

说(强调我的)

XAudio2 是一个跨平台 API,已交付用于Xbox 360 以及 Windows 版本,包括 Windows XP、Windows Vista、 Windows 7

但它也说:

XAudio 2.7 及更早版本 (Windows 7)

在应用程序中使用的所有以前版本的 XAudio2 都在 DirectX SDK 中作为可再发行的 DLL 提供。

那么它是哪一个?默认情况下它在 Windows 7 上,还是我需要通过我的安装程序分发 DirectX?或者,由于 Windows 7 显然包含 DirectX 11,尽管我还没有找到该信息的官方来源,也许我只需要针对旧版 DirectX API 进行开发,但不需要包含其可分发文件?