analiza zvoka

Vse o večpredstavnosti (zvok, video, DirectShow in podobno).
Odgovori
Uporabniški avatar
gabr
Prispevkov: 4129
Pridružen: 28.08.2001 14:10:47

analiza zvoka

Odgovor Napisal/-a gabr » 08.03.2010 19:25:31

Iščem en čimbolj simpl način, s katerim bi Delphi program pogruntal, katero frekvenco sliši mikrofon).

Se pravi: zadeva bi morala brat nek (selectable) input, naredit fft in potegnil glavno komponento iz njega.

Obstaja kakšen način, kako to naredit, ne da bi doktoriral iz DirectSounda in analize zvoka?

ahotko
Prispevkov: 141
Pridružen: 28.10.2002 07:56:38

analiza zvoka

Odgovor Napisal/-a ahotko » 08.03.2010 19:31:04

lp,
Aleš

G16
Prispevkov: 462
Pridružen: 11.02.2005 21:54:48

analiza zvoka

Odgovor Napisal/-a G16 » 11.03.2010 19:59:17

Za to uporabljm bass knjižico:
http://www.un4seen.com/

Potem je treba samo še dobiti trenutni speker iz mikrofona in ugotoviti največjo vrednost:

Koda: Izberi vse

  
uses Bass;

type
  TFFTData  = array [0..512] of Single;
  SpectBuff=Array [0..512] of LongInt;

...

function RecordingCallback(Handle: HRECORD; buffer: Pointer; length, user: DWord): boolean; stdcall;
begin
  BASS_StreamPutData(pchan, buffer, length); // feed recorded data to output stream
  Result := True; // continue recording
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  BASS_Init(-1, 44100, 0, Application.Handle, nil);
end;

//začetek vzorčenja
  Bass.BASS_RecordInit(0);
  Bass.BASS_StreamCreate(44100, 2, 0, STREAMPROC_PUSH, nil);
  Channel:=BASS_RecordStart(44100, 2, MakeLong(0, 10), @RecordingCallback, nil);
  BASS_ChannelPlay(Channel, false);

...
/// YPos : LongInt; YVal : Single; FFTFata: TFFTData; SB:SpectBuff;

 if BASS_ChannelIsActive(Channel) <> BASS_ACTIVE_PLAYING then Exit;
    BASS_ChannelGetData(Channel, @FFTFata, Bass.BASS_DATA_FFT1024); /// naredi vzorec

    for i:=0 to 512 do begin //prepis oz. pretvorba v array zapis 
     YVal := Abs(FFTFata[(i * 1)]);
     YPos := Trunc((YVal) * 500);
    SB[i]:=ypos;
    end;  
iz SpectBuff najdeš samo še najvišjo vrednost.
Za pretvorbo v Hz, pa moraš še pogruntati kako pretvoriti dane vrednosti.
Napisal G16 (nekdanji G11,G14,G15°) Uporabljam: Delphi7 Ent.
http://delphi4u.awardspace.com/
Čas teče naprej...

Uporabniški avatar
gabr
Prispevkov: 4129
Pridružen: 28.08.2001 14:10:47

analiza zvoka

Odgovor Napisal/-a gabr » 14.03.2010 10:48:48

Za to uporabljm bass knjižico:
... ki ima zraven celo demo za spectrum analyzer. Hvala!

5r
Prispevkov: 131
Pridružen: 14.01.2003 11:14:38

analiza zvoka

Odgovor Napisal/-a 5r » 22.03.2010 08:16:56

S tem bi se najbrž dalo tudi http://symmetrica.net/newac/

Odgovori