5

有没有关于如何从 Delphi XE2 FireMonkey 构建的应用程序在 Mac 上播放 WAV 文件的教程或示例?

我问是因为这段代码不起作用:

var
  //fWaves head and data is initialized and plays properly on Win through OpenAL
  fWaves: array of record 
    Head: TWAVHeaderEx;
    Data: array of byte;
  end;
  D: NSData;
  N: NSSound;
begin
  D := TNSData.Wrap(TNSData.Create.initWithBytes(@fWaves[0].Head, SizeOf(fWaves[0].Head) + fWaves[0].Head.DataSize));
  ShowMessage(IntToStr(D.length)); //--Length is correct
  N := TNSSound.Wrap(TNSSound.Create.initWithData(D));
  ShowMessage(FloatToStr(N.Duration)); //--Displays 0
  if N.play then
    ShowMessage('Yes')
  else
    ShowMessage('No'); //--Always returns NO
end;

我正在从内存中加载 WAV 文件头和数据,它在 OpenAL 上运行良好。所以问题出在我的 NSSound 使用中。谁能提供一些在 Mac 上播放 Delphi XE2 声音的工作示例?

4

2 回答 2

3

Freepascal/Lazarus 有一个名为“macosall.pas”的单元,它是 os-x C++ 头文件到 pascal 的翻译,允许您调用本机 os-x 函数。

遗憾的是,这个单元不是 delphi 的一部分,但是通过打开单元,您可以将函数声明复制到 delphi,它应该可以工作。

我希望你能在 quicktime API 中找到你需要的东西,它是苹果机器上媒体的中心枢纽。另请查看Apple developer并查看文档。

于 2012-02-13T02:57:24.717 回答
0

不妨将其作为答案发布,以防对任何人有帮助:

试过了,也试过了initFromFile(path_to_aiff)..没有任何帮助。所以我终于切换到 OpenAL。

也许将来 Embarcadero 会修复访问 NSSound 的特定方式,但目前 OpenAL 效果最好。此外,OpenAL 是跨平台的,这意味着我可以在 Win 和 Mac 上使用相同的声音代码。

于 2012-04-09T11:45:14.583 回答