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