Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.48 MB
Время: 0.069 c
14-1098034446
u
2004-10-17 21:34
2004.11.07
Есть ли способы лечить пивной алкоголизм?


4-1096609847
santey
2004-10-01 09:50
2004.11.07
как в окне другой проги найти число и вставить свое


14-1098191610
Uran
2004-10-19 17:13
2004.11.07
Installshields


14-1097666622
}|{yk
2004-10-13 15:23
2004.11.07
Какие художественные книги вы прочитали за этот год?


1-1098355337
Temporary
2004-10-21 14:42
2004.11.07
Class. Вопросы.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский