Direkt vom Mikrofon die Lautstärke ermitteln



  • Hallo

    Ich möchte direkt vom Mikrofon die Lautstärke der umgebung ermitteln.

    Nur weiß ich nicht, wie sich das machen lässt.

    Ich bräuchte ja quasi direkten Zugriff aufs Mikro! (?)



  • Auf dieser Seite findest du deine Frage schön beschrieben!

    http://www.bytesandmore.de/rad/index.htm



  • Naja... mir ging es nicht darum, die von Windows gesetzte Lautstärkeneinstellung auszulesen,

    sondern direkt vom Mikrofoneingang. z.B. Wenn ich reinbrülle, ändert sich der Laustärkepegel im Mikrofon. Das will ich mitbekommen.



  • Danke, hat sich erledigt. Habs mit FMod gelöst...



  • Wollt ich grad vorschlagen.

    Vielleicht kannst du ja mal ein kleines Beispiel posten, das wäre ggf. auch was für die FAQ.



  • Ok, hier der Code:

    //---------------------------------------------------------------------------
    #include <vcl.h>
    #include <fmod.h>
    #pragma hdrstop
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    FSOUND_SAMPLE *Smp;
    int channel;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::AufnahmeClick(TObject *Sender)
    {
    Vval=0;
    vFll=0;
    
    FSOUND_Sample_SetMode(Smp, FSOUND_LOOP_NORMAL);
    down=false;
    
    	if (!FSOUND_Record_StartSample(Smp, TRUE))
    	{
               Caption=FMOD_ErrorString(FSOUND_GetError());
    	}
    
    while (!FSOUND_Record_GetPosition()) 
        {
            Sleep(1);
        }
    
    channel = FSOUND_PlaySound(FSOUND_FREE, Smp);
    int originalfreq = FSOUND_GetFrequency(channel);
    
    do{
    		int playpos, recordpos, diff;
    		static int oldrecordpos = 0, oldplaypos = 0;
    
    		playpos = FSOUND_GetCurrentPosition(channel);
    		recordpos = FSOUND_Record_GetPosition();
    
    	   if (playpos > oldplaypos && recordpos > oldrecordpos)
    	   {
    			diff = playpos - recordpos;
    
    			if (diff > -25*44100/1000)
                {
    			FSOUND_SetFrequency(channel, originalfreq - 1000);
                }
    			else if (diff < -(25*44100/1000 * 2))
                {
    			FSOUND_SetFrequency(channel, originalfreq + 1000);
                }
    			else
                {
    			FSOUND_SetFrequency(channel, originalfreq);
                }
    }
    float l,r;
    FSOUND_GetCurrentLevels(channel, &l, &r);
    float CurrentVolume = l+r;
    Application->ProcessMessages();
    Sleep(10);
    }
    while(true);
    
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::StopClick(TObject *Sender)
    {
            	FSOUND_StopSound(channel);
    	FSOUND_Record_Stop();
    }
    //---------------------------------------------------------------------------
    

    Wenn men den Echo-effekt nicht haben möchte, muss man die Lautsärke des channels auf null setzen.



  • Danke!
    Ist das FMOD3.75 oder FMODEx4?



  • Jansen schrieb:

    das wäre ggf. auch was für die FAQ.

    Ähem, wird das sooo oft gefragt?



  • es ist FMOD 3.75!


Anmelden zum Antworten