Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Мультимедиа
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #16  
Старый 27.01.2012, 19:24
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

спасибо большое)
Ответить с цитированием
  #17  
Старый 27.01.2012, 22:16
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

вообще не получается(((( можете привести маленький примерчик?, заранее спс
Ответить с цитированием
  #18  
Старый 27.01.2012, 22:59
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Самый простой вариант, без использования CallBack-а:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, bass, StdCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    btn1: TButton;
    btn2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure btn1Click(Sender: TObject);
    procedure btn2Click(Sender: TObject);
  private
    { Private declarations }
  public
    procedure FreeStream;
    procedure PlayStream;
    procedure Play;
    function  LoadStream(FileName : String) : Boolean;
  end;

var
  Form1         : TForm1;
  Channel       : HSTREAM;
  Volume,
  FadeTimer     : Integer;
  PlaySync      : HSYNC;
  Dir           : String;
  Timer		: DWORD;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  if BASS_Init(-1, 44100, 0, Handle, NIL) = False then
    ShowMessage('Ошибка');

  GetDir(0, Dir);
  Channel   := 0;
  FadeTimer := 3000;
  Volume    := 100;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  BASS_Free;
end;

procedure TForm1.FreeStream;
begin
  if BASS_ChannelIsActive(Channel) = BASS_ACTIVE_PLAYING then
    BASS_ChannelSlideAttribute(Channel, BASS_ATTRIB_VOL, 0, FadeTimer);

  while BASS_ChannelIsSliding(Channel, BASS_ATTRIB_VOL) do
    Sleep(1);

  BASS_ChannelStop(Channel);
  // если канал воспроизводится, тормозим его
  BASS_StreamFree(Channel);
  // высвобождаем память
  Channel := 0;
end;

procedure TForm1.PlayStream;
begin
  case BASS_ChannelIsActive(Channel) of
    BASS_ACTIVE_STOPPED :
    begin
      Play;
    end;
  end;
end;

procedure TForm1.Play; //функция  воспроизведения канала давно загруженного в память
begin
  BASS_ChannelSetAttribute(Channel, BASS_ATTRIB_VOL, 0);
  BASS_ChannelPlay(Channel, False);
  BASS_ChannelSlideAttribute(Channel, BASS_ATTRIB_VOL, Volume / 100, FadeTimer);
end;

function TForm1.LoadStream(FileName : String) : Boolean;
var
  Time : DWORD;
begin
  if Channel <> 0 then
    FreeStream;

  Channel := BASS_StreamCreateFile(False, PChar(FileName), 0, 0, 0);
  Time    := Trunc(BASS_ChannelBytes2Seconds(Channel, BASS_ChannelGetLength(Channel, BASS_POS_BYTE)));

  Result := Channel <> 0;
end;

procedure TForm1.btn1Click(Sender: TObject);
begin
  if LoadStream(Dir + '\First.mp3') then
    PlayStream;
end;

procedure TForm1.btn2Click(Sender: TObject);
begin
  if LoadStream(Dir + '\Second.mp3') then
    PlayStream;
end;

end.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Этот пользователь сказал Спасибо angvelem за это полезное сообщение:
sariman (27.01.2012)
  #19  
Старый 27.01.2012, 23:32
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

странно, не проигрывается
Ответить с цитированием
  #20  
Старый 27.01.2012, 23:34
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

а не, ошибочка, все норм работает, спс большое
Ответить с цитированием
  #21  
Старый 27.01.2012, 23:38
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

У меня нормально играет.
Slide. 2Кб
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Этот пользователь сказал Спасибо angvelem за это полезное сообщение:
sariman (28.01.2012)
  #22  
Старый 28.01.2012, 00:26
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

все играет, а подскажите плз как сделать проверку и чем можно заменить sleep, а то если часто нажимать, зависает, как сделать, чтобы если текущая песня равняется, той которую запускает, то выходим из процедуры, а если нет то продолжаем?
Ответить с цитированием
  #23  
Старый 28.01.2012, 00:28
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

и можно еще один вопросик, как сделать чтобы, при завершении песни первого потока, за 3 секунды (ну или меньше) запускался второй?
Ответить с цитированием
  #24  
Старый 28.01.2012, 00:33
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

1. Какую проверку.
2. Так:
Код:
  while BASS_ChannelIsSliding(Channel, BASS_ATTRIB_VOL) do
  begin
    ProcessMessages;
    Sleep(1);
  end;
3. Тут, у кого какая фантазия, вариаций масса. Можно, к примеру, иметь переменную типа String где хранить имя текущей песни (в начале равна '') и при последующем нажатии копки, если не равно записать новое име и запустить загрузку и проигрывание.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Этот пользователь сказал Спасибо angvelem за это полезное сообщение:
sariman (28.01.2012)
  #25  
Старый 28.01.2012, 00:36
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

пишет undeclared identifier 'ProcessMessages' может надо в uses что-то прописать?
Ответить с цитированием
  #26  
Старый 28.01.2012, 00:38
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Application.ProcessMessages;
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Этот пользователь сказал Спасибо angvelem за это полезное сообщение:
sariman (28.01.2012)
  #27  
Старый 28.01.2012, 00:40
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

огромное спасибо, подскажите плз, как сделать чтобы, при завершении песни первого потока, за 3 секунды (ну или меньше) запускался второй?
Ответить с цитированием
  #28  
Старый 28.01.2012, 00:45
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Тут уже подобие PlayList-а нужно делать. Например, загрузить список песен в StringList и последовательно или рандомно проигрывать.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #29  
Старый 28.01.2012, 00:47
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

я понимаю, но как реализовать, не обязательно при завершение, просто если трек меняется?
Ответить с цитированием
  #30  
Старый 28.01.2012, 00:49
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Ну загрузи в ListBox и кликай.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 08:01.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter