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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.08.2010, 11:07   #1
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию Длительность трека через Bass.dll

Всем привет!
Получаю длительность трека, через Bass.dll вот такой функцией:
Код:
Function dlit(const fail:string): string;
var
  s:string;
  mCc: DWORD;
begin
  mCc := BASS_StreamCreateFile(false, pointer(fail), 0, 0, 0 );
  s:= qbass_formattime(qbass_gettime(mCc),false);
  mCc:=0;
  bass_streamfree(mcc);
  result:=s;
end;
Но она что-то оставляет в памяти, т.к. при большом кол-ве треков, программа при проходе этой функцией жрет о-очень много оперативки. Помогите, пожалуйста, разобраться в чем дело.
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Старый 30.08.2010, 14:20   #2
Дворник
Заблокирован
 
Регистрация: 03.08.2010
Сообщений: 30
По умолчанию

так а там же есть

Bass_...Lenght(Channel) - это сразу выдает длину трека в сек.
и есть
Bass_...Position(Channel) - это постепенно, по мере проигрывания трека. Только разумееться через Timer.
Т.е. к примеру возьмешь Gauge допустим, и сначало приравняшь Gauge.Max = Bass_...Length(Channel)
а затем в Timer
Gauge.Position = Bass_Position(Channel). И будет у тебя строка загрузки постепенно наростать до 100%.

p.s. извеняюсь что не столь точно Bass_..., просто не помню уже =)
Дворник вне форума Ответить с цитированием
Старый 30.08.2010, 14:37   #3
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

Не нашел я там такого простого способа. К тому же, мне надо пройтись по очень большому списку. Не проигрывать же для этого каждый раз файл....
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Старый 31.08.2010, 18:20   #4
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

Код:
function QBass_GetTime(const Channel: DWORD): DWORD; stdcall;
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;
вот так получай длину трека
Код:
var
  mch: dword;
  lng: dword;
begin
  mch := BASS_StreamCreateFile(false, pointer(fname), 0, 0, 0 );
try
  lng := qbass_gettime(mch);
  // тут преобразовывай время в строку
finally
  bass_streamfree(mch);
  mch := 0;
end;
end;
если чуть ошибся исправишь, писал на форуме
ZuBy вне форума Ответить с цитированием
Старый 31.08.2010, 21:08   #5
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

Цитата:
Сообщение от ZuBy Посмотреть сообщение
вот так получай длину трека

если чуть ошибся исправишь, писал на форуме
Спасибо, дорогой! Оказывается всё дело было в этих двух строках:
Код:
  bass_streamfree(mch);
  mch := 0;
поменял их местами и память освобождалась...
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
bass.dll larry Общие вопросы C/C++ 1 09.11.2009 13:23
Ошибка при выхове функций Bass.dll из другой DLL SalasAndriy Общие вопросы Delphi 7 21.10.2009 23:36
BASS DLL ygy Мультимедиа в Delphi 4 29.09.2009 04:39
BASS.DLL VintProg Мультимедиа в Delphi 2 21.09.2009 16:36
bass.dll Elem Мультимедиа в Delphi 18 19.07.2009 11:04