Всем привет. Подскажите как узнать время воспроизведения WMA потока в BASS. Для MP* потоков использую такую функцию:
| Код | function BassFunc_GetPlayingTime(stream: HSTREAM): DWORD; var iPos: Int64; fPos: FLOAT; begin iPos := BASS_ChannelGetPosition(stream, BASS_POS_BYTE); if (iPos <= 0) then Result := 0 else begin fPos := BASS_ChannelBytes2Seconds(stream, iPos); Result := Round(1000 * fPos); end; end;
|
Потом все это дело используется в функции для удобочитаемости:
| Код | function FormatTimeW(GetTickTime: DWORD): WideString; begin GetTickTime := GetTickTime div 1000; // Millisec to Seconds Result := FormatW('%.2d', [GetTickTime mod 60]); GetTickTime := GetTickTime div 60; // Seconds to Minutes Result := FormatW('%.2d:%s', [GetTickTime mod 60, Result]); GetTickTime := GetTickTime div 60; // Minutes to Hours Result := FormatW('%.2d:%s', [GetTickTime mod 24, Result]); end;
|
Хорошо тем что если происходит прерывание потока (ну например плохое соединение/загрузка ети/еще что-нибудь), то мы точно знаем какая позиция у "файла" и покажем время вопроизведения - не надо заморачиваться всяким таймером и следить за активностью потока вслучае его остановки. Вслучае BASS_ChannelGetPosition с WMA возвращается -1. как сказано из документации. По форуму там ничего не нашел толкового. |