Forum: PC-Programmierung c# Lautstärke messen


von Fuzzi59 (Gast)


Lesenswert?

Hallo ich möchte den Wert der momentanen Lautstärke haben, aber auch nur 
den Wert ohne Visualisierung usw.
[DLLImport("winmm.dll")] hab ich schon, aber da muss man einen 
Windowsbefehl ausführen, wie z.B beim Aufnehmen, da muss ich erst diese 
Variable(oder was das ist) erstellen
 private static extern int mciSendString(string lpstrCommand, string 
lpstrReturnString, int uReturnLength, int hwndCallback);
und im button dann so was:
            mciSendString("open new Type waveaudio Alias recsound", "", 
0, 0);
            mciSendString("set recsound CHANNELS 2", "", 0, 0);
            mciSendString("record recsound", "", 0, 0);
Jetzt würde ich gerne wissen, wie das bei der Lautstärke aussieht.

von bluppdidupp (Gast)


Lesenswert?

Den aktuellen Pegel der Aufnahme oder der (systemweiten?) Wiedergabe?

von Fuzzi59 (Gast)


Lesenswert?

Wenn das Programm startet soll es den wert der Lautstärke ausgeben

von ich (Gast)


Lesenswert?

Fuzzi59 schrieb:
> Wenn das Programm startet soll es den wert der Lautstärke ausgeben

Er meinte, ob du den Wert der im System eingestellten Lautstärke meinst 
oder vielleicht den Wert (Pegel) des wiedergegebenen Tones?

von bluppdidupp (Gast)


Lesenswert?

Ab Vista:
- Es gibt zu jeder Anwendung einen Lautstärkeregler im Windows-Mixer 
(+Peak-Meter)
- dazu den Master-Regler (+Peak-Meter)
- Für das aktuelle Aufnahmegerät gibt es auch eine 
(Aufnahme-)Lautstärke-Einstellung

Generell ist MCI ziemlich altbacken (War eigentlich schon bei Win2k/XP 
out).
Die Doku dazu findet man hier: 
http://msdn.microsoft.com/en-us/library/windows/desktop/dd757151.aspx
Aktuell sind die CoreAudio-APIs: 
http://msdn.microsoft.com/en-us/library/windows/desktop/dd316780.aspx

von Fuzzi59 (Gast)


Lesenswert?

Als Beispiel, wenn das Mikrofon einen Ton wahrnimmt soll es mit der 
Aufnahme beginnen. Ich meine nicht die Soundeinstellungen vom System

von bluppdidupp (Gast)


Lesenswert?

Evtl. eher auf waveInOpen() oder neuer umsteigen.
Bei waveInOpen() kann man z.B. via Callback oder Window-Message direkt 
die Samples bekommen. Überschreitet ein Sample einen gewünschten 
Schwellwert könnte man dann einfach anfangen die Samples wegzuschreiben.

von Fuzzi59 (Gast)


Lesenswert?

Aber wie komm ich an den Callback aus
private static extern int mciSendString(string lpstrCommand, string 
lpstrReturnString, int uReturnLength, int hwndCallback);
Beim Aufnehmen setze ich ihn ja auf 0.
Oder meinst du was anderes? Ich vertehe jetzt auch nicht was du genau 
meinst.

von Fuzzi59 (Gast)


Lesenswert?

Ich glaub ich hab jetzt was brauchbares gefunden, ich weiß nur nicht was 
da einsetzen muss.
[DllImport("winmm.dll")]
        public static extern int waveInOpen(ref int lphWaveIn,int 
uDeviceID,ref WaveFormat lpFormat,int dwCallback,int dwInstance,int 
dwFlags);

von bluppdidupp (Gast)


Lesenswert?

In google "msdn FunktionsName" liefert üblicherweise die offizielle Doku 
mit Parameterbeschreibungen ;D
Je nach IDE auch Funktionsname markieren + F1
Bei codeproject findet man da bestimmt auch Code, der diese Funktionen 
benutzt.

Schau dir evtl. auch fertige Libs wie http://naudio.codeplex.com/ an, 
die z.B. waveInOpen() wrappen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.