2012-02-12 2 views
5

Есть ли какие-либо уроки или примеры того, как воспроизводить WAV-файлы на Mac из приложения, созданного Delphi XE2 FireMonkey?Есть ли WAV-звук на Mac с Delphi XE2?

Я спрашиваю потому, что этот код не работает:

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. Могу ли я предложить некоторые рабочие примеры воспроизведения звука Delphi XE2 на Mac?

+0

Я предполагаю, что формат записи в формате fwaves точно не соответствует формату фактического файла WAV. Попробуйте использовать необработанные байты из файла. –

+0

Пробовал это, а также попробовал initFromFile (path_to_aiff) .. Ничего не помогло. Поэтому я, наконец, переключился на OpenAL. – Kromster

ответ

0

Мог бы также опубликовать его в качестве ответа, в случае, который помогает никому:

Пробовал, что, как хорошо отработаны initFromFile(path_to_aiff) .. Ничего не помогало. Поэтому я, наконец, переключился на OpenAL.

Возможно, в будущем Embarcadero исправляет этот особый способ доступа к NSSound, но на данный момент OpenAL работает лучше всего. Кроме того, OpenAL является кросс-платформенным, что означает, что я могу использовать тот же звуковой код для Win и Mac.

3

Freepascal/Lazarus имеет блок под названием «macosall.pas», который представляет собой трансляцию заголовочных файлов os-x C++ на pascal, позволяя вам называть собственные функции os-x.

К сожалению, это устройство не является частью delphi, но, открыв устройство, вы можете скопировать объявление функции в delphi, и оно должно работать.

Я ожидаю, что вы найдете то, что вам нужно в API QuickTime, который является центральным центром медиа на яблочных машинах. Также проверьте Apple developer и посмотрите документы.

+0

Что не дает мне понять, что случилось с NSSound-NSData в цитируемом коде. – Kromster

+0

Хотя кодирование в C# и моно для iOS, я столкнулся с некоторыми из тех же проблем, но в разных областях. Если TNSData имеет те же методы, что и исходный класс Objective C, вы можете использовать данные как NSStream, NSBuffer или даже текст. В приведенном выше коде вы используете обычный байтовый буфер, попробуйте инициализировать поток. Одним из примеров является диалог отправки почты, который в соответствии с документами apple должен принимать практически любой объект NSdata, но это было только до тех пор, пока я не использовал поток, в котором он работал. –

Смежные вопросы