我正在使用C ++ Builder 10.2版本25.0.29899.2631在FMX应用程序中使用TMediaPlayer1控件。下面的代码在Win32中运行良好,并在加载35分钟,16秒长的mp3文件后提供了预期的结果。
当我针对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();
),然后运行这两个showmessages,则我会得到持续时间正确的结果。
MediaPlayer1->FileName = S; // load the mp3
ShowMessage(IntToStr((__int64) Form1->MediaPlayer1->Media->Duration));
ShowMessage(IntToStr((__int64) MediaTimeScale));
在音频真正开始播放之前,似乎没有在iOS上设置“持续时间”。设置MediaPlayer1->Filename
后,我尝试了5秒的延迟,但这不起作用。我尝试了MediaPlayer1->Play();
后跟MediaPlayer->Stop();
,但是那也不起作用。
为什么在分配文件名时未设置工期?我想在用户开始播放音频之前显示持续时间。