是否有关于如何在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声音播放的一些工作示例?
答案 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上使用相同的声音代码。