CRI ADX  Last Updated: 2024-07-17 10:48 p
WASAPI独占模式

示例目录

/cri/pc/samples/criatomex/wasapi_exclusive


示例描述

使用方法
使用WASAPI的独占模式时,必须按照以下步骤初始化程序库。
 -# 使用criAtom_SetAudioClientShareMode_WASAPI函数指示程序库使用WASAPI的独占模式。
-# 使用WAVEFORMATEXTENSIBLE类型指定criAtom_SetAudioClientFormat_WASAPI函数的音频输出格式。
-# 使用criAtomEx_Initialize_WASAPI 函数初始化程序库。
.
具体处理代码的示例如下。
/* 指示以独占模式初始化WASAPI */
criAtom_SetAudioClientShareMode_WASAPI(AUDCLNT_SHAREMODE_EXCLUSIVE);
/* 指定WASAPI的输出格式 */
/* 注意)本示例使用的是48kHz 24bit PCM输出, */
/*    并不是所有指定格式都能使用。 */
memset(&output_format, 0, sizeof(output_format));
ex_ptr = (WAVEFORMATEX *)&output_format;
ex_ptr->wFormatTag = WAVE_FORMAT_EXTENSIBLE;
ex_ptr->nChannels = 2;
ex_ptr->nSamplesPerSec = 48000;
ex_ptr->wBitsPerSample = 32;
ex_ptr->nBlockAlign = ex_ptr->wBitsPerSample / 8 * ex_ptr->nChannels;
ex_ptr->nAvgBytesPerSec = ex_ptr->nSamplesPerSec * ex_ptr->nBlockAlign;
ex_ptr->cbSize = 22;
output_format.Samples.wValidBitsPerSample = 24;
output_format.SubFormat = KSDATAFORMAT_SUBTYPE_PCM;
criAtom_SetAudioClientFormat_WASAPI((const WAVEFORMATEX *)ex_ptr);
/* 为WASAPI输出初始化程序库 */
/* Initialize the library for WASAPI output */
void criAtom_SetAudioClientFormat_WASAPI(const WAVEFORMATEX *format)
Output format specification
void criAtom_SetAudioClientShareMode_WASAPI(AUDCLNT_SHAREMODE mode)
Sharing mode specification
void criAtomEx_Initialize_WASAPI(const CriAtomExConfig_WASAPI *config, void *work, CriSint32 work_size)
Library initialization
[备注]
使用::criAtomEx_Initialize_WASAPI函数初始化程序库时,必须使用::criAtomEx_Finalize_WASAPI函数执行程序库的结束处理。
注意事项
能否以指定格式正常输出音频很大程度取决于使用的硬件。
(已经发现存在虽然WASAPI没有返回错误,但音频不能正确输出的情况。)
WASAPI独占模式的使用仅限于所使用的硬件受限的情况,如基于PC的街机等。
只有一个操作系统可以使用WASAPI独占模式的应用程序。
如果同时启动多个使用WASAPI独占模式的应用程序,则初始化程序库会失败
使用WASAPI独占模式时,无法执行其他应用程序的音频输出。
此外,即使在同一个应用程序中,任何在不使用Atom运行库的情况下播放音频的内容都将被静音。
目前,Atom运行库支持以下三种量化比特数的PCM数据格式。
- 16bit
- 32bit/24valid
- IEEE float
.
如果指定了上述以外的PCM数据格式,或虽然与上述情况相符但::criAtom_GetAudioClientIsFormatSupported_WASAPI函数返回CRI_FALSE,则无法执行指定格式的音频输出。