Musik Datei analysieren - Vorzugsweise Morsecode - dringend

  • Mein Problem ist ein Skript was mit meinem Rechner nicht kompatibel ist. Es geht darum eine WAV Datei (unkomprimiert) zu öffenen, und ide langen und kurzen Morsetöne zu erkenn, diese Dann als Text in eine Datei zu schreiben. Wäre das möglich, und wäre jemand mal so nett?

    Danke.

  • (KA)DAS PFERD FRISST KEINEN GURKENSALAT.(AR)

    Hier mal das Script:

    Spoiler anzeigen
    [autoit]

    #include "Bass.au3"
    #include <Array.au3>

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

    Global $oDict = ObjCreate('Scripting.Dictionary')
    If Not IsObj($oDict) Then
    MsgBox(0, "ERROR", "creating scripting.dictionary object failed")
    Exit
    EndIf
    $oDict.CompareMode = 1

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

    _AddCodeTable()

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

    _BASS_STARTUP()
    _BASS_Init(0, -1, 44100, 0, "")

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

    Global $iTimer = TimerInit()
    _WaveMorseToText(@ScriptDir & "\wave_morsen.wav")
    ConsoleWrite("Time: " & TimerDiff($iTimer) & @CRLF)

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

    _BASS_Free()

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

    Func _WaveMorseToText($sPath, $fThrsHld = 0.2)
    If Not FileExists($sPath) Then Return SetError(1, 1, False)
    Local $hStream = _BASS_StreamCreateFile(False, $sPath, 0, 0, $BASS_STREAM_DECODE)
    If @error Or Not $hStream Then Return SetError(1, 0, 0)

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

    _BASS_ChannelSetAttribute($hStream, $BASS_ATTRIB_FREQ, 11025)

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

    Local $iLength = _BASS_ChannelGetLength($hStream, $BASS_POS_BYTE)
    Local $i20MS = _BASS_ChannelSeconds2Bytes($hStream, 0.02)
    Local $aMorse[Ceiling($iLength / $i20MS)][3]

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

    Local $iLong, $iLeft, $iRight, $iLevel, $iPos, $iDM, $iDS
    Local $iThrsHld = 32768 * $fThrsHld, $iCnt = 0, $iDit = 100, $iDah
    While 1
    $iLong = _BASS_ChannelGetLevel($hStream)
    $iLeft = _BASS_LoWord($iLong)
    $iRight = _BASS_HiWord($iLong)
    If $iRight > $iLeft Then
    $iLevel = $iRight
    Else
    $iLevel = $iLeft
    EndIf
    Switch $iLevel
    Case 0 To $iThrsHld
    If $iDS > 0 Then
    $iCnt += 1
    $aMorse[$iCnt][0] = 1
    $aMorse[$iCnt][1] = $iDS
    If $iDS < $iDit Then $iDit = $iDS
    If $iDS > $iDah Then $iDah = $iDS
    EndIf
    $iDS = 0
    $iDM += 1
    Case Else
    If $iDM > 0 Then
    $iCnt += 1
    $aMorse[$iCnt][0] = 0
    $aMorse[$iCnt][1] = $iDM
    EndIf
    $iDS += 1
    $iDM = 0
    EndSwitch

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

    $iPos = _BASS_ChannelGetPosition($hStream, $BASS_POS_BYTE)
    If $iPos >= $iLength Then ExitLoop
    WEnd
    _BASS_StreamFree($hStream)
    ;ConsoleWrite($iDit & " " & $iDah & @CRLF)

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

    ReDim $aMorse[$iCnt + 2][3]
    $aMorse[$iCnt + 1][0] = 0
    $aMorse[$iCnt + 1][1] = $iDah
    $aMorse[0][0] = $iCnt + 1

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

    Local $sCode = "", $sText = ""

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

    For $i = 1 To $aMorse[0][0]
    Switch $aMorse[$i][0]
    Case 1

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

    Switch $aMorse[$i][1]
    Case $iDit * 0.5 To $iDit * 1.5
    $sCode &= "·"
    ;$aMorse[$i][2] = "Dit"
    Case $iDah * 0.5 To $iDah * 1.5
    $sCode &= "-"
    ;$aMorse[$i][2] = "Dah"
    EndSwitch

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

    Case Else

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

    Switch $aMorse[$i][1]
    Case $iDit * 0.3 To $iDit * 1.5
    $sCode &= " "
    Case $iDah * 0.5 To $iDah * 1.5
    $sText &= _GetCode($sCode)
    ;ConsoleWrite($sCode & " " & _GetCode($sCode) & @CRLF)
    ;$aMorse[$i][2] = "<" & _GetCode($sCode) & "> Buchstabe"
    $sCode = ""
    Case $iDit * 6 To $iDit * 8
    $sText &= _GetCode($sCode) & " "
    ;ConsoleWrite($sCode & " " & _GetCode($sCode) & @CRLF)
    ;$aMorse[$i][2] = "<" & _GetCode($sCode) & "> Wort"
    $sCode = ""
    EndSwitch

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

    EndSwitch
    Next
    ConsoleWrite($sText & @CRLF)

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

    ;Local $hFile=FileOpen(StringTrimRight($sPath,3) & "txt",2)
    ;FileWrite($hFile, $sText)
    ;FileClose($hFile)
    ;_ArrayDisplay($aMorse)
    EndFunc ;==>_WaveToMorseCode

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

    Func _GetCode($sCode)
    $sCode = StringTrimRight(StringRegExpReplace($sCode, "([·-])(\h*)", "$1 "), 1)
    If Not $sCode Then Return ""
    Switch $oDict.Exists($sCode)
    Case True
    Return $oDict.Item($sCode)
    Case Else
    Return "<ERROR>"
    EndSwitch
    EndFunc ;==>_GetCode

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

    Func _AddCodeTable()
    _Add("A", "· -")
    _Add("B", "- · · ·")
    _Add("C", "- · - ·")
    _Add("D", "- · ·")
    _Add("E", "·")
    _Add("F", "· · - ·")
    _Add("G", "- - ·")
    _Add("H", "· · · ·")
    _Add("I", "· ·")
    _Add("J", "· - - -")
    _Add("K", "- · -")
    _Add("L", "· - · ·")
    _Add("M", "- -")
    _Add("N", "- ·")
    _Add("O", "- - -")
    _Add("P", "· - - ·")
    _Add("Q", "- - · -")
    _Add("R", "· - ·")
    _Add("S", "· · ·")
    _Add("T", "-")
    _Add("U", "· · -")
    _Add("V", "· · · -")
    _Add("W", "· - -")
    _Add("X", "- · · -")
    _Add("Y", "- · - -")
    _Add("Z", "- - · ·")

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

    _Add("0", "- - - - -")
    _Add("1", "· - - - -")
    _Add("2", "· · - - -")
    _Add("3", "· · · - -")
    _Add("4", "· · · · -")
    _Add("5", "· · · · ·")
    _Add("6", "- · · · ·")
    _Add("7", "- - · · ·")
    _Add("8", "- - - · ·")
    _Add("9", "- - - - ·")

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

    _Add("(KA)", "- · - · -")
    _Add("(BT)", "- · · · -")
    _Add("(AR)", "· - · - ·")
    _Add("(VE)", "· · · - ·")
    _Add("(SK)", "· · · - · -")
    _Add("(SOS)", "· · · - - - · · ·")
    _Add("(HH)", "· · · · · · · ·")

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

    _Add("Å", "· - - · -")
    _Add("Ä", "· - · -")
    _Add("È", "· - · · -")
    _Add("É", "· · - · ·")
    _Add("Ö", "- - - ·")
    _Add("Ü", "· · - -")
    _Add("ß", "· · · - - · ·")
    _Add("CH", "- - - -")
    _Add("Ñ", "- - · - -")
    _Add(".", "· - · - · -")
    _Add(",", "- - · · - -")
    _Add(":", "- - - · · ·")
    _Add(";", "- · - · - ·")
    _Add("?", "· · - - · ·")
    _Add("-", "- · · · · -")
    _Add("_", "· · - - · -")
    _Add("(", "- · - - ·")
    _Add(")", "- · - - · -")
    _Add("'", "· - - - - ·")
    _Add("=", "- · · · -")
    _Add("+", "· - · - ·")
    _Add("/", "- · · - ·")
    _Add("@", "· - - · - ·")
    EndFunc ;==>_AddCodeTable

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

    Func _Add($sChr, $sCode)
    If Not $oDict.Exists($sCode) Then $oDict.Add($sCode, $sChr)
    EndFunc ;==>_Add

    [/autoit]

    Mit der Testdatei scheint es zu funktionieren, mal sehn ob es auch mit anderen, längeren Dateien geht...

    E

  • Moin zusammen.

    Bekomme folgede Fehlermeldung:
    E:\test.au3(39,37) : ERROR: _BASS_LoWord(): undefined function.
    $iLeft = _BASS_LoWord($iLong)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    E:\test.au3(40,38) : ERROR: _BASS_HiWord(): undefined function.
    $iRight = _BASS_HiWord($iLong)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    E:\test.au3 - 2 error(s), 0 warning(s)

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Bei mir läuft es durch und NICHTS passiert :(

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl