头文件 XAudio2.d 里 interface IXAudio2Voice 改为 extern(C++) interface IXAudio2Voice
不要继承自 COM 抽象基类 IUnknown 即可 (这帮为D DirectX 编写的程序员可能是粗心了 没注意到吧 ... 话说写完自己也不测试一下吗 ..-_-)
以及一下都要改 跟上面是一样的 ...
IXAudio2EngineCallback
IXAudio2VoiceCallback
以及一切继承至 IXAudio2Voice 的类 ...
参考自 : http://forum.dlang.org/thread/zweofbqiitqvykcnwvya@forum.dlang.org?page=2
附一个不成熟的测试 代码
pragma (lib, "gdi32.lib");
pragma (lib, "d3d9.lib");
pragma (lib, "winmm.lib");
pragma (lib, "ole32.lib");
import core.runtime;
// import core.sys.windows.windows;
import win32.directx.d3d9;
import win32.windows;
import core.stdc.stdio;
import win32.directx.xaudio2;
import std.string;
import std.conv;
import std.math;
__gshared byte soundData[441000];
void main(){
CoInitializeEx(null, 0);
IXAudio2 pXAudio2 = null;
IXAudio2SourceVoice pSourceVoice = null;
IXAudio2MasteringVoice pMasteringVoice = null;
HRESULT hr = XAudio2Create(pXAudio2);
printf("XAudio2Create Result:%08X\n", hr);
hr = pXAudio2.CreateMasteringVoice(&pMasteringVoice);
printf("CreateMasteringVoice Result:%08X\n", hr);
WAVEFORMATEX waveformat;
waveformat.wFormatTag = cast(WORD)0;
waveformat.nChannels = 1;
waveformat.nSamplesPerSec = 44100;
waveformat.nAvgBytesPerSec = 88200;
waveformat.nBlockAlign = 2;
waveformat.wBitsPerSample = 16;
waveformat.cbSize = 0;
hr = pXAudio2.CreateSourceVoice(&pSourceVoice, &waveformat);
printf("CreateSourceVoice Result:%08X\n", hr);
hr = pSourceVoice.Start(0, XAUDIO2_COMMIT_NOW);
printf("Start Result:%08X\n", hr);
for (int index=0; index < 441000; index++)
soundData[index] = cast(ubyte)(127*sin(6.28*(cast(float)(index%110))/cast(float)110));
XAUDIO2_BUFFER buffer;
buffer.AudioBytes = 441000;
buffer.pAudioData = cast(ubyte*)soundData.ptr;
buffer.Flags = XAUDIO2_END_OF_STREAM;
buffer.PlayBegin = 0;
buffer.PlayLength = 5 * 44100;
Sleep(1000);
pSourceVoice.SubmitSourceBuffer(&buffer);
Sleep(5000);
}
分享到:
相关推荐
SQLite3_bindings_for_Node.js_node-sqlite3.zip SQLite3_bindings_for_Node.js_node-sqlite3.zip SQLite3_bindings_for_Node.js_node-sqlite3.zip SQLite3_bindings_for_Node.js_node-sqlite3.zip SQLite3_bindings...
《PyPI官网下载:探索zaber_motion_bindings_darwin-0.0.16.tar.gz中的Python库知识》 PyPI(Python Package Index)是Python开发者的重要资源库,它为全球Python用户提供了丰富的第三方库,方便了软件开发。在本文...
本文将详细介绍MQ的一些常用操作,包括配置调整、启动与停止队列管理器、创建队列以及生成`.bindings`文件等内容。 #### 一、MQ配置调整 在MQ的配置过程中,我们通常需要对队列管理器的参数进行调整以适应不同的...
标题中的“PyPI 官网下载 | giosgapps_bindings-0.0.22.tar.gz”表明这是一个从Python Package Index(PyPI)官方源获取的软件包,名为`giosgapps_bindings`,版本号为0.0.22,格式为tar.gz。PyPI是Python社区中最...
C++ bindings使得开发者可以直接用C++来编写Godot游戏的逻辑,从而利用C++的强大性能和丰富的库资源。 Godot的脚本API是其核心功能的一部分,提供了与游戏对象、场景、物理引擎、图形渲染、输入处理等各个方面的...
标题 "Clang bindings for .NET written in C#" 指的是一个项目,它实现了将Clang,一个C、C++和Objective-C的编译器前端,与.NET框架集成的接口。这个项目是用C#语言编写的,允许.NET开发者利用Clang的强大功能,如...
资源分类:Python库 所属语言:Python 资源全名:zaber_motion_bindings_linux-1.0.7.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
赠送jar包:cxf-rt-bindings-soap-3.0.1.jar; 赠送原API文档:cxf-rt-bindings-soap-3.0.1-javadoc.jar; 赠送源代码:cxf-rt-bindings-soap-3.0.1-sources.jar; 赠送Maven依赖信息文件:cxf-rt-bindings-soap-...
标题 "C++ Qt bindings for Node.js.zip" 指的是一个使用C++编写的Qt库与Node.js交互的绑定项目。这个压缩包包含了使开发者能够利用Node.js运行时环境调用Qt库的功能,从而在Node.js应用中充分利用Qt丰富的图形用户...
资源分类:Python库 所属语言:Python 资源全名:i3bindings-1.0.0a1.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
在计算机科学领域,C++是一种强大的编程语言,以其高效性和灵活性而闻名,而Python则以其简洁的语法和丰富的库生态系统受到欢迎。将这两种语言结合在一起,可以利用C++的高性能特性,同时利用Python的易用性和可扩展...
Go-gousb是一个基于Go语言的库,它封装了libusb库,为Go开发者提供了一种在Go程序中与USB设备交互的便捷方式。libusb是一个跨平台的C语言库,用于与USB设备进行低级通信。通过gousb,Go程序员能够利用libusb的强大...
2、安装pip:pip是Python的包管理工具,用于安装和管理Python包。你可以通过输入pip --version或pip3 --version来检查pip是否已安装。 安装WHL安装包 1、打开命令行(或打开anaconda命令行终端): 在Windows上,你...
vscode软件的一些基础配置。比如快捷键配置,软件基础配置,运行环境配置,插件配置,各个语言规范配置;
标题中的"up_958906_php-webdriver-bindings_ie2rk.rar"暗示了这是一个关于PHP WebDriver Bindings的压缩文件,其中可能包含了相关的源代码、文档或示例。描述进一步确认了这一点,指出该库是用于创建PHP功能测试,...
【标题】"up_1014398_php-webdriver-bindings_t3zg2.rar" 提供的资源是关于 PHP 实现的 Webdriver 客户端绑定库,名为 "php-webdriver-bindings"。这个库使得 PHP 开发者能够编写自动化功能测试,与 WebDriver 进行...
Objective-C bindings to libgit2.zip 是一个专门为Objective-C开发者设计的库,它提供了一种方式来利用libgit2这个强大的Git库。libgit2是一个用C语言编写的、轻量级且全面的Git库,它允许你在自己的应用程序中实现...
在某些情况下,用户可能会遇到ZXing.Net项目库中未包含这个dll的情况,或者开发者仅需要ZXing.dll来完成特定的编码和解码任务,因此单独提供这个dll文件是为了方便开发者直接引用,无需完整下载整个项目库。...
python库。资源全名:zaber_motion_bindings_darwin-0.0.26-py3-none-any.whl