Visualizer - gesammtes Spektrum

  • XP-Fan (Visualizer) hat mich auf den Geschmack gebracht und so hab ich auch mal einen Visualizer geschrieben.
    Skala und Pegel sind logarithmisch.

    Benötigt viel Rechenleistung; Sollte es nicht flüssig laufen, dann die Fenstergröße ganz am Anfang verkleinern

    Edit: Version 2 mit einer kleinen Waveanzeige

  • ECHT NICE UND COOL :thumbup: :thumbup: :thumbup:


    Eukalyptus, ich verbeuge mich vor dir, und ich sage dir, was bei mir der effekt is mit dem Initializer oder wie immer das auch heisst, wenn das Instrumental kommt, ist es DEUTLICH zu hören, die Stimme aber NICHT oder sehr leise! das ist cool, wenn man Karaoke spielen will! schraube mal die Stimme noch tiefer und dann kann man ganz gut Karaoke Spielen! :rock: :rock: :rock: :rock: :rock:


    Du hast dir einen Dank verdient!


    Edit: ladet euch mal die neue version und hört mal dieses lied(ist Türkisch)
    Tripkolik--Gözlerinin Yesilini Özledim

    Link: http://ul.to/z722ot

    sry, war aber zu gross für einen anhang...

    Einmal editiert, zuletzt von bbm1995 (2. April 2010 um 16:58)

  • Kann mir jmd sagen welcher teil des scripts hierfür verantwortlich ist?

    Hier hab ich ein Peakmeter-Beispielscript für dich:

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <Bass.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt("GUIOnEventMode", 1)

    [/autoit] [autoit][/autoit] [autoit]

    _BASS_STARTUP(@ScriptDir & '\BASS.dll')
    _BASS_Init(0, -1, 44100, 0, '')
    If @error Then
    MsgBox(0, 'Error', 'Sound konnte nicht Initialisiert werden!')
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Global $File = FileOpenDialog('Bitte wählen Sie eine Sounddatei aus!', '', 'MP3 Datei (*.mp3;*.wav)')
    If @error Then
    MsgBox(0, 'Fehler', 'Die Datei ist ungültig!' & @LF & 'Das Programm wird beendet!')
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Global $hMusicHandle = _BASS_StreamCreateFile(False, $File, 0, 0, 0)

    [/autoit] [autoit][/autoit] [autoit]

    Global $hGui = GUICreate("Peakmeter", 800, 70)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    GUISetBkColor(0x000000)

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_Startup()
    Global $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGui)
    Global $hBitmap = _GDIPlus_BitmapCreateFromGraphics(800, 70, $hGraphics)
    Global $hContext = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    _GDIPlus_GraphicsClear($hContext,0xFF000022)

    [/autoit] [autoit][/autoit] [autoit]

    Global $hPeakMeterLeft = _PeakMeterCreate($hContext, 10, 10, 780, 20, 0xFF000022, 0xFF004488)
    Global $hPeakMeterRight = _PeakMeterCreate($hContext, 10, 40, 780, 20,0xFF000022, 0xFF004488)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    _BASS_ChannelPlay($hMusicHandle, 0)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Sleep(20)
    _PeakMeterSet($hMusicHandle)
    _GDIPlus_GraphicsDrawImage($hGraphics, $hBitmap, 0, 0)
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _PeakMeterSet($hStream)
    Local Static $nLeft = 0, $nRight = 0
    Local $iLevel = _BASS_ChannelGetLevel($hStream), $nTemp
    $nLeft -= 0.02
    $nRight -= 0.02
    $nTemp = _DecibelFloat(_LoWord($iLevel) / 32768)
    If $nTemp > $nLeft Then $nLeft = $nTemp
    $nTemp = _DecibelFloat(_HiWord($iLevel) / 32768)
    If $nTemp > $nRight Then $nRight = $nTemp
    _PeakMeterDraw($hPeakMeterLeft, $nLeft)
    _PeakMeterDraw($hPeakMeterRight, $nRight)
    EndFunc ;==>_PeakMeterSet

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _PeakMeterDraw($aPM, $nLevel)
    If $nLevel < 0 Then $nLevel = 0
    If $nLevel > 1 Then $nLevel = 1
    _GDIPlus_GraphicsFillRect($aPM[0], $aPM[2]-2, $aPM[3]-2, $aPM[4]+4, $aPM[5]+4, $aPM[7])
    _GDIPlus_GraphicsFillRect($aPM[0], $aPM[2], $aPM[3], $aPM[4], $aPM[5], $aPM[6])
    _GDIPlus_GraphicsDrawImageRectRect($aPM[0], $aPM[1], 0, 0, $aPM[4] * $nLevel, 1, $aPM[2], $aPM[3], $aPM[4] * $nLevel, $aPM[5])
    EndFunc ;==>_PeakMeterDraw

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _PeakMeterCreate($hGraphics, $iX, $iY, $iW, $iH, $nColorBkg = 0xFF000000, $nColorRect=0xFFFFFFFF)
    Local $aReturn[8]
    Local $hBitmap = _GDIPlus_BitmapCreateFromGraphics($iW, 2, $hGraphics)
    Local $hContext = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    Local $hBrush[6], $iTile = $iW / 12
    $hBrush[0] = _GDIPlus_BrushCreateSolid(0xFF00FF00)
    $hBrush[1] = _GDIPlus_LineBrushCreate($iTile * 6 - 1, 0, $iTile * 9, 0, 0xFF00FF00, 0xFFFFFF00)
    $hBrush[2] = _GDIPlus_BrushCreateSolid(0xFFFFFF00)
    $hBrush[3] = _GDIPlus_LineBrushCreate($iTile * 10 - 1, 0, $iTile * 11, 0, 0xFFFFFF00, 0xFFFF0000)
    $hBrush[4] = _GDIPlus_BrushCreateSolid(0xFFFF0000)
    $hBrush[5] = _GDIPlus_LineBrushCreate(0, 0, 4, 0, 0x00000000, 0x99000000)
    _GDIPlus_GraphicsFillRect($hContext, 0, 0, $iTile * 8, 2, $hBrush[0])
    _GDIPlus_GraphicsFillRect($hContext, $iTile * 6, 0, $iTile * 3, 2, $hBrush[1])
    _GDIPlus_GraphicsFillRect($hContext, $iTile * 9, 0, $iTile, 2, $hBrush[2])
    _GDIPlus_GraphicsFillRect($hContext, $iTile * 10, 0, $iTile, 2, $hBrush[3])
    _GDIPlus_GraphicsFillRect($hContext, $iTile * 11, 0, $iTile, 2, $hBrush[4])
    For $i = 0 To $iW Step 4
    _GDIPlus_GraphicsFillRect($hContext, $i, 0, 4, 2, $hBrush[5])
    Next
    For $i = 0 To 5
    _GDIPlus_BrushDispose($hBrush[$i])
    Next
    _GDIPlus_GraphicsDispose($hContext)
    $aReturn[0] = $hGraphics
    $aReturn[1] = $hBitmap
    $aReturn[2] = $iX
    $aReturn[3] = $iY
    $aReturn[4] = $iW
    $aReturn[5] = $iH
    $aReturn[6] = _GDIPlus_BrushCreateSolid($nColorBkg)
    $aReturn[7] = _GDIPlus_BrushCreateSolid($nColorRect)
    Return $aReturn
    EndFunc ;==>_PeakMeterCreate

    [/autoit] [autoit][/autoit] [autoit]

    Func _DecibelFloat($iLevel)
    $iLevel = Log($iLevel) / Log(10) * 20
    If $iLevel < -64 Then $iLevel = -64
    $iLevel = ($iLevel + 64) / 64
    Return $iLevel
    EndFunc ;==>_DecibelFloat

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _Exit()
    _BASS_Stop()
    _BASS_Free()
    _GDIPlus_BrushDispose($hPeakMeterLeft[6])
    _GDIPlus_BrushDispose($hPeakMeterRight[6])
    _GDIPlus_BitmapDispose($hPeakMeterLeft[0])
    _GDIPlus_BitmapDispose($hPeakMeterRight[0])
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_Shutdown()
    GUIDelete($hGui)
    Exit
    EndFunc ;==>_Exit

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _GDIPlus_LineBrushCreate($nX1, $nY1, $nX2, $nY2, $iARGBClr1, $iARGBClr2, $iWrapMode = 0)
    Local $tPointF1, $pPointF1
    Local $tPointF2, $pPointF2
    Local $aResult
    $tPointF1 = DllStructCreate("float;float")
    $pPointF1 = DllStructGetPtr($tPointF1)
    $tPointF2 = DllStructCreate("float;float")
    $pPointF2 = DllStructGetPtr($tPointF2)
    DllStructSetData($tPointF1, 1, $nX1)
    DllStructSetData($tPointF1, 2, $nY1)
    DllStructSetData($tPointF2, 1, $nX2)
    DllStructSetData($tPointF2, 2, $nY2)
    $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateLineBrush", "ptr", $pPointF1, "ptr", $pPointF2, "uint", $iARGBClr1, "uint", $iARGBClr2, "int", $iWrapMode, "int*", 0)
    If @error Then Return SetError(@error, @extended, 0)
    $GDIP_STATUS = $aResult[0]
    Return $aResult[6]
    EndFunc ;==>_GDIPlus_LineBrushCreate

    [/autoit]