在Delphi XE2的Mac上有没有WAV声音播放?

时间:2012-02-12 17:42:18

标签: macos delphi delphi-xe2 firemonkey nssound

是否有关于如何在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声音播放的一些工作示例?

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

如果能帮助任何人,也可以将其作为答案发布:

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

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