Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Время воспроизведения WMA потока в BASS 
:(
    Опции темы
Maks1509
Дата 8.12.2009, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 22.8.2007
Где: г. Тольятти

Репутация: нет
Всего: 5



Всем привет. Подскажите как узнать время воспроизведения 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. как сказано из документации. По форуму там ничего не нашел толкового.
PM MAIL ICQ   Вверх
kuzyara
Дата 8.12.2009, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 215
Регистрация: 13.11.2006

Репутация: нет
Всего: 1



хм... присоединяюсь!
я какраз такое же делать буду
--------------------
подпись
PM MAIL   Вверх
Maks1509
Дата 9.12.2009, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 22.8.2007
Где: г. Тольятти

Репутация: нет
Всего: 5



Хм, как оказалось все нормально оказывается, просто у меня в отдельном потоке проверялся HSTREAM и если проверять через (BASS_ChannelIsActive(...) = BASS_ACTIVE_PLAYING) WMA поток, почему-то функция некорректно отрабатывает. Пришлось проверять на неравенство нулю.

Вот вариант получше.

Код

function BassUtils_GetPlayingTime(stream: HSTREAM): DWORD;
var
  pos: int64;
  sec: FLOAT;
begin
  Result := 0;
  pos := BASS_ChannelGetPosition(stream, BASS_POS_BYTE);
  if (pos < 0) then
    pos := 0;
  sec := BASS_ChannelBytes2Seconds(stream, pos);
  Result := Round(1000 * sec);
end;

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0602 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.