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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2009, 13:40   #1
SoftKoc
Форумчанин
 
Аватар для SoftKoc
 
Регистрация: 07.11.2009
Сообщений: 218
Вопрос Закончилась ли песня? Bass.DLL

!Здравствуйте!


Подскажите пожалуйста как можно узнать закончилась ли песня ( Bass.DLL ). Для того что бы запустить следующую песню!

И если есть какие-то методы что бы это все не нужно было проверять по таймеру!
А если нет тогда вообще какие есть?

!Заранее очень благодарен!
Я бы изменил мир, но Бог не дает исходников...
Если помог, нажми на весы и поставь плюс - в знак благодарности
SoftKoc вне форума Ответить с цитированием
Старый 23.11.2009, 21:28   #2
856100
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 135
По умолчанию

Методов нет, но за то можно сравнивать позицию песни с ее длиной, и если позиция равна длине, то значит песня закончилась.
Код:
if BASS_ChannelGetPosition(chanel, 0)=BASS_ChannelGetLength(channel, 0) then
 ShowMessage('конец песни');
Будь проще, бери пример с одноклеточных
856100 вне форума Ответить с цитированием
Старый 24.11.2009, 08:01   #3
SalasAndriy
Форумчанин Подтвердите свой е-майл
 
Аватар для SalasAndriy
 
Регистрация: 01.11.2007
Сообщений: 157
По умолчанию

Используйте функцию:
Код:
HSYNC BASS_ChannelSetSync(
    DWORD handle,
    DWORD type,
    QWORD param,
    SYNCPROC *proc,
    void *user
);
с флагом BASS_SYNC_END... По-моему так если не ошибаюсь!
а так же proc функцию реализуйте...
Вообщем копайте в этом направлении)
SalasAndriy вне форума Ответить с цитированием
Старый 25.11.2009, 09:19   #4
SoftKoc
Форумчанин
 
Аватар для SoftKoc
 
Регистрация: 07.11.2009
Сообщений: 218
Восклицание

Цитата:
Сообщение от 856100 Посмотреть сообщение
Методов нет, но за то можно сравнивать позицию песни с ее длиной, и если позиция равна длине, то значит песня закончилась.
Код:
if BASS_ChannelGetPosition(chanel, 0)=BASS_ChannelGetLength(channel, 0) then
 ShowMessage('конец песни');
Пробовал такой метод! Но не знаю он мне кажется не эффективен.
И при этом всем он не действует, песня заканчивается и начинает заново проигрываться (повторяется)!
Я бы изменил мир, но Бог не дает исходников...
Если помог, нажми на весы и поставь плюс - в знак благодарности
SoftKoc вне форума Ответить с цитированием
Старый 25.11.2009, 09:38   #5
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

а собственно без этого метода песни идут по списку? может быть у вас флаг LOOP стоит на проигрывание и приведенная синхронизация SalasAndriy ни причем?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 25.11.2009, 09:48   #6
SoftKoc
Форумчанин
 
Аватар для SoftKoc
 
Регистрация: 07.11.2009
Сообщений: 218
Сообщение

Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
if not BASS_Init(-1, 44100, 0, Handle, nil) then
 begin
  Halt;
 end;
end;

Procedure Play(const FileName: String);
Var
 FFileName: PChar;
Begin
   If not FileExists(FileName) then
    Begin
     Exit;
    End;
   FFileName:= PChar(FileName);
   If Chennel <> 0 then
    Begin
      BASS_ChannelStop(Chennel);
      BASS_StreamFree(Chennel);
      Chennel:=0;               
    End;
   Chennel:=BASS_StreamCreateFile(False, FFileName, 0, 0, 0);
   If Chennel = 0 then
    Begin
     MessageBox(0, 'Ошибка загрузки файла', 0, MB_OK or MB_ICONSTOP);
     Exit;
    End;
   If not (BASS_ChannelPlay(Chennel, False)) then
    Begin
     MessageBox(0, 'Ошибка воспроизведения файла', 0, MB_OK or MB_ICONSTOP);
     Exit;
    End;
End;

procedure TForm1.FormDestroy(Sender: TObject);
begin
BASS_Free;
end;
Вот код!
Я бы изменил мир, но Бог не дает исходников...
Если помог, нажми на весы и поставь плюс - в знак благодарности
SoftKoc вне форума Ответить с цитированием
Старый 25.11.2009, 10:46   #7
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

хороший код... и где же по вашему обработка списка файлов?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 25.11.2009, 10:52   #8
SoftKoc
Форумчанин
 
Аватар для SoftKoc
 
Регистрация: 07.11.2009
Сообщений: 218
По умолчанию

Обработку я не выложил!
У меня на форме лежит ListBox с адресами. Все уже написал и процедуру перехода, но ее нужно вызывать при окончании трека! А вот как узнать окончился трек или нет?
Я бы изменил мир, но Бог не дает исходников...
Если помог, нажми на весы и поставь плюс - в знак благодарности
SoftKoc вне форума Ответить с цитированием
Старый 25.11.2009, 11:17   #9
SoftKoc
Форумчанин
 
Аватар для SoftKoc
 
Регистрация: 07.11.2009
Сообщений: 218
По умолчанию

Код:
IF ListBox1.ItemIndex <> ListBox1.Count - 1 Then
  Begin
   ListBox1.ItemIndex:=ListBox1.ItemIndex + 1;
   Play(ListBox2.Items[ListBox1.ItemIndex]);
  End;
Вот что в процедуре перехода!
Я бы изменил мир, но Бог не дает исходников...
Если помог, нажми на весы и поставь плюс - в знак благодарности
SoftKoc вне форума Ответить с цитированием
Старый 25.11.2009, 12:27   #10
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

вам же выше привели способы, даю еще один:
Код:
function proverka: boolean;
begin
 result:= false;
 if Chennel>0 then
   case BASS_ChannelIsActive(Chennel) of
     BASS_ACTIVE_PLAYING : result:= false
     BASS_ACTIVE_STOPPED: result:= true
  end
end;
при этом Chennel должен быть заранее загружен, то есть вы должны выделить нужный в списке, это уже и сами знаете... по срабатыванию <proverka> в таймере - делаете переход на следующий + нужно учесть возможность того, если пользователь вручную нажмет СТОП.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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