2012-02-12 9 views
5

Delphi XE2 FireMonkey tarafından oluşturulan uygulamada Mac'te WAV dosyalarını nasıl oynatılacağınıza ilişkin örnekler veya örnekler var mı? Bu kod çalışmaz çünküMac'te Delphi XE2'den herhangi bir WAV ses çalma var mı?

soruyorum:

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; 

ben bellekten WAV dosya başlığını ve verilerin yüklenmesi ediyorum ve OpenAL'le ince oynar. Yani sorun NSSound kullanımımda bir yer. Herkes, Mac üzerinde Delphi XE2 ses çalma ile ilgili bazı çalışma örnekleri sunabilir mi?

+0

Bir fwaves kaydının formatının gerçek bir WAV dosyasının formatıyla tam olarak eşleşmediğini tahmin ediyorum. Dosyadan ham bayt kullanmayı deneyin. –

+0

Bunu denedim initFromFile (path_to_aiff) denedim. Hiçbir şey yardımcı olmadı. Bu yüzden sonunda OpenAL'e geçtim. – Kromster

cevap

0

yanı kimse yardımcı durumunda, bir cevap olarak yayınlamayın olabilirdi. Bu yüzden sonunda OpenAL'e geçtim.

Belki de gelecekte Embarcadero, NSSound'a erişmenin belirli bir yolunu düzeltir, ancak şimdilik OpenAL daha iyi çalışır. Ayrıca, OpenAL çapraz platformdur, yani Win ve Mac'te aynı ses kodunu kullanabilirim.

3

Freepascal/Lazarus, os-x C++ üstbilgileri dosyalarının pascal'e çevrilmesi ve yerel os-x işlevlerini çağırmanızı sağlayan "macosall.pas" adlı birime sahiptir.

Maalesef bu birim delphi'nin bir parçası değildir, ancak üniteyi açarak işlev bildirimini delphi'ye kopyalayabilir ve çalışmalıdır.

Elma makinelerinde medyanın ana merkezi olan hızlı API'da ihtiyacınız olanı bulacağınızı umuyorum. Ayrıca Apple developer'a bakın ve dokümanlara bakın.

Hiçbir şey yardımcı .. yanı initFromFile(path_to_aiff) çalıştı, o çalıştı:

+0

NSSound-NSData ile kote edilen kodda neyin yanlış olduğuna dair bir ipucu vermez. – Kromster

+0

iOS için C# ve mono kodlarken, aynı sorunların çoğunu farklı alanlarda yaşadım. TNSData orijinal Objective C sınıfı ile aynı yöntemlere sahipse, verileri bir NSStream, NSBuffer veya hatta metin olarak da itebilirsiniz. Yukarıdaki kodda, normal bir bayt ara bellek kullanırsanız, bir akıştan başlatmayı deneyin. Bir örnek, Apple Docs'a göre, herhangi bir NSdata nesnesini alması gereken posta gönderme iletişimidir - ancak çalıştığı bir akış kullanana kadar değildi. –

İlgili konular