64 / 40 / 10
Регистрация: 12.11.2010
Сообщений: 841
1

Визуализация - как реализовать эквалайзер (bass.dll)

19.11.2011, 08:35. Показов 6361. Ответов 5
Метки нет (Все метки)

Все доброго времени суток. Кто может подсказать, как реализовать эквалайзер? Нашёл тут по темам вот такой код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
PaintBox1->Canvas->Brush->Color = clBtnFace;
   PaintBox1-> Canvas->FillRect ( Canvas->ClipRect );
 
    int x = random ( 0x80 );
    int y = random ( 0x80 );
    int z = random ( 0x80 );
    int v = random ( 0x80 );
    int d = random ( 0x80 );
    int b = random ( 0x80 );
 
 
    int p = 24;
    PaintBox1->Canvas->Pen->Color = clTeal;
    PaintBox1->Canvas->Brush->Color = clAqua;
    PaintBox1->Canvas->Rectangle( p*1, 0x80, p*1.5, 0x80 - x );
 
    PaintBox1->Canvas->Brush->Color = clGray;
    PaintBox1->Canvas->Rectangle( p*2, 0x80, p*2.5, 0x80 - y );
 
    PaintBox1->Canvas->Brush->Color = clAqua;
    PaintBox1->Canvas->Rectangle( p*3, 0x80, p*3.5, 0x80 - z );
 
    PaintBox1->Canvas->Brush->Color = clGray;
   PaintBox1->  Canvas->Rectangle( p*4, 0x80, p*4.5, 0x80 - v );
 
   PaintBox1->  Canvas->Brush->Color = clAqua;
    PaintBox1->Canvas->Rectangle( p*5, 0x80, p*5.5, 0x80 - d );
 
    PaintBox1->Canvas->Brush->Color = clGray;
    PaintBox1->Canvas->Rectangle( p*6, 0x80, p*6.5, 0x80 - b );
 
    PaintBox1->Canvas->Pen->Color = clBtnFace;
    PaintBox1->Canvas->Brush->Color = clBtnFace;
    PaintBox1->Color=clHighlight;
    for ( int i = 0; i < 0x80; i += 5 )
    PaintBox1->Canvas->Rectangle( 0, i, p*6, i + 2 );
Но при его использование, он просто рисует картинку без привязки к музыке, но собственно это видно и в коде. Ещё минус в том что фон на котором "пляшет" эта диограма не меняется фон. Кто знает как привязать его к потоку играющей музыки и сменить фон под ним? И может ли кто нибудь скинуть исходник эквалайзера, а то облазил по поисковикам гору страниц, нашёл как использовать bass.dll но нигде не написано как привязать этот файл к регуляторам. Буду очень признателен за помощь в этом вопросе.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.11.2011, 08:35
Ответы с готовыми решениями:

Эквалайзер (bass.dll) - Cannot convert BASS_DX8_PARAMEQ to const void
fx = BASS_ChannelSetFX(stream, BASS_FX_DX8_PARAMEQ, 1); fx = BASS_ChannelSetFX(stream,...

Визуализация с использованием bass.dll
Как сделать визуализацию на bass.dll

Waveform Визуализация на базе Bass.dll
Привет народ. Кто шарит в Bass.dll? у меня версия 2.4 Пытаюсь сделать waveform визуализацию...

Куда закинуть bass.dll,bass.h,bass.lib
Ребят, пересмотрел темы на форуме, гуглил, толком ничего не нашел. Собственно такая проблема, вот я...

5
LK
Заблокирован
19.11.2011, 09:31 2
увы, делфий ... полной халявы, как правило, нет ...
TBASSPlayer v.2.10
ызхаднык :D
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
unit test;
 
interface
 
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ComCtrls, StdCtrls, Bass, ExtCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    Panel1: TPanel;
    Label5: TLabel;
    Label6: TLabel;
    TrackBar4: TTrackBar;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure TrackBar4Change(Sender: TObject);
    procedure updateeq(sender:Tobject);
  private
    { Private declarations }
    chan: DWORD;
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  p: BASS_DX8_PARAMEQ;
  pR: BASS_DX8_REVERB;
  fx: array[1..19] of integer;
  eq: array[1..18] of Tscrollbar;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
var
  p1: BASS_CHANNELINFO;
  i:integer;
begin
  If OpenDialog1.Execute then begin
    // free both MOD and stream, it must be one of them! :)
    BASS_MusicFree(chan);
    BASS_StreamFree(chan);
    chan := BASS_StreamCreateFile(FALSE, PChar(OpenDialog1.FileName), 0, 0, BASS_SAMPLE_FX or BASS_SAMPLE_LOOP);
    if (chan = 0) then
      chan := BASS_MusicLoad(FALSE, PChar(OpenDialog1.FileName), 0, 0, BASS_MUSIC_LOOP or BASS_MUSIC_RAMP or BASS_SAMPLE_FX,0);
    if (chan = 0) then
    begin
      // not a WAV/MP3 or MOD
      Button1.Caption := 'Can''t play the file! Please select another.';
      Exit;
    end;
    if (p1.flags and BASS_SAMPLE_8BITS) > 0 then
    begin
      // not 16-bit stereo
      Button1.Caption := '16-bit stereo sources only. Please select another.';
      BASS_MusicFree(chan);
      BASS_StreamFree(chan);
      Exit;
    end;
    Button1.Caption := OpenDialog1.FileName;
    for i:= 1 to 18 do
      fx[i] := BASS_ChannelSetFX(chan, BASS_FX_DX8_PARAMEQ, 1);
 
    fx[19] := BASS_ChannelSetFX(chan, BASS_FX_DX8_REVERB, 1);
    // Set equalizer to flat and reverb off to start
 
    p.fGain := 0;
    p.fBandwidth := 1;
    p.fCenter := 31;
    BASS_FXSetParameters(fx[1], @p);
    p.fCenter := 63;
    BASS_FXSetParameters(fx[2], @p);
    p.fCenter := 125;
    BASS_FXSetParameters(fx[3], @p);
    p.fCenter := 170;
    BASS_FXSetParameters(fx[4], @p);
    p.fCenter := 250;
    BASS_FXSetParameters(fx[5], @p);
    p.fCenter := 310;
    BASS_FXSetParameters(fx[6], @p);
    p.fCenter := 600;
    BASS_FXSetParameters(fx[7], @p);
    p.fCenter := 1000;
    BASS_FXSetParameters(fx[8], @p);
    p.fCenter := 1500;
    BASS_FXSetParameters(fx[9], @p);
    p.fCenter := 2000;
    BASS_FXSetParameters(fx[10], @p);
    p.fCenter := 3000;
    BASS_FXSetParameters(fx[11], @p);
    p.fCenter := 4000;
    BASS_FXSetParameters(fx[12], @p);
    p.fCenter := 6000;
    BASS_FXSetParameters(fx[13], @p);
    p.fCenter := 8000;
    BASS_FXSetParameters(fx[14], @p);
    p.fCenter := 10000;
    BASS_FXSetParameters(fx[15], @p);
    p.fCenter := 12000;
    BASS_FXSetParameters(fx[16], @p);
    p.fCenter := 14000;
    BASS_FXSetParameters(fx[17], @p);
    p.fCenter := 16000;
    BASS_FXSetParameters(fx[18], @p);
 
 
 
    BASS_FXGetParameters(fx[19], @pR);
    pR.fReverbMix := -96;
    pR.fReverbTime := 1200;
    pR.fHighFreqRTRatio := 0.1;
    BASS_FXSetParameters(fx[19], @pR);
 
    // play both MOD and stream, it must be one of them! :)
    BASS_ChannelPlay(chan, False);
  end;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
    // check the correct BASS was loaded
    if (HIWORD(BASS_GetVersion) <> BASSVERSION) then
    begin
        MessageBox(0,'An incorrect version of BASS.DLL was loaded',0,MB_ICONERROR);
        Halt;
    end;
  // setup output - default device, 44100hz, stereo, 16 bits
  if not BASS_Init(-1, 44100, 0, handle, nil) then
  begin
    Application.MessageBox('Can''t initialize device','Bass Initialize problem');
    Halt;
  end
  else
    BASS_Start;
  // Adjust buffer size to balance 'clicks' vs. response time, slower computers need bigger
  BASS_SetConfig(BASS_CONFIG_BUFFER,1000);
 
//Создание ползунков
  for i:=1 to 18 do
  begin
    eq[i]:=TScrollBar.Create(Self);
    eq[i].Parent:=panel1;
    eq[i].Kind:=sbVertical;
    eq[i].Top:=20;
    eq[i].Height:=100;
    eq[i].Width:=10;
    eq[i].Left:=10+12*i;
    eq[i].OnChange:=updateeq;
    eq[i].Tag:=i;
    eq[i].Max:=31;
    eq[i].Position:=15;
  end;
 
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
var i:integer;
begin
  Bass_Stop();
  BASS_StreamFree(chan);
  BASS_MusicFree(chan);
  BASS_Free();
  for i:= 1 to 18 do
    eq[i].Free;
end;
 
procedure TForm1.TrackBar4Change(Sender: TObject);
var
    v: integer;
begin
    v := TrackBar4.position;
    BASS_FXGetParameters(fx[19], @pR);
    // give exponential quality to trackbar as Bass more sensitive near 0
    pR.fReverbMix := -0.012*v*v*v; // gives -96 when bar at 20
    BASS_FXSetParameters(fx[19], @pR);
    Label5.Caption := inttostr(20-TrackBar4.position);
end;
 
procedure TForm1.updateeq(sender: Tobject);
var i:integer;
begin
i:=(sender as TScrollbar).tag;
    BASS_FXGetParameters(fx[i], @p);
    p.fgain := 15-eq[i].position;
    BASS_FXSetParameters(fx[i], @p);
end;
 
end.
Вложения
Тип файла: zip bass_example.zip (686.6 Кб, 346 просмотров)
1
365 / 247 / 24
Регистрация: 03.04.2011
Сообщений: 558
Записей в блоге: 1
19.11.2011, 11:15 3
как правило на сайте басс все есть в исходниках есть пример на с++ как сделать эквалайзер
1
64 / 40 / 10
Регистрация: 12.11.2010
Сообщений: 841
19.11.2011, 17:07  [ТС] 4
Это точно С++? Там в папке "С" лежат .cpp, но там незнакомых мне тегов больше чем где бы то нибыло.. В папке "delphi" лежат более понятного вида исходники, но только в delphi я вообще ноль...
0
365 / 247 / 24
Регистрация: 03.04.2011
Сообщений: 558
Записей в блоге: 1
19.11.2011, 17:26 5
там окно строится на WinAPI все просто, только немного теории, да это и не главное, главное разобрать как получить значения эквалайзера
0
1 / 1 / 0
Регистрация: 07.04.2012
Сообщений: 16
13.05.2012, 01:11 6
DrSMERTb, вы делали визуализацию, взгляните пожалуйста Подскажите, как сделать чтобы работало
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.05.2012, 01:11
Помогаю со студенческими работами здесь

Где взять bass.dll bass.lib for win64
Приветствую. Тут много тем было на эти вопросы , но ответа не нашел. Где можно и вообще есть ли...

[Linker Error] 'E:\Programming\C++\BASS.DLL\BASS.LIB' contains invalid OMF record, type 0x21 (possibly COFF)
Народ, подскажите пожалуйста, из-за чего ошибку билдер выбивает?? ...

Как работать с bass.dll
Всем привет! Я уже много раз пытался найти подробную информацию о работе с bass.dll, но так...

Как сделать визуализацию спектра звука? (bass.dll)
Здравствуйте! Пишу для себя небольшой плеер на C++ и BASS, хочу сделать визуализацию(прыгающие...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru