`
黑色杰克史密斯
  • 浏览: 15219 次
社区版块
存档分类
最新评论

D语言 bindings库 XAudio2 无法发音 ...

    博客分类:
  • n/a
 
阅读更多
头文件 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);

}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics