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
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
#AutoIt3Wrapper_UseX64=n
#include "Bass.au3"
#include "BassEnc.au3"
#include "BassExt.au3"
$sIPADDRESS = "127.0.0.1"
$iPORT = 1234
OnAutoItExitRegister("_FreeBass")
[/autoit] [autoit][/autoit] [autoit]HotKeySet("{ESC}","_EXIT")
[/autoit] [autoit][/autoit] [autoit]_BASS_Startup()
_BASS_ENCODE_Startup()
_BASS_EXT_STARTUP()
_BASS_RecordInit(-1)
$hRecord = _BASS_RecordStart(44100, 2, 0, $BASS_EXT_RecordProc)
$aBuffer=_BASS_EXT_MemoryBufferCreate()
$hEncoder = _BASS_Encode_Start($hRecord, @ScriptDir & '\lame -r -x -b128 -h - -', 0, $BASS_EXT_EncodeProc, $aBuffer[0])
TCPStartup()
$iSocket = TCPListen($sIPADDRESS, $iPORT)
$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
$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
Sleep(50)
WEnd
Func _EXIT()
Exit
EndFunc
Func _FreeBass()
ProcessClose($iPid)
TCPCloseSocket($iAcceptSocket)
TCPShutdown()
_BASS_Encode_Stop($hEncoder)
_BASS_RecordFree()
_BASS_Free()
EndFunc
Empfänger:
Spoiler anzeigen
#AutoIt3Wrapper_UseX64=n
#include "Bass.au3"
#include "BassEnc.au3"
#include "BassExt.au3"
$sIPADDRESS = "127.0.0.1"
$iPORT = 1234
OnAutoItExitRegister("_FreeBass")
[/autoit] [autoit][/autoit] [autoit]_BASS_Startup()
_BASS_ENCODE_Startup()
_BASS_EXT_STARTUP()
_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
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)
Sleep(50)
WEnd
Func _EXIT()
Exit
EndFunc
Func _FreeBass()
TCPCloseSocket($ConnectedSocket)
TCPShutdown()
_BASS_Free()
EndFunc
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 ![]()
E