Конвертировать TMediaPlayer-> Duration в min: sec (FMX) - PullRequest
0 голосов
/ 21 февраля 2019

Я работаю с элементом управления TMediaPlayer1 в приложении FMX с использованием C ++ Builder 10.2 версии 25.0.29899.2631.Приведенный ниже код прекрасно работает в Win32 и дает ожидаемый результат после загрузки mp3-файла продолжительностью 35 минут 16 секунд.
enter image description here

Когда я запускаю этот же коддля iOS я получаю следующую ошибку:

[ошибка bcciosarm64] Unit1.cpp (337): использование перегруженного оператора '/' неоднозначно (с типами операндов 'Fmx :: Media :: TMediaTime' и 'int')

Вот мой код, который принимает TMediaPlayer1-> Duration и преобразует его в min: sec,

UnicodeString S = System::Ioutils::TPath::Combine(System::Ioutils::TPath::GetDocumentsPath(),"43506.mp3");
if (FileExists(S)) {
    MediaPlayer1->FileName = S;
    int sec = MediaPlayer1->Duration / 10000000;    // <-- this is problem line
    int min = sec / 60;
    sec = sec - (60 * min);
    lblEndTime->Text = IntToStr(min) + ":" + IntToStr(sec);       
}

Как должен делать это деление?

ОБНОВЛЕНИЕ 1: Я покопался и понял, как увидеть значения с помощью этого кода ниже.Когда я бегу на Win32, я получаю 21169987500 для длительности (35 минут, 16 секунд), и я получаю 10000000 для MediaTimeScale - оба правильные.Когда я запускаю на iOS, я получаю 0 для продолжительности и 10000000 для MediaTimeScale.Но если я сначала запускаю воспроизведение звука (например, MediaPlayer1->Play();), а затем запускаю эти 2 показательных сообщения, я получаю правильный результат для Длительности.

    MediaPlayer1->FileName = S;  // load the mp3
    ShowMessage(IntToStr((__int64) Form1->MediaPlayer1->Media->Duration));
    ShowMessage(IntToStr((__int64) MediaTimeScale));

Похоже, что Длительность не устанавливается на iOS, показвук на самом деле начинает играть.Я попробовал 5 секундную задержку после установки MediaPlayer1->Filename, но это не работает.Я попытался MediaPlayer1->Play(); с последующим MediaPlayer->Stop();, но это тоже не сработало.

Почему не задана длительность при назначении имени файла?Я хотел бы показать продолжительность до того, как пользователь начнет воспроизводить аудио.

...