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でのDelphiXE2サウンド再生の実用的な例を教えてください。

4

2 に答える 2

3

Freepascal / Lazarusには、os-x C ++ヘッダーファイルをpascalに変換する「macosall.pas」というユニットがあり、ネイティブos-x関数を呼び出すことができます。

残念ながら、このユニットはdelphiの一部ではありませんが、ユニットを開くことで、関数宣言をdelphiにコピーでき、動作するはずです。

アップルマシンのメディアの中心的なハブであるquicktimeAPIで必要なものが見つかることを期待しています。また、 Apple開発者をチェックして、ドキュメントを見てください。

于 2012-02-13T02:57:24.717 に答える
0

それが誰かを助ける場合には、答えとしてそれを投稿することもできます:

それを試してみました、同様に試してみinitFromFile(path_to_aiff)ました..何も助けにはなりませんでした。だから私はついにOpenALに切り替えました。

将来、EmbarcaderoはNSSoundにアクセスする特定の方法を修正するかもしれませんが、今のところOpenALが最適です。また、OpenALはクロスプラットフォームです。つまり、WinとMacで同じサウンドコードを使用できます。

于 2012-04-09T11:45:14.583 に答える