Voice over IP - Mikrofoneingang als Mp3 versenden und abspielen

  • Ich möchte euch mein Testscript vorstellen, mit dem ich meine neuen MemoryBuffer - Funktionen getested hab.

    Das Sender-Script kodiert den Mikrofoneingang als Mp3 und versendet die Daten via TCPSend
    Und das Empfänger-Script spiel das dann ab

    Wieder mal nur rudimentär umgesetzt und ganz ohne Errorhandling - wie gasagt nur zum testen ;)

    Vielleicht will ja jemand daraus einen Voice Chat basteln :party:
    Ich kann jedoch noch nicht versprechen, daß sich die Funktionen nicht mehr verändern (bis zum nächsten release der Bass.au3)

    Sender:

    Spoiler anzeigen
    [autoit]

    #AutoIt3Wrapper_UseX64=n
    #include "Bass.au3"
    #include "BassEnc.au3"
    #include "BassExt.au3"

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

    $sIPADDRESS = "127.0.0.1"
    $iPORT = 1234

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

    OnAutoItExitRegister("_FreeBass")

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

    HotKeySet("{ESC}","_EXIT")

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

    _BASS_Startup()
    _BASS_ENCODE_Startup()
    _BASS_EXT_STARTUP()

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

    _BASS_RecordInit(-1)
    $hRecord = _BASS_RecordStart(44100, 2, 0, $BASS_EXT_RecordProc)

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

    $aBuffer=_BASS_EXT_MemoryBufferCreate()
    $hEncoder = _BASS_Encode_Start($hRecord, @ScriptDir & '\lame -r -x -b128 -h - -', 0, $BASS_EXT_EncodeProc, $aBuffer[0])

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

    TCPStartup()
    $iSocket = TCPListen($sIPADDRESS, $iPORT)

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

    $iPid=Run(@ScriptDir & "\TCP_receive.exe")

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

    $iAcceptSocket=-1
    While 1
    If $iAcceptSocket = -1 Then
    $iAcceptSocket=TCPAccept($iSocket)
    $iData=_BASS_EXT_MemoryBufferGetSize($aBuffer)
    _BASS_EXT_MemoryBufferGetData($aBuffer, $iData) ; solange keine Verbindung besteht -> buffer leeren
    ContinueLoop
    EndIf

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

    $iData=_BASS_EXT_MemoryBufferGetSize($aBuffer)
    If $iData Then
    $bMp3Data = _BASS_EXT_MemoryBufferGetData($aBuffer, $iData)
    $iSent=TCPSend($iAcceptSocket, $bMp3Data)
    ConsoleWrite("Bytes: " & BinaryLen($bMp3Data) & " / gesendet: " & $iSent & @CRLF)
    EndIf

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

    Sleep(50)
    WEnd

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

    Func _EXIT()
    Exit
    EndFunc

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

    Func _FreeBass()
    ProcessClose($iPid)
    TCPCloseSocket($iAcceptSocket)
    TCPShutdown()
    _BASS_Encode_Stop($hEncoder)
    _BASS_RecordFree()
    _BASS_Free()
    EndFunc

    [/autoit]


    Empfänger:

    Spoiler anzeigen
    [autoit]

    #AutoIt3Wrapper_UseX64=n
    #include "Bass.au3"
    #include "BassEnc.au3"
    #include "BassExt.au3"

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

    $sIPADDRESS = "127.0.0.1"
    $iPORT = 1234

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

    OnAutoItExitRegister("_FreeBass")

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

    _BASS_Startup()
    _BASS_ENCODE_Startup()
    _BASS_EXT_STARTUP()

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

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

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

    $hStream = 0

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

    $aBuffer=_BASS_EXT_MemoryBufferCreate()

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

    TCPStartup()
    $ConnectedSocket = TCPConnect($sIPADDRESS, $iPORT)
    If $ConnectedSocket = -1 Then
    MsgBox(0,"",@error)
    Exit
    EndIf

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

    While 1

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

    $bMp3Data=TCPRecv($ConnectedSocket,4096*2)
    If BinaryLen($bMp3Data) > 0 Then
    _BASS_EXT_MemoryBufferAddData($aBuffer, $bMp3Data)
    If Not $hStream And _BASS_EXT_MemoryBufferGetSize($aBuffer) > 4096 Then
    $hStream=_BASS_StreamCreateFileUser($STREAMFILE_BUFFERPUSH, BitOR($BASS_STREAM_RESTRATE, $BASS_STREAM_BLOCK), $BASS_EXT_FILEPROCS, $aBuffer[2])
    _BASS_ChannelPlay($hStream, 1)
    EndIf
    EndIf
    ToolTip("TCP_REICIVE Buffer size: " & _BASS_EXT_MemoryBufferGetSize($aBuffer))
    If $hStream And _BASS_EXT_MemoryBufferGetSize($aBuffer) >= 4096 Then _BASS_EXT_StreamPutFileBufferData($hStream, $aBuffer)

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

    Sleep(50)
    WEnd

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

    Func _EXIT()
    Exit
    EndFunc

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

    Func _FreeBass()
    TCPCloseSocket($ConnectedSocket)
    TCPShutdown()
    _BASS_Free()
    EndFunc

    [/autoit]

    Alle benötigten Dateien sind im Anhang
    TCP_receive.au3 muß als EXE komiliert werden und dann einfach TCP_send.au3 starten

    Errors bitte gleich melden :thumbup:

    E