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!
-
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!