VB 5/6-Tipp 0406: Mikrofonpegel anzeigen lassen
von Klaus Langbein
Beschreibung
Zeigt den aktuellen Pegelstand des Mikrofons in einem Progressbar an. Zu diesem Zwecke wird direkt auf den Audiostream zugegriffen. Eine Alarmmöglichkeit bei überschreiten einer vorgegebenen Höhe ist ebenso integriert.
Schwierigkeitsgrad: | Verwendete API-Aufrufe: sndPlaySoundA (sndPlaySound), waveInAddBuffer, waveInClose, waveInGetDevCapsA (waveInGetDevCaps), waveInGetNumDevs, waveInOpen, waveInPrepareHeader, waveInReset, waveInStart, waveInStop, waveInUnprepareHeader | Download: |
'Dieser Quellcode stammt von http://www.activevb.de 'und kann frei verwendet werden. Für eventuelle Schäden 'wird nicht gehaftet. 'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. 'Ansonsten viel Spaß und Erfolg mit diesem Source! '------------- Anfang Projektdatei Projekt1.vbp ------------- ' Die Komponente 'Microsoft Windows Common Controls 6.0 (SP6) (mscomctl.ocx)' wird benötigt. '--------- Anfang Formular "Form1" alias Form1.frm --------- ' Steuerelement: Kontrollkästchen-Steuerelement "chkAlarm" ' Steuerelement: Slider "Slider1" ' Steuerelement: Kontrollkästchen-Steuerelement "chkEnable" ' Steuerelement: Schaltfläche "cmdQuit" ' Steuerelement: Timersteuerelement "Timer1" ' Steuerelement: Fortschrittsanzeige "ProgressBar1" ' Steuerelement: Kombinationsliste "cboDevices" ' Steuerelement: Beschriftungsfeld "lblValue" ' Steuerelement: Beschriftungsfeld "Label2" ' Steuerelement: Beschriftungsfeld "Label1" 'Autor: K. Langbein 'E-Mail: Klaus@ActiveVB.de 'Achtung unter W95 kommt es aus unbekannten Gruenden zu 'gelegentlich zum Absturz (d.h. System haengt). Option Explicit Private DevHandle As Long 'Handle des Audiodevice Private Declare Function waveInGetDevCaps Lib "winmm" Alias _ "waveInGetDevCapsA" (ByVal uDeviceID As Long, ByVal _ WaveInCapsPointer As Long, ByVal WaveInCapsStructSize _ As Long) As Long Private Declare Function waveInOpen Lib "winmm" _ (WaveDeviceInputHandle As Long, ByVal WhichDevice As _ Long, ByVal WaveFormatExPointer As Long, ByVal _ CallBack As Long, ByVal CallBackInstance As Long, ByVal _ Flags As Long) As Long Private Declare Function waveInGetNumDevs Lib "winmm" () As Long Private Declare Function waveInClose Lib "winmm" (ByVal _ WaveDeviceInputHandle As Long) As Long Private Declare Function waveInStart Lib "winmm" (ByVal _ WaveDeviceInputHandle As Long) As Long Private Declare Function waveInReset Lib "winmm" (ByVal _ WaveDeviceInputHandle As Long) As Long Private Declare Function waveInStop Lib "winmm" (ByVal _ WaveDeviceInputHandle As Long) As Long Private Declare Function sndPlaySound Lib "winmm.dll" Alias _ "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal _ uFlags As Long) As Long Private Declare Function waveInAddBuffer Lib "winmm" (ByVal _ InputDeviceHandle As Long, ByVal WaveHdrPointer As _ Long, ByVal WaveHdrStructSize As Long) As Long Private Declare Function waveInPrepareHeader Lib "winmm" _ (ByVal InputDeviceHandle As Long, ByVal WaveHdrPointer _ As Long, ByVal WaveHdrStructSize As Long) As Long Private Declare Function waveInUnprepareHeader Lib "winmm" _ (ByVal InputDeviceHandle As Long, ByVal WaveHdrPointer _ As Long, ByVal WaveHdrStructSize As Long) As Long Private Type WaveFormatEx FormatTag As Integer Channels As Integer SamplesPerSec As Long AvgBytesPerSec As Long BlockAlign As Integer BitsPerSample As Integer ExtraDataSize As Integer End Type Private Type WaveHdr lpData As Long dwBufferLength As Long dwBytesRecorded As Long dwUser As Long dwFlags As Long dwLoops As Long lpNext As Long Reserved As Long End Type Private Type WaveInCaps ManufacturerID As Integer ProductID As Integer DriverVersion As Long ProductName(1 To 32) As Byte Formats As Long Channels As Integer Reserved As Integer End Type Const WAVE_INVALIDFORMAT As Long = &H0& 'invalid forma Const WAVE_FORMAT_1M08 As Long = &H1& '11.025 kHz,Mono, 8-bit Const WAVE_FORMAT_1S08 As Long = &H2& '11.025 kHz,Stereo, 8-bit Const WAVE_FORMAT_1M16 As Long = &H4& '11.025 kHz,Mono, 16-bit Const WAVE_FORMAT_1S16 As Long = &H8& '11.025 kHz,Stereo,16-bit Const WAVE_FORMAT_2M08 As Long = &H10& '22.05 kHz,Mono, 8-bit Const WAVE_FORMAT_2S08 As Long = &H20& '22.05 kHz,Stereo, 8-bit Const WAVE_FORMAT_2M16 As Long = &H40& '22.05 kHz,Mono, 16-bit Const WAVE_FORMAT_2S16 As Long = &H80& '22.05 kHz,Stereo,16-bit Const WAVE_FORMAT_4M08 As Long = &H100& '44.1 kHz,Mono, 8-bit Const WAVE_FORMAT_4S08 As Long = &H200& '44.1 kHz,Stereo, 8-bit Const WAVE_FORMAT_4M16 As Long = &H400& '44.1 kHz,Mono, 16-bit Const WAVE_FORMAT_4S16 As Long = &H800& '44.1 kHz,Stereo,16-bit Const WAVE_FORMAT_PCM As Long = 1& 'Statuskonstanten Const WHDR_DONE As Long = &H1& Const WHDR_PREPARED As Long = &H2& Const WHDR_BEGINLOOP As Long = &H4& Const WHDR_ENDLOOP As Long = &H8& Const WHDR_INQUEUE As Long = &H10& Dim WaveHead As WaveHdr Dim WavData() As Integer Dim Ns As Long Dim WaveFmt As WaveFormatEx Dim WasActive As Long Private Sub IniWavDevice() Dim WavCaps As WaveInCaps Dim i As Long cboDevices.Clear For i = 0 To waveInGetNumDevs - 1 Call waveInGetDevCaps(i, VarPtr(WavCaps), Len(WavCaps)) If WavCaps.Formats And WAVE_FORMAT_1M16 Then '16-bit mono cboDevices.AddItem StrConv(WavCaps.ProductName, vbUnicode) End If Next i If cboDevices.ListCount = 0 Then MsgBox "Keine Soundkarte vorhanden!", vbCritical End End If cboDevices.ListIndex = 0 End Sub Private Sub PlayAlarm() Dim flag As Long Dim SoundFile As String Dim Sound As Long ' flag = 1 spielt asynchron. Daher kommt es in diesem Fall ' zur Rueckkopplong. flag = 0 Erase WavData ReDim WavData(0 To Ns - 1) SoundFile = ApPath() + "\alarm.wav" Sound = sndPlaySound(SoundFile, flag) If WasActive > 0 Then chkEnable.Value = WasActive And 1 chkAlarm.Value = (WasActive And 2) / 2 End If 'Call pause(1.2, 1) End Sub Private Sub Pause(ByVal pau As Single, ByVal doev As Integer) Dim t As Single t = Timer Do If doev = 1 Then DoEvents Loop Until (Timer - t) >= pau End Sub Private Function ApPath() As String Dim path As String path$ = App.path If Right$(path, 1) = "\" Then path$ = Left$(path, Len(path) - 1) End If ApPath = path End Function Private Sub chkEnable_Click() Dim ix As Long Select Case chkEnable.Value Case 0 Call waveInUnprepareHeader(DevHandle, _ VarPtr(WaveHead), Len(WaveHead)) Call CloseDevice Case 1 ix = cboDevices.ListIndex Call waveInOpen(DevHandle, ix, VarPtr(WaveFmt), 0, 0, 0) If DevHandle = 0 Then MsgBox "Wavedevice kann nicht geöffnet werden!", _ vbExclamation chkEnable.Value = 0 Exit Sub End If Call waveInStart(DevHandle) WaveHead.lpData = VarPtr(WavData(0)) WaveHead.dwBufferLength = Ns WaveHead.dwFlags = 0 Call waveInPrepareHeader(DevHandle, _ VarPtr(WaveHead), Len(WaveHead)) cboDevices.Enabled = False Timer1.Enabled = -1 End Select End Sub Private Sub cmdQuit_Click() Call CloseDevice ' Achtung! Falls dieses Program ueber den Interpreter beendet ' wird, bleibt das Devicehandle offen und es kann kein neues ' angemeldet werden. Einziger Ausweg: Neustart von VB. End End Sub Private Sub Form_Load() Ns = 1024 ' hier koennen auch andere Werte eingetragen werden ' ebenso fuer Samplerate. Bitspersamle sollte bei 16 bleiben, ' es sei denn WaveData wird als Byte-Array definiert. ' Ns 1100 ergibt etwa 100ms Aufnahmedauer bei 11025 Sample ' pro Sec. ' sollte kleiner oder etwa gleich Aufnahmedauer sein Timer1.Interval = 26 ReDim WavData(0 To Ns - 1) WaveFmt.FormatTag = WAVE_FORMAT_PCM ' Stereo geht auch, aber dann das doppelte Ns vorsehen! WaveFmt.Channels = 1 WaveFmt.SamplesPerSec = 11025 '11khz, altenativ 22050, 44100 WaveFmt.BitsPerSample = 16 WaveFmt.BlockAlign = (WaveFmt.Channels * _ WaveFmt.BitsPerSample) \ 8 WaveFmt.AvgBytesPerSec = WaveFmt.BlockAlign * _ WaveFmt.SamplesPerSec WaveFmt.ExtraDataSize = 0 Call IniWavDevice End Sub Private Sub Form_Unload(Cancel As Integer) If DevHandle <> 0 Then Call CloseDevice Cancel = 1 ' If Visualizing = True Then ' QuitTimer.Enabled = True ' End If End If End Sub Private Function GetMax(WavData() As Integer) As Long Dim Amax As Long Dim i As Long Amax = 0 For i = 0 To UBound(WavData) If WavData(i) > Amax Then Amax = WavData(i) ' Dies beruecksichtigt nicht, dass auch negative ' Amplitudenwerte vorkommen, ist aber schneller so. Next i GetMax = 100 * Amax / 32768 ' Normierung auf 100% End Function Private Sub CloseDevice() Call waveInUnprepareHeader(DevHandle, VarPtr(WaveHead), Len(WaveHead)) Call waveInReset(DevHandle) Call waveInClose(DevHandle) DevHandle = 0 cboDevices.Enabled = True End Sub Private Sub Timer1_Timer() Static cnt As Long Dim Amax As Long If DevHandle = 0 Then Timer1.Enabled = 0 chkEnable.Value = 0 Exit Sub End If Call waveInAddBuffer(DevHandle, VarPtr(WaveHead), Len(WaveHead)) ' Do ' ' Hier koennte man warten bis die Aufnahme fertig ist ' ' ist aber in diesem Fall nicht noetig ' Loop Until ((WaveHead.dwFlags And WHDR_DONE) = WHDR_DONE) _ ' Or DevHandle = 0 Amax = GetMax(WavData()) lblValue.Caption = Format$(Amax, "000") If Amax > 5 Then ProgressBar1.Value = Amax Else ProgressBar1.Value = 0 ' sieht besser aus End If cnt = cnt + 1 If cnt > 100 Then 'ein gelegentliches Doevents verhindert evetuelle Hänger DoEvents cnt = 0 End If If chkAlarm.Value > 0 Then ' der Alarm wird ausgegliedert, damit es nicht zu einer ' Rueckkopplung kommt. D.h. solange der Alarmton an ist, ' sollte nicht aufgenomen werden. If Amax > Slider1.Value Then WasActive = 0 ' Speichern der Einstellungen WasActive = WasActive Or chkEnable.Value WasActive = WasActive Or 2 * chkAlarm.Value chkEnable.Value = 0 chkAlarm.Value = 0 Timer1.Enabled = 0 DoEvents Call PlayAlarm End If End If End Sub '---------- Ende Formular "Form1" alias Form1.frm ---------- '-------------- Ende Projektdatei Projekt1.vbp --------------
Tipp-Kompatibilität:
Windows/VB-Version | Win32s | Win95 | Win98 | WinME | WinNT4 | Win2000 | WinXP |
VB4 | |||||||
VB5 | |||||||
VB6 |
Ihre Meinung
Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.
Archivierte Nutzerkommentare
Klicken Sie diesen Text an, wenn Sie die 46 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.
Kommentar von Kurt am 02.01.2009 um 00:49
Ich hab vor kurzem die Beispielsammlung FFT-Oscilloscope von hier runtergeladen und etwas damit herumgespielt.
Scheint ja ein mächtiges Tool zu sein.
Wo kann ich detaillierte Infos über Soundprocessor.ocx erhalten? (Eigenschaften, Methoden, Ereignisse)
Kommentar von Frank Runte am 28.12.2008 um 21:07
Antwort zur Frage von Herbert Herbert Moehrcke am 02.07.2008 um 17:57.
Ich gehen in die Systemsteuerung, dort Stelle ich bei Sound den Aufnahmekanal auf den Stereomixer.
So schleife ich quasi den Ausgang wieder als Eingang. Geht bei mir immer Prima.
Kommentar von FL SE 60/3/1 am 18.09.2008 um 09:21
Guten Morgen,
weiß einer von euch vllt, wie man den Code umschreiben muss, um Ihn für VB.NET 2008 nutzen zu können?
Danke im Voraus!
Florian Segeberg 60/3/1
Kommentar von Herbert Moehrcke am 02.07.2008 um 17:57
Hallo,
ich möchte den Pegel am Ausgang meiner Soundkarte anzeigen.
Was muß ich ändern ?
Hier wird nur der Microfon-Pegel angezeigt.
Danke
H. Moehrcke
Kommentar von Endres am 17.05.2008 um 12:37
Hallo.
Ich finde echt, dass dies ein sehr guter Tipp ist, jedoch frage ich mich, ob man die Pegeldaten auch mit einer änderung des Codes aus WAVE-Dateien auslesen kann.
Falls es eine Methode gibt, würde ich mich sehr freuen.
Vielen Dank, Endres
Kommentar von Andreas Stoffel am 16.05.2008 um 14:42
Hallo
funktioniert soweit ganz gut,aber nur, wenn ich nicht gleichzeitig das Mikrofon aufnehmen will.
Öffne ich den Wavedevice vor AufnahmeStart, dann wird nichts aufgenommen, und umgekehrt kann der Device nicht geöffnet werden
Gibt es eine Lösung?
Danke im Voraus
Gruss
Andreas
Kommentar von eMKay am 29.12.2005 um 14:13
Hallo,
ich möchte den Ausgang meiner Soundkarte überwachen. D.h., wenn an der Soundkarte ein Signal ausgegeben wird, dann soll mein Programm bestimmte Dinge tun. Wie kann ich diesen Code am einfachsten umschreiben, damit ich den Pegel für den Ausgang der Soundkarte bekomme? Ich kenne mich mit den API für DirectX nicht aus und habe etwas Schwierigkeiten. Wäre also nett, wenn jemand einen möglichst einfachen Tipp für mich hätte.Danke schonmal.
Gruß eMKay
Kommentar von Timo am 03.04.2005 um 09:13
Hallo Ronnie
Du schreibst im falschen Thema. Benutze doch besser das Forum. Gute Links sind:
http://www.activevb.de/tipps/vb6tipps/tipp0127.html
und
http://www.activevb.de/tipps/vb6tipps/tipp0337.html
und
http://www.activevb.de/tipps/vb6tipps/tipp0287.html
Gruss Timo
Kommentar von Ronnie am 02.04.2005 um 19:12
Hallo!
Wie könnte ich es jetzt bewerkstelligen, dass das was im Mic-Eingang reinkommt direkt über winsock weiterverschickt wird und beim Gegenüber auch gleich abgespielt wird?Wie schon unten erwähnt sowas wie VoIP.
Kann mir da jemand helfen??
Thx schonmal im Vorraus
Ronnie
Kommentar von Bruder Paulus am 30.03.2005 um 16:22
Hallo,
ich bin grad dabei mit VB und Winsock sowas wie ne Art VoIp Prog zu schreiben.
dazu muss ich das Mikro anzapfen und da kam mir dieser Quellcode gerade recht. So, jetzt aber zu meiner Frage:
In welcher Variable werden denn die Daten die vom Mikro kommen gespeichert ???
Danke schon mal für eure Antworten.
Bruder Paulus
Kommentar von Franz am 16.02.2005 um 14:33
Das geht auch in Stereo. Du musst die Funktion
GetMax(WavData) ändern - genauer gesagt du brauchst
diese Funktion zweimal:
*********
Private Function GetMaxL(WavData() As Integer) As Long
Dim AmaxL As Long
Dim i As Long
AmaxL = 0
For i = 0 To 255
If WavData(i * 2) > AmaxL Then AmaxL = WavData(i * 2)
Next i
GetMaxL = 100 * AmaxL / 32768 ' Normierung auf 100%
End Function
Private Function GetMaxR(WavData() As Integer) As Long
Dim AmaxR As Long
Dim i As Long
AmaxR = 0
For i = 0 To 255
If WavData(i * 2 + 1) > AmaxR Then AmaxR = WavData(i * 2 + 1)
Next i
GetMaxR = 100 * AmaxR / 32768 ' Normierung auf 100%
End Function
*********
Der Trick dabei ist, dass das Array WavData() immer abwechselnd einen Wert von links und einen von Rechts enthält.
Kommentar von Stefan am 15.02.2005 um 19:04
Kann man mit diesem Tool eigentlich linken und rechten Kanal getrennt auslesen ? Oder funzt das nur in der Summe beider Kanäle ? Hat jemand einen Tipp, wie ich getrenntes Auslesen realisieren kann ? Brauche dringend getrennte Wege. Kanal 1 soll die Musik ausgelesen werden und Kanal 2 bekommt ein (zur Musik) synchrones Metronom-Signal. Ansonsten könnte ich das nur mit 2 Rechnern realisieren...
Stefan
Kommentar von spirit am 03.11.2004 um 21:30
Hallo
Ich habe vor längerem diesen Code heruntergeladen und ausprobiert. Alles bestens. Ich habe dann angefangen den Code zu modifizieren. Es Hat auch bis letzte Woche geklappt.
Dann ging nicht mehr...der Pegel wurde nicht mehr angezeigt.
Gar nich lange gefummelt...Code erneut runtergeladen und ausprobiert. Selbst in der orig. Fassung funktioniert der Code nicht mehr. Das einzige was sich geändert hat, ist das MOBO mit einer Onboardsoundkarte. Das alte Booard hat auch nur einen Standard Soundchipsatz......warum geht es nicht mehr?? was kann passiert sein??
Kommentar von Franz am 23.08.2004 um 12:04
Korrektur:
Die dem Element OutData(n) zugeordnete Frequenz ist natürlich fo * n/256, wobei fo die höchste übertragene Frequenz ist!
Kommentar von Franz am 23.08.2004 um 11:17
Frequenzauswertung geht prinzipiell schon, allerdings ist die Auflösung eingeschränkt. Das Programm "DeethSA" arbeitetmit einem Frequenzbereich von 0 - 5512.5 Hz und stellt diesen linear in 256 Schritten dar. Die zugeordnete Frequenz jedes Elements der Variablen 'OutData' ist demnach 5512.5 / 256 Hz. Der Wert dieser Elemente lässt sich auswerten, indem man ihn mit einem selbst definierten Schwellwert vergleicht (ausprobieren!). Ändert man die Variable .SamplesPerSeconds, so ändert sich auch der obere Wert des Frequenzbereichs (fo) nach der Formel
fo = .SamplesPerSeconds/.channels
Kommentar von Stefan am 28.07.2004 um 13:58
Frequenzauswertung - Na endlich...
Für alle, die sich auch "tot" suchen:
http://www.activevb.de/members/klaus/NewTips/FFT/FFT-Oscilloscope.zip
Vielen Dank an Klaus !
Gruß Stefan
Kommentar von Stefan am 25.07.2004 um 19:54
Hi Leute,
anscheinend ist niemend in der Lage, das Ding frequenz-fähig zu machen... Geht das von Haus aus nicht, oder kann's nur keiner ?
Ich hab diesen GENIALEN Code vor 2 Jahren in eine Sound-To-Light-Software eingebaut und funzt SUPER !
Aber eine Frequenzselektion wäre noch genialer !!!
Hat denn wirklich keiener eine Lösung parat ?
Gibt's doch fast nicht !
Gruß Stefan
Kommentar von Pierre Reymann am 25.04.2004 um 12:09
Ich schreibe auf dieser Basis ein Oszilloskop-Programm. Unter Windows 98 SE läuft alles super. Unter Windows XP sind fehlerhafte Samples in WaveData(). Dieses Problem tritt auch bei anderen Programmen auf, die die Winmm.dll benutzen auf. Hobbybox V5 benutzt auch die Winmm.dll, ist aber nicht davon betroffen. Ich bin Ratlos.
MfG Pierre
Kommentar von Timo Boehme am 31.03.2004 um 14:15
Wow. Respekt. Kann ich das Programm mal sehen? timoboehme@hotmail.com
Wäre super
Timo
Kommentar von Timo Boehme am 31.03.2004 um 12:18
Wow. Respekt. Kann ich das Programm mal sehen? timoboehme@hotmail.com
Wäre super
Timo
Kommentar von Chris am 30.03.2004 um 20:35
Danke, doch hab ich alles komplett neu geschrieben und mir die Devices durch Flag Konstanten zugänglich gemacht. Trotzdem vielen Dank.
ps: Ich wollte es per VB steuern und nicht manuell regeln.
Chris
Kommentar von Timo Boehme am 17.03.2004 um 19:13
LineIn Eingang musst Du wohl über Deinen Soundkarten Regler auswählen. Start - Einstellungen - Systemsteuerung - Sound - Aufnahme - Mikrofoneingang/LineIn
Gruss Timo
Kommentar von Georg am 17.03.2004 um 17:53
Chris:
Der Tip von Tipfix vom 12.06.2003 funktioniert bei mir auch
unter W2K.
Gruß, Georg
Kommentar von Chris am 15.02.2004 um 14:32
Dieses Prog ist wirklich genial gemacht. Doch ich habe das
Problem das ich diesen Vorschlag nicht für den LineIN umgeschrieben bekomme. Wäre nett wenn mir jemand helfen könnte.
mfg chris
Kommentar von Sparky am 10.01.2004 um 11:52
Toller Beitrag. Habe aus dem Tip ein Oszilloskop gemacht. Dabei ist mir etwas unerklärliches aufgefallen. Der Sample-Vorgang erzeugt nur halb so viel Samples wie angegeben!!!
Auch die Bemerkung im Listing "Ns 1100 ergibt etwa 100ms Aufnahmedauer bei 11025 Sample pro Sec" stimmt nicht. Es ist nur die halbe Aufnahmedauer. Um das zu testen habe ich das Wait-Statement (im Listing gefunden)
Do
Loop Until ((WaveHead.dwFlags And WHDR_DONE) = WHDR_DONE) Or DevHandle = 0
aktiviert was den Timer überflüssig macht.
Das WavData-Feld hat zwar die Tiefe von 1024 aber es ist nur bis 512 beschrieben !!!
Hat jemand eine Idee, was hier nicht stimmt?
Gruß, Sparky
Kommentar von Siggi am 27.08.2003 um 08:08
Super Tool aber...
Ich verwende ein IBM Thinkpad 600 mit Win XP und VB 6. Leider kommt immer ein knacken (wie vom Timer gesteuert) aus dem Lautsprecher.
So ist das Tool für mich nicht brauchbar, da dieses Knacken natürlich die Anzeige wie alle sonstigen Geräusche auch in die Höhe treibt.
Wäre toll, wenn jemand eine Lösung hätte.
Siggi
Kommentar von Max Odendahl am 26.07.2003 um 19:41
Hallo,
: Amax = GetMax(WavData())
hier wird ja der function GetMax der Array wavedata uebergeben.
Wie bekomme ich diesen bzw woher kommt er?
Wo genau steht die Information, die ich brauche um den Audiopegel auszulesen
Herzlichen dank!
M.Odendahl
PS: Sorry, bin nicht so fit in VB
Kommentar von Tipfix am 25.07.2003 um 15:12
Dann kann ich Dir leider nicht weiter helfen.
Kommentar von Max Odendahl am 25.07.2003 um 15:08
Leider kostet diese was fuer kommerziellen use, und das Programm soll vielleicht mal kommerziell werden.
Irgendwelche API- Functionen um die Frequenz herauszubekommen ?
Gruss und Dank
Max
Kommentar von Tipfix am 25.07.2003 um 14:57
Da musst du mal im I-Net nach der Bass.dll suchen. Mit der soll es wohl möglich sein.
Kommentar von Max Odendahl am 25.07.2003 um 14:52
hm, ich versuche an die Frequenz der Toene heranzukommen, die ueber den Mikrofoneingan hereinkommen und dann z.B ueber einer bestimmten Frequenz eine Meldung ausgeben.
Irgendwelche Tipps, API-funktionen oder sonstiges ?
Gruss max
Kommentar von Tipfix am 25.07.2003 um 14:45
Das ist der Pegel der über das Mikro reinkommt. Die Summe aller Frequenzen ergiebt den Pegel.
Kommentar von Max Odendahl am 25.07.2003 um 14:02
Was bedeutet genau Mikrofonpegel? Ist dies die Frequenz der Toene ?
Gruss Max Odendahl
Kommentar von Timo Boehme am 12.07.2003 um 23:06
Dieses Dokument ist absolutes Gold Wert. Ich danke dem Poster von Herzen.
Timo
Tipp 0406: Mikrofonpegel anzeigen lassen
Kommentar von Tipfix am 12.06.2003 um 15:02
Hallo
Man gehe auf den kleinen Lautsprecher in der Taskbar. Linke Taste und Audioeigenschaften. Dann de Reiter Audio. Dann auf Soundaufnahme. Jetzt kannst du wählen von welcher Quelle du denn Pegel sehen willst. Dieser Tipp bezieht sich auf WinXP. MfG
Kommentar von Uhland Poller am 12.06.2003 um 08:47
Hallo,
es wird nichts angezeigt.Divice wird gefunden. Ich habe auch nicht im Code die Auswahl des Mic gefunden.
Sonst ist die sache sehr interessant. Man könnte ja eine Spektralanalyse programmieren.
Kommentar von tipfix am 07.06.2003 um 03:41
Lässt sich ganz hervorragend mit der Parallelen Schnittstelle koppeln. Ergiebt ne hübsche Lichtorgel.
Kommentar von Tipfix am 06.06.2003 um 13:53
Kann man auch anzeigen lassen was zum beispiel Winamp spielt?
Kommentar von Franz Grillmeier am 21.05.2003 um 12:33
Cooles Listing! Gehts auch in Stereo? Wenn ja, wie?
Kommentar von Vertex am 12.05.2003 um 08:35
Belloni:
Nimm einfach die Bass.dll
http://www.un4seen.com/bass.html
bass18\vb\livespec\prjLiveSpec.vbp
einfach mal anschauen.
mfg olli
Kommentar von Robin Walter am 17.07.2002 um 19:02
Leider bin ich auf der Suche nach einer Möglichkeit die angelegte Frequenz zu ermitteln. Hat jemand eine Idee ? Gruss Robin
Kommentar von vertex am 07.06.2002 um 14:44
Das funktioniert bei ganz gut. Aber ich würde gerne auch anzeigen lassen, was zum Wave *raus* geht.
Nur gibt's den API Befehl "WaveOutAddBuffer" leider nicht.
Hat jemand eine Idee?
Kommentar von Addon mit Bug am 01.06.2002 um 13:53
Das funktioniert bei ganz gut. Aber ich würde gerne auch anzeigen lassen, was zum Wave *raus* geht.
Nur gibt's den API Befehl "WaveOutAddBuffer" leider nicht.
Hat jemand eine Idee?
Kommentar von Darrel Thomas am 30.04.2002 um 07:12
Hi! Dear,
Your examples was very helpful however it didn't play the alarm?
Anyways, I'm looking for a:
Record Wave
Play Wave
Can you help?
Thanks
Darrel Thomas
Kommentar von Belloni am 24.04.2002 um 16:28
VB6, W2K
Ich habe das gleich Problem:"
Ich hab dem Tip unter 2k ausprobiert. Das Programm findet zwar meine Soundkarte, kann aber das Device nicht öffnen. Keine Ahnung worans liegt."
Schade, sowas suche ich seit Jahren...
Kommentar von David E. am 17.11.2001 um 03:24
Man müsste noch wissen in welchen Stufen man die Samplerate einstellen kann und ob eine Rate von 96000 oder sogar 192000 möglich ist.