Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.09.2010, 13:48   #1
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию Позиция в BASS

В каком формате BASS возвращает позицию и длину файла, если передавать флаг BYTE_POS (флаг написал по памяти, тот кто знает поймет)?
Это точно не байты, и не связано с секундами вроде никак.
Как перевести в наше человеческое время?
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 18.09.2010, 14:36   #2
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

Не моё, но может поможет:
Код:
function qbass_gettime(const Channel: DWORD): DWORD;
var
  pPos: Cardinal;
  AllTime: Cardinal;
begin
  Result := 0;
  pPos := BASS_ChannelGetLength(Channel, BASS_POS_BYTE);
  if (pPos > 0) then
    begin
      Alltime := Trunc(BASS_ChannelBytes2Seconds(Channel, pPos));
      Result := Alltime;
    end;
end;
Получает длину трека, а в наше время переводит эта функа:
Код:
function qbass_formattime(const Sec: Integer;
  const IsURL: boolean): string;
(*******************************************
* RESULT: " 99:99" | "999:99" * | " Radio" *
*******************************************)
const
  time = ' 00:00';
  radio = ' Radio';
  null = '      ';
var
  H, M, S: Integer;
  Return: string;
begin
  if Sec = -1 then
    Return := null
  else
    if Sec < 0 then
      Return := time
    else
      if IsURL then
        Return := radio
      else
        begin
          H := Sec div 3600;
          S := Sec mod 3600;
          M := S div 60;
          M := M + (H * 60);
          S := (S mod 60);
          if M > 99 then Return := Format('%3d:%2.2d', [M, S])
          else Return := Format('%2.2d:%2.2d', [M, S]);
        end;
  Result := Return;
end;
Использовать:
Код:
var
  s:string;
  mCc,lng: DWORD;
begin
  mCc := BASS_StreamCreateFile(false, pointer(fail), 0, 0, 0 );
  try
    lng := qbass_gettime(mCc);
    s:= qbass_formattime(lng,false);
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Старый 18.09.2010, 17:02   #3
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

DIgorevich, спасибо, это - BASS_ChannelBytes2Seconds, то что надо.

Еще такой вопрос, как правильно определить что наступил конец трека? Банальным способом, т.е. в таймере проверять (позиция = длина), или как-то есть более хитрый способ?
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 18.09.2010, 17:55   #4
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

У ZuBy на сайте есть куча исходников с использованием Bass. Свой предыдущий код, я оттуда и содрал
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Старый 19.09.2010, 01:28   #5
inndim
Пользователь
 
Регистрация: 08.06.2008
Сообщений: 74
По умолчанию

Цитата:
Сообщение от mutabor Посмотреть сообщение
Еще такой вопрос, как правильно определить что наступил конец трека? Банальным способом, т.е. в таймере проверять (позиция = длина), или как-то есть более хитрый способ?
Ну, если не полениться и почитать хелп, то совсем не трудно найти функцию BASS_ChannelIsActive, с помощью которой можно решить данный вопрос, с использованием таймера разумеется, но это как вариант, ибо есть и другие способы.
Код:
if BASS_ChannelIsActive(Channel)=BASS_ACTIVE_STOPPED then
inndim вне форума Ответить с цитированием
Старый 19.09.2010, 09:51   #6
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

inndim, если уж ты начал умничать, то объясни тогда как программа будет отличать остановил пользователь воспроизведение или же это конец трека?
Да и вообще, такое впечатление, что тебя кто-то заставляет отвечать. Не хочешь не отвечай, это не обязанность.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 19.09.2010, 12:30   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а там же вроде можно регистрировать CallBack на событие окончания воспроизведения.
где то у нас на форуме видел(я просто Bass не использую)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.09.2010, 16:30   #8
inndim
Пользователь
 
Регистрация: 08.06.2008
Сообщений: 74
По умолчанию

Цитата:
Сообщение от mutabor Посмотреть сообщение
inndim, если уж ты начал умничать, то объясни тогда как программа будет отличать остановил пользователь воспроизведение или же это конец трека?
Да и вообще, такое впечатление, что тебя кто-то заставляет отвечать. Не хочешь не отвечай, это не обязанность.
Элементарно, обрабатывай событие нажатия пользователем кнопки стоп (ну или чего там у тебя пользователь жмёт), а конец трэка, как я и предложил тебе выше. В чём проблема-то?
Ну, или более сложно как предложил Пепел Феникса через CallBack, для этого пользуй например BASS_ChannelSetSync, приводить пример после твоего безосновательного хамства желания нет, он есть в хэлпе.
inndim вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Позиция Bat{CMD}_Men БД в Delphi 5 16.10.2009 18:32
Позиция ProgressBar'а Bayazet Мультимедиа в Delphi 1 11.06.2009 13:25
Позиция в файле на си Mixasik Помощь студентам 26 27.11.2008 01:13
Позиция курсора Arkuz Общие вопросы Delphi 2 11.10.2008 01:39
Позиция курсора Манжосов Денис :) Помощь студентам 3 25.04.2008 16:56