Форум: "Media";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];
Внизgrahic analyzer Найти похожие ветки
← →
clampo © (2004-06-30 11:42) [0]Привет всем!!! Помагите, пожалуйста написать графический анализатор как у WINAMP-а. Это такая вещь, которая анализирует спекр звуковх волн и отображает результата графически.
← →
WondeRu © (2004-06-30 15:02) [1]>отображает результата
Гы..)))
← →
Огромное Кулясищще © (2004-06-30 15:28) [2]что нужно то? эквалайзер? осциллограф?
← →
clampo © (2004-07-02 17:50) [3]осциллограф. Но в виде линий(см. WINAMP)
← →
ПЛОВ (2004-07-02 18:21) [4]
> clampo ©
Пишешь свой винамп?
)))))))) скинеш мне на мыло а то старый уже о....
← →
clampo © (2004-07-02 19:05) [5]Да пишу!!! :). Толко я че понял, что тебе выслать? Плеер что-ли?
Сообщи мыло :). Я тебя тоже, кстати, просил выслать мне исходник
которыи читает *.mp3 тег.
← →
clampo © (2004-08-05 21:29) [6]ривет всем!!! :) . Продыбал тут одну вещь, вроде самое то, но не
работает :( :
{
Every line going into and out of the mixer has a number of "controls"
associated with it. Some of those controls are "meters," which give
you a real-time value of the sound level on the corresponding line.
Not all lines have meter controls, and not all sound cards provide
support for meters.
Here"s some code that will retrieve a handle to the meter attached to
the WaveOut source of the speaker line, if there is one:
}
uses
MMSystem;
procedure TForm1.Button1Click(Sender: TObject);
var
MixerControl: TMixerControl;
MixerControlDetails: TMixerControlDetails;
MixerControlDetailsSigned: TMixerControlDetailsSigned;
Mixer: THandle;
MixerLine: TMixerLine;
MixerLineControls: TMixerLineControls;
PeakMeter: DWORD;
Rslt: DWORD;
SourceCount: Cardinal;
WaveOut: DWORD;
I: Integer;
X: Integer;
Y: Integer;
begin
Rslt := mixerOpen(@Mixer, 0, 0, 0, 0);
if Rslt <> 0 then
raise Exception.CreateFmt("Can""t open mixer (%d)", [Rslt]);
FillChar(MixerLine, SizeOf(MixerLine), 0);
MixerLine.cbStruct := SizeOf(MixerLine);
MixerLine.dwComponentType := MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
Rslt := mixerGetLineInfo(Mixer, @MixerLine,
MIXER_GETLINEINFOF_COMPONENTTYPE);
if Rslt <> 0 then
raise Exception.CreateFmt("Can""t find speaker line (%d)", [Rslt]);
SourceCount := MixerLine.cConnections;
WaveOut := $FFFFFFFF;
for I := 0 to SourceCount - 1 do
begin
MixerLine.dwSource := I;
Rslt := mixerGetLineInfo(Mixer, @MixerLine,
MIXER_GETLINEINFOF_SOURCE);
if Rslt <> 0 then
raise Exception.CreateFmt("Can""t get source line (%d)", [Rslt]);
if MixerLine.dwComponentType = MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT then
begin
WaveOut := MixerLine.dwLineId;
Break;
end;
end;
if WaveOut = $FFFFFFFF then
raise Exception.Create("Can""t find wave out device");
FillChar(MixerLineControls, SizeOf(MixerLineControls), 0);
with MixerLineControls do
begin
cbStruct := SizeOf(MixerLineControls);
dwLineId := WaveOut;
dwControlType := MIXERCONTROL_CONTROLTYPE_PEAKMETER;
cControls := 1;
cbmxctrl := SizeOf(TMixerControl);
pamxctrl := @MixerControl;
end;
Rslt := mixerGetLineControls(Mixer, @MixerLineControls,
MIXER_GETLINECONTROLSF_ONEBYTYPE);
if Rslt <> 0 then
raise Exception.CreateFmt("Can""t find peak meter control (%d)",
[Rslt]);
PeakMeter := MixerControl.dwControlID;
// at this point, I have the meter control ID, so I can
// repeatedly query its value and plot the resulting data
// on a canvas
X := 0;
FillChar(MixerControlDetails, SizeOf(MixerControlDetails), 0);
with MixerControlDetails do
begin
cbStruct := SizeOf(MixerControlDetails);
dwControlId := PeakMeter;
cChannels := 1;
cbDetails := SizeOf(MixerControlDetailsSigned);
paDetails := @MixerControlDetailsSigned;
end;
repeat
Sleep(10);
Rslt := mixerGetControlDetails(Mixer, @MixerControlDetails,
MIXER_GETCONTROLDETAILSF_VALUE);
if Rslt <> 0 then
raise Exception.CreateFmt("Can""t get control details (%d)",
[Rslt]);
Application.ProcessMessages;
Inc(X);
Y := 300 - Round(300 * Abs(MixerControlDetailsSigned.lValue) / 32768);
with Canvas do
begin
MoveTo(X, 0);
Pen.Color := clBtnFace;
LineTo(X, 300);
Pen.Color := clWindowText;
LineTo(X, Y);
end;
until X > 500;
// don"t forget to close the mixer handle when you"re done
Rslt := mixerClose(Mixer);
if Rslt <> 0 then
raise Exception.CreateFmt("Can""t close mixer (%d)", [Rslt]);
end;
Должно показывать то же что и WINAMP, но у меня не пашет.
Может кто заставит его работать!!!
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.04 c