Пятница, 19.04.2024, 16:25
Приветствую Вас Гость

Не ошибается тот, кто ничего не делает.
Но и ничего не делать - ошибка.

Эмиль Кроткий

Меню сайта
Категории раздела
Работа с библиотеками BASS и DirectShow [14]
Статьи по написанию mp3 плеера, видеоплеера, работе с WEB камерой и т.д.
Форма входа

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0


















Тиц
Главная » Статьи » Мультимедиа » Работа с библиотеками BASS и DirectShow

Delphi. Урок 1.3. Создаем mp3 player (проигрыватель) на основе библиотеки bass.dll.
Содержание
Краткая справка на русском языке по библиотеке bass.dll.
Урок 1.1. Создаем mp3 player (проигрыватель) на основе библиотеки bass.dll.
Целью данного урока является создание mp3 playera (проигрывателя) на основе библиотеки bass.dll.  В данном проекте я попытаюсь рассказать, как подключить библиотеку bass.dll, создать простейший PlayList, подключить кнопки (Play, Pause, Stop) для управления проигрыванием.

Урок 1.2. Создаем mp3 player (проигрыватель) на основе библиотеки bass.dll.
На этом уроке мы продолжим создавать mp3 player (проигрыватель). К нашему проекту подключим ScrollBar для перемотки музыки, регулятор громкости, баланса и сделаем выбор песен из PlayList.

Урок 1.3. Создаем mp3 player (проигрыватель) на основе библиотеки bass.dll.
На этом уроке мы подключим эквалайзер и сделаем визуализацию проигрывания трека для нашего mp3 проигрывателя.

Урок 1.4. Создаем mp3 player (проигрыватель) на основе библиотеки bass.dll.
На этом уроке мы научим наш проигрыватель сохранять настройки в ini файле.

 
Урок 1.3. Создаем mp3 player (проигрыватель) на основе библиотеки bass.dll.
 

На этом уроке мы подключим эквалайзер и сделаем визуализацию проигрывания трека для нашего mp3 проигрывателя.

 

 

 Создаем mp3 player (проигрыватель) на основе библиотеки bass.dll.


Начнем с начальных настроек TrackBar ов эквалайзера. Для этого в инспекторе объектов для всех десяти TrackBar ов эквалайзера устанавливаем свойство Min->0, Max->30, Position->15, TickMarks->tmBoth.

в разделе Var добавляем еще две переменные необходимые для настройки эквалайзера:

//переменные для настройки эквалайзера
  p: BASS_DX8_PARAMEQ;
  fx: array[1..10] of integer


Здесь и далее добавляемый код выделен красным цветом.

var
  Form_player: TForm_player;
  i:integer; //номер проигрываемой песни в playlist
  filename: string;//имя файла
  Channel    : DWORD;//
  Mode: TPlayerMode;//PlayMode
  //переменные для настройки эквалайзера
  p: BASS_DX8_PARAMEQ;
  fx: array[1..10] of integer


А в процедуре procedure TForm_Player.Player;

добавляем следующий код:


//настройка эквалайзера
    fx[1] := BASS_ChannelSetFX(channel, BASS_FX_DX8_PARAMEQ, 1); //первый канал эквалайзера
    fx[2] := BASS_ChannelSetFX(channel, BASS_FX_DX8_PARAMEQ, 1); //второй канал
    fx[3] := BASS_ChannelSetFX(channel, BASS_FX_DX8_PARAMEQ, 1);
    fx[4] := BASS_ChannelSetFX(channel, BASS_FX_DX8_PARAMEQ, 1);
    fx[5] := BASS_ChannelSetFX(channel, BASS_FX_DX8_PARAMEQ, 1);
    fx[6] := BASS_ChannelSetFX(channel, BASS_FX_DX8_PARAMEQ, 1);
    fx[7] := BASS_ChannelSetFX(channel, BASS_FX_DX8_PARAMEQ, 1);
    fx[8] := BASS_ChannelSetFX(channel, BASS_FX_DX8_PARAMEQ, 1);
    fx[9] := BASS_ChannelSetFX(channel, BASS_FX_DX8_PARAMEQ, 1);
    fx[10] := BASS_ChannelSetFX(channel, BASS_FX_DX8_PARAMEQ, 1);

    //настройка первого канала эквалайзера
    p.fGain :=15-trackbar3.Position; //усиление может изменяться от -15 до 15
    p.fBandwidth := 3; //ширина полосы пропускания
    p.fCenter := 80; //частота регулирования
    BASS_FXSetParameters(fx[1], @p);//применение заданных настроек

    //настройка второго канала эквалайзера
    p.fGain := 15-trackbar4.Position;
    p.fBandwidth := 3;
    p.fCenter := 170;
    BASS_FXSetParameters(fx[2], @p);
    //и т.д.

    p.fGain := 15-trackbar5.Position;
    p.fBandwidth := 3;
    p.fCenter := 310;
    BASS_FXSetParameters(fx[3], @p);

    p.fGain := 15-trackbar6.Position;
    p.fBandwidth := 3;
    p.fCenter := 600;
    BASS_FXSetParameters(fx[4], @p);

    p.fGain := 15-trackbar7.Position;
    p.fBandwidth := 3;
    p.fCenter := 1000;
    BASS_FXSetParameters(fx[5], @p);

    p.fGain := 15-trackbar8.Position;
    p.fBandwidth := 3;
    p.fCenter := 3000;
    BASS_FXSetParameters(fx[6], @p);

    p.fGain := 15-trackbar9.Position;
    p.fBandwidth := 3;
    p.fCenter := 6000;
    BASS_FXSetParameters(fx[7], @p);

    p.fGain := 15-trackbar10.Position;
    p.fBandwidth :=3;
    p.fCenter := 10000;
    BASS_FXSetParameters(fx[8], @p);

    p.fGain := 15-trackbar11.Position;
    p.fBandwidth := 3;
    p.fCenter := 12000;
    BASS_FXSetParameters(fx[9], @p);

    p.fGain := 15-trackbar12.Position;
    p.fBandwidth := 3;
    p.fCenter := 14000;
    BASS_FXSetParameters(fx[10], @p);





procedure TForm_Player.Player;
begin
//проверяем, если не пауза
if mode<>paused then begin
//то проверяем существует ли файл загружаемый из PlayList
//если файл не существует, то выходим
if not FileExists(FileName) then begin ShowMessage('Файл не существует');exit;end;
//останавливаем и освобождаем канал воспроизведения
BASS_ChannelStop(Channel);BASS_StreamFree(Channel);
//пытаемся загрузить файл и получить дескриптор канала
Channel := BASS_StreamCreateFile(FALSE, PChar(FileName), 0, 0, 0 {$IFDEF UNICODE} or BASS_UNICODE {$ENDIF});
//если дескриптор канала=0 (файл по какой то причине не может быть загружен),
//выдаем сообщение об ошибке и выходим
if Channel=0 then begin ShowMessage('Ошибка загрузки Файла'); exit; end;
end;

//настройка эквалайзера
    fx[1] := BASS_ChannelSetFX(channel, BASS_FX_DX8_PARAMEQ, 1);//первый канал эквалайзера
    fx[2] := BASS_ChannelSetFX(channel, BASS_FX_DX8_PARAMEQ, 1);//второй канал
    fx[3] := BASS_ChannelSetFX(channel, BASS_FX_DX8_PARAMEQ, 1);
    fx[4] := BASS_ChannelSetFX(channel, BASS_FX_DX8_PARAMEQ, 1);
    fx[5] := BASS_ChannelSetFX(channel, BASS_FX_DX8_PARAMEQ, 1);
    fx[6] := BASS_ChannelSetFX(channel, BASS_FX_DX8_PARAMEQ, 1);
    fx[7] := BASS_ChannelSetFX(channel, BASS_FX_DX8_PARAMEQ, 1);
    fx[8] := BASS_ChannelSetFX(channel, BASS_FX_DX8_PARAMEQ, 1);
    fx[9] := BASS_ChannelSetFX(channel, BASS_FX_DX8_PARAMEQ, 1);
    fx[10] := BASS_ChannelSetFX(channel, BASS_FX_DX8_PARAMEQ, 1);

    //настройка первого канала эквалайзера
    p.fGain :=15-trackbar3.Position; //усиление
    p.fBandwidth := 3; //ширина полосы пропускания
    p.fCenter := 80; //частота регулирования
    BASS_FXSetParameters(fx[1], @p);//применение заданных настроек

    //настройка второго канала эквалайзера
    p.fGain := 15-trackbar4.Position;
    p.fBandwidth := 3;
    p.fCenter := 170;
    BASS_FXSetParameters(fx[2], @p);
    //и т.д.

    p.fGain := 15-trackbar5.Position;
    p.fBandwidth := 3;
    p.fCenter := 310;
    BASS_FXSetParameters(fx[3], @p);

    p.fGain := 15-trackbar6.Position;
    p.fBandwidth := 3;
    p.fCenter := 600;
    BASS_FXSetParameters(fx[4], @p);

    p.fGain := 15-trackbar7.Position;
    p.fBandwidth := 3;
    p.fCenter := 1000;
    BASS_FXSetParameters(fx[5], @p);

    p.fGain := 15-trackbar8.Position;
    p.fBandwidth := 3;
    p.fCenter := 3000;
    BASS_FXSetParameters(fx[6], @p);

    p.fGain := 15-trackbar9.Position;
    p.fBandwidth := 3;
    p.fCenter := 6000;
    BASS_FXSetParameters(fx[7], @p);

    p.fGain := 15-trackbar10.Position;
    p.fBandwidth :=3;
    p.fCenter := 10000;
    BASS_FXSetParameters(fx[8], @p);

    p.fGain := 15-trackbar11.Position;
    p.fBandwidth := 3;
    p.fCenter := 12000;
    BASS_FXSetParameters(fx[9], @p);

    p.fGain := 15-trackbar12.Position;
    p.fBandwidth := 3;
    p.fCenter := 14000;
    BASS_FXSetParameters(fx[10], @p);


//командой BASS_ChannelPlay(Channel, False) пытаемся воспроизвести файл,
//если это невозможно, то выдаем сообщение об ошибке
if not BASS_ChannelPlay(Channel, False) then
            begin ShowMessage('Ошибка воспроизведения файла');exit;end;

//полоса проигрывания
    scrollbar1.Min:=0; //минимальное значение
    scrollbar1.Max:=bass_ChannelGEtLength(Channel, 0)-1;//максимальное значение

//присваеваем заголовку формы имя проигрываемого файла
Form_Player.Caption:=ExtractFileName(FileName);
 //Устанавливаем PlayMode - play
 mode:=play;
end;

procedure TForm_player.ScrollBar1Scroll(Sender: TObject;
  ScrollCode: TScrollCode; var ScrollPos: Integer);
begin
//устанавливаем позицию воспроизведения трека в зависимости от положения scrollbar
 bass_ChannelSetPosition(Channel, scrollbar1.position, 0);
end;



Для каждого TrackBar эквалайзера в событии OnChange пишем код:


procedure TForm_player.TrackBar3Change(Sender: TObject);
begin
BASS_FXGetParameters(fx[1], @p);//считываем параметры канала
p.fgain := 15-TrackBar3.position;//задаем усиление в зависимости от позиции TrackBar
BASS_FXSetParameters(fx[1], @p);//устанавливаем измененные параметры
end;


procedure TForm_player.TrackBar4Change(Sender: TObject);
begin
BASS_FXGetParameters(fx[2], @p);//считываем параметры канала
p.fgain := 15-TrackBar4.position;//задаем усиление в зависимости от позиции TrackBar
BASS_FXSetParameters(fx[2], @p);//устанавливаем измененные параметры
end;

procedure TForm_player.TrackBar5Change(Sender: TObject);
begin
BASS_FXGetParameters(fx[3], @p);//считываем параметры канала
p.fgain := 15-TrackBar5.position;//задаем усиление в зависимости от позиции TrackBar
BASS_FXSetParameters(fx[3], @p);//устанавливаем измененные параметры
end;

procedure TForm_player.TrackBar6Change(Sender: TObject);
begin
BASS_FXGetParameters(fx[4], @p);//считываем параметры канала
p.fgain := 15-TrackBar6.position;//задаем усиление в зависимости от позиции TrackBar
BASS_FXSetParameters(fx[4], @p);//устанавливаем измененные параметры
end;

procedure TForm_player.TrackBar7Change(Sender: TObject);
begin
BASS_FXGetParameters(fx[5], @p);//считываем параметры канала
p.fgain := 15-TrackBar7.position;//задаем усиление в зависимости от позиции TrackBar
BASS_FXSetParameters(fx[5], @p);//устанавливаем измененные параметры
end;

procedure TForm_player.TrackBar8Change(Sender: TObject);
begin
BASS_FXGetParameters(fx[6], @p);//считываем параметры канала
p.fgain := 15-TrackBar8.position;//задаем усиление в зависимости от позиции TrackBar
BASS_FXSetParameters(fx[6], @p);//устанавливаем измененные параметры
end;

procedure TForm_player.TrackBar9Change(Sender: TObject);
begin
BASS_FXGetParameters(fx[7], @p);//считываем параметры канала
p.fgain := 15-TrackBar9.position;//задаем усиление в зависимости от позиции TrackBar
BASS_FXSetParameters(fx[7], @p);//устанавливаем измененные параметры
end;

procedure TForm_player.TrackBar10Change(Sender: TObject);
begin
BASS_FXGetParameters(fx[8], @p);//считываем параметры канала
p.fgain := 15-TrackBar10.position;//задаем усиление в зависимости от позиции TrackBar
BASS_FXSetParameters(fx[8], @p);//устанавливаем измененные параметры
end;

procedure TForm_player.TrackBar11Change(Sender: TObject);
begin
BASS_FXGetParameters(fx[9], @p);//считываем параметры канала
p.fgain := 15-TrackBar11.position;//задаем усиление в зависимости от позиции TrackBar
BASS_FXSetParameters(fx[9], @p);//устанавливаем измененные параметры
end;

procedure TForm_player.TrackBar12Change(Sender: TObject);
begin
BASS_FXGetParameters(fx[10], @p);//считываем параметры канала
p.fgain := 15-TrackBar12.position;//задаем усиление в зависимости от позиции TrackBar
BASS_FXSetParameters(fx[10], @p);//устанавливаем измененные параметры
end;


Вот и все эквалайзе готов. Если вас не устраивает качество регулировки звука, то можно поиграть с параметрами p.fBandwidth и p.fCenter полосой пропускания и центральной частотой канала регулирования).

Далее делаем визуализацию проигрывания музыки. Для этого я использую готовую визуализацию из примеров по Bass.dll.

{ Spectrum Visualyzation by Alessandro Cappellozza
  version 0.8 05/2002
  http://digilander.iol.it/Kappe/audioobject}

немного переделав ее под свой проигрыватель.

В разделе Type добавим следующую строку:

TFFTData  = array [0..512] of Single;

type
  TFFTData  = array [0..512] of Single;
  TPlayerMode = (Stop, Play, Paused);
  TForm_player = class(TForm)
    pb1: TPaintBox;
    Label1: TLabel;


В разделе Var добавим строки

//переменные визуализации
FFTPeacks  : array [0..128] of Integer;
FFTFallOff : array [0..128] of Integer;


var
  Form_player: TForm_player;
  i:integer; //номер проигрываемой песни в playlist
  filename: string;//имя файла
  Channel    : DWORD;//
  Mode: TPlayerMode;//PlayMode
  //переменные для настройки эквалайзера
  p: BASS_DX8_PARAMEQ;
  fx: array[1..10] of integer;
  //переменные визуализации
  FFTPeacks  : array [0..128] of Integer;
  FFTFallOff : array [0..128] of Integer;


Создаем процедуру визуализации, для этого в разделе Type перед разделом private описываем процедуру Draw;

procedure Draw(HWND : THandle; FFTData : TFFTData; X, Y : Integer);

  private
    { Private declarations }

  public
    { Public declarations }
  end;

После раздела

implementation
{$R *.dfm}


Прописываем саму процедуру:

procedure TForm_Player.Draw(HWND : THandle; FFTData : TFFTData; X, Y : Integer);
        var i, YPos : LongInt; YVal : Single;
       begin
       //очистка области визуализации
          pb1.Canvas.Pen.Color := clBlack;
          pb1.Canvas.Brush.Color := clBlack;
          pb1.Canvas.Rectangle(0, 0, pb1.Width, pb1.Height);
       //визуализация
       // pb1.Canvas.Pen.Color := clRed;
         for i := 0 to 127 do begin // количество столбиков
           YVal := Abs(FFTData[i]);
           YPos := trunc((YVal) * 500);
           if YPos > pb1.Height then YPos := pb1.Height;

           if YPos >= FFTPeacks[i] then FFTPeacks[i] := YPos
             else FFTPeacks[i] := FFTPeacks[i] - 1;

           if YPos >= FFTFallOff[i] then FFTFallOff[i] := YPos
              else FFTFallOff[i] := FFTFallOff[i] - 3;
                     //рисование пика
                     pb1.Canvas.Pen.Color := clYellow;
                     pb1.Canvas.MoveTo(X + i*(3+1) , Y + pb1.Height - FFTPeacks[i]);
                     pb1.Canvas.LineTo(X + i*(3+1) + 3, Y + pb1.Height - FFTPeacks[i]);
                     //рисование столбика
                     pb1.Canvas.Pen.Color := clRed;
                     pb1.Canvas.Brush.Color := clRed;
                     pb1.Canvas.Rectangle(X + i*(3+1) , Y + pb1.Height - FFTFallOff[i], X + i*(3+1) + 3, Y + pb1.Height);

              end;

        end;



В событии OnTime компонента Timer1 добавим строки вызова визуализации
в var FFTFata : TFFTData;


в самой процедуре:

//вызов визуализации
BASS_ChannelGetData(Channel, @FFTFata, BASS_DATA_FFT1024);
Draw (pb1.Canvas.Handle, FFTFata, 0,-5);



procedure TForm_player.Timer1Timer(Sender: TObject);
var  FFTFata : TFFTData;
TrackLen, TrackPos: Double;
ValPos: Double;
ValLen: Double;
begin
//проверяем режим воспроизведения, если не Play то выходим
if mode<>play then Exit;

//воспроизведение следующей песни
//если время проигрывания равно длине песни по времени,
if  BASS_ChannelGetPosition(channel, 0)= BASS_ChannelGetLength(channel, 0) then

// в место  if  BASS_ChannelGetPosition(channel, 0)=BASS_ChannelGetLength(channel, 0) then
// можно сделать так: if  BASS_ChannelIsActive(channel)=BASS_ACTIVE_STOPPED   then
// Практика показывает, что второй вариант более предпочтительный,
// т.к. проверка по длине трека иногда приводит к ошибкам в работе плеера.
   begin
//то выбираем следующую песню из плейлиста
if i<ListBox1.Items.Count-1 then
   begin
    inc(i);
 Filename:=ListBox1.Items.Strings[i];
 ListBox1.ItemIndex:=i;
    mode:=stop;
    player;
   end
//если лист закончился - выходим
   else exit;
   end;

//вызов визуализации
BASS_ChannelGetData(Channel, @FFTFata, BASS_DATA_FFT1024);
Draw (pb1.Canvas.Handle, FFTFata, 0,-5);


//устанавливаем позицию scrollbar в зависимоти от позиции трека
scrollbar1.Position:=bass_channelGetPosition(channel,0);

//время проигрывания трека
//считаваем сколько секунд прошло от начала воспроизведения
TrackPos:=BASS_ChannelBytes2Seconds(Channel, BASS_ChannelGetPosition(Channel,0));
//считываем всю длину песню в секундах
TrackLen:=BASS_ChannelBytes2Seconds(Channel, BASS_ChannelGetLength(Channel,0));
//переводим секунды в часы
ValPos:=TrackPos / (24 * 3600);
ValLen:=TrackLen / (24 * 3600);
//Выводим данные о времени на форму в Label1 и Label2
Label1.Caption:=FormatDateTime('hh:mm:ss',ValPos);
Label2.Caption:=FormatDateTime('hh:mm:ss',ValLen);

//установка громкости звука
BASS_ChannelSetAttribute(Channel,BASS_ATTRIB_VOL, trackBar1.Position/10);
//установка баланса
BASS_ChannelSetAttribute(Channel,BASS_ATTRIB_PAN, Trackbar2.Position/5);

end;


в событии OnPaint компонента pb1(TPaintBox) пишем следующий код:

procedure TForm_player.pb1Paint(Sender: TObject);
 begin
//фон окна визуализации
  pb1.Canvas.Pen.Color:=clBlack; //цвет пера
  pb1.Canvas.Brush.Color:=clBlack;//цвет кисти
  pb1.Canvas.Rectangle(0,0,pb1.Width,pb1.Height); //рисуем прямоугольник фон
end;


На этом визуализация закончена.

Сохраняем и запускаем проект.

Исходники к уроку можно скачать здесь.

На следующем уроке мы научим наш проигрыватель сохранять настройки в ini файле.

 


Автор xaramamburu, сайт basicsprog.ucoz.ru

 

 

 

 

 

 

 

Категория: Работа с библиотеками BASS и DirectShow | Добавил: xaramamburu (18.07.2011)
Просмотров: 18550 | Комментарии: 25 | Рейтинг: 4.8/5
Всего комментариев: 251 2 »
20 Kr()N  
0
Имел в виду процедуру визуализации, Draw. Прошу прощения за неточность.

21 xaramamburu  
0
В примере есть алгоритмические косяки, но ошибок вроде не было (тестируйте исходник). В вашем случае ошибка означает:
Invalid floating point operation (Недопустимая операция с плавающей запятой) .

Возможные причины сообщения:

аргумент функций TRUNC или ROUND не может быть преобразован в целое
число, находящееся внутри диапазона типа LONGINT (от -2147483648 до
+2147483647);
отрицательный аргумент функции SQRT (извлечение квадратного корня);
аргумент функции LN (логарифм) равен нулю или имеет отрицательное значение;
произошло переполнение стека сопроцессора.

К сожалению вы не указываете какая именно строка вызывает эту ошибку. Сказать, что подробнее можно только тестируя ваш исходник.)))))

22 Kr()N  
0
Проблема в том, что компилятор на даёт номера строки, содержащей ошибку. Единственное, что без объявления процедуры Draw прога работает корректно. Кстати, на моём Delphi 2010 ваш исходник работать не хочет... "There are errors". Быть может, Вы программу совсем на другом Delphi писали? тогда я жестоко затупил... Ошибка с плавающей точкой идёт у меня и на приложении Delphi 7, и на 2010.

23 xaramamburu  
0
Исходник написан на Rad Studio Delphi 2010. Если судить по комментариям, а их больше 100 по всем урокам, то такая ошибка возникает только у вас. Что бы определить строку с ошибкой, можно последовательно комментировать смысловые блоки и смотреть когда ошибка исчезнет или запустить выполнение по клавише F7 используя построчное выполнение кода, нажимая F7 ищите строку после которой программа вылетает. Можете скинуть ваш исходник мне на почту xaramamburu@list.ru , попробую помочь. Да, при скачивании исходников, иногда их нужно почистить т.е. оставить там файлы с расширением pas, dpr, dfm и dll. Просто я иногда забываю это делать, а это может приводить к ошибкам при запуске на другом компьютере в Delphi из-за того, что конфигурация установленных компонентов может быть разная.))))

24 Kr()N  
0
Спасибо smile Я могу скинуть только второй исходник, который делал по вашему образцу на 2010м - чисто чтобы проверить, будет ли работать корректно процедура Draw. Тот, что на 2007, выполнен с использованием Alpha Skins, поэтому не знаю, будут ли компоненты у вас отображаться или нет, но ошибка там такая же...

25 xaramamburu  
0
Смотрите почту. У вас проблема с проверкой активности канала в процедуре таймера, точнее ее совсем нет.)))

19 Kr()N  
1
Здравствуйте. Ругается на процедуру - Invalid floating point operation. Сделал всё так, как показано в примере.

18 alexpac  
0
http://jqbook.narod.ru/files/delphi_bass/fx_vis.jpg << - скриншот

http://jqbook.narod.ru/files/delphi_bass/bassSimpleFX_VIS.zip << - исходник

17 саша  
0
спасибо за визуализацию

15 BM_GORA  
0
При запуске выдает вот это:

[DCC Error] mp3.pas(90): E1030 Invalid compiler directive: 'FFTPeacks'
[DCC Error] mp3.pas(340): E2004 Identifier redeclared: 'TForm_player.TrackBar7Change'
[DCC Error] mp3.pas(67): E2065 Unsatisfied forward or external declaration: 'TForm_player.TrackBar8Change'
[DCC Error] mp3player.dpr(5): F2063 Could not compile used unit 'mp3.pas'

Подскажите что делать плиз

16 BZ  
0

13 Василий  
0
Draw (pb1.Canvas.Handle, FFTFata, 0,-5);

Что значит 0 и -5

14 xaramamburu  
0
0 - задает смещение левого нижнего угла диаграммы визуализации по X, а -5 - поднимает на 5 точек диаграмму вверх по Y. Поэкспериментируйте с этими числами и все поймете.))))

8 Nem  
0
Здравствуйте. Пишу плеер на вашем уроке. Даже уже написал благодоря вашему уроку. Все отлично работает. Но мне этого мало. Я решел сделать эквалайзер на form2 и эффекты(reverb,echo,flanger)
Сам вопрос:
Разместил тракбары на form2, прописал коды которые в вашем уроки в Unit2, подключил bass в 2 х юнитах и Uses form1 прописал Unit2, но настройки эквалайзера а также эффектов не работают. Если эквалайзер и эффекты добавляю на form1 работает все нормально. Программа сама работает и открывает form2 но начинаю настраивать нечего не происходит.

Помогите уже во всех поисковиках перерыл нечего найти немогу подобного. Может как то нужно form2 включить чтобы он настройки посылал на form1. Да еще я новичек в программировании но все схватываю на лету СПС.

9 xaramamburu  
1
Вот посмотрите здесь, я специально вынес эквалайзер на отдельную форму. Думаю разберетесь. smile

10 Filo$oF  
0
Как и обещал, возник ещё вопрос smile
Вынести эквалайзер на вторую форму получилось, правда не с первого раза, но я разобрался, где и что. Теперь, хочу так же вынести плей лист на отдельную форму... но, что-то не выходит sad

Сперва настройки эквалайзера на отдельной странице не хотели сохраняться, но это я исправил. smile

11 Filo$oF  
0
Точнее, добавить получается, но как только удаляю listBox с основной формы, программа начинает ругаться
на этой строчке:
if i<ListBox1.Items.Count-1 then

12 xaramamburu  
0
Так и должно быть, ведь компонента ListBox1 больше на форме нет, вы его перенесли на другую форму. Поэтому вы теперь должны обращаться к нему добавив впереди имя формы на которой он находится, как то так if i<имя формы.ListBox1.Items.Count-1 then.
Просьба, по возможности задавайте вопросы на форуме, создав соответствующую тему, если она еще не создана.))))

6 Джон  
0
спасибо ВАМ за ваши уроки лучше сайта я пока не нашел

7 xaramamburu  
0
Я рад, что смог быть Вам полезен.))))

4 Elena  
0
Здравствуйте! У меня опять проблема, почему-то не показывает текущее время трека и нет визуализации(((. Подскажите, пожалуйста. Я бы скинула вам, то что получилось, но не знаю куда.

5 xaramamburu  
0
Моя почта xaramamburu@list.ru

3 Elena  
0
Вроде получилось! Спасибо! Переделала старый код и все. Видимо просто где-то ошиблась))) Спасибо за урок! На основе урока готовлю свой проект)))

1-10 11-11
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск
Наш опрос
Оцените мой сайт
Всего ответов: 585
Уголок общения



Copyright MyCorp © 2024Конструктор сайтов - uCoz