2012-02-12 14 views
5

Delphi XE2 FireMonkeyで作成されたアプリケーションから、Mac上でWAVファイルを再生する方法に関するチュートリアルや例はありますか?Delphi XE2から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

私は、fwavesレコードのフォーマットが実際のWAVファイルのフォーマットと正確に一致しないと推測しています。ファイルから生のバイトを使ってみてください。 –

+0

また、initFromFile(path_to_aiff)も試してみました。何も助けてくれませんでした。だから私はついにOpenALに切り替えました。 – Kromster

答えて

0

も同様に誰も助け場合には、答えとしてそれを投稿可能性があります。だから私はついにOpenALに切り替えました。

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

3

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

悲しいことに、このユニットはデルファイの一部ではありませんが、ユニットを開くことによって関数宣言をdelphiにコピーすることができます。

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

は何も助けない...だけでなくinitFromFile(path_to_aiff)を試してみました、ことをしようとしました:

+0

NSSound-NSDataの引用符で囲まれたコードで何が間違っているのかわかりません。 – Kromster

+0

iOSの場合はC#とmonoでコーディングしていましたが、私は同じ問題の多くをさまざまな分野で経験しました。 TNSDataに元のObjective Cクラスと同じメソッドがある場合は、データをNSStream、NSBuffer、またはテキストのいずれかとしてプッシュできます。上記のコードでは通常のバイトバッファを使用していますが、ストリームから初期化してみてください。 1つの例はメール送信ダイアログです。リンゴのドキュメントによれば、NSdataオブジェクトはどれも取るべきですが、それが働いていたストリームを使用するまではありませんでした。 –

関連する問題