Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0406: Mikrofonpegel anzeigen lassen

 von 

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:

Schwierigkeitsgrad 2

Verwendete API-Aufrufe:

sndPlaySoundA (sndPlaySound), waveInAddBuffer, waveInClose, waveInGetDevCapsA (waveInGetDevCaps), waveInGetNumDevs, waveInOpen, waveInPrepareHeader, waveInReset, waveInStart, waveInStop, waveInUnprepareHeader

Download:

Download des Beispielprojektes [74,32 KB]

'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-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

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.

MikrofonPegel anzeigen in Access 2010 Formular - Nova 22.01.13 23:38 12 Antworten

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.