Probier mal folgendes:
ChannelGetData von $hRecord
und dann mit StreamPutData in einen PushStream einfüllen.
Diesen PushStream müsstest du allerdings vorher mit Play starten, und würde evtl. wieder Rückkopplungen verursachen.
Es könnte ein Trick helfen:
PushStream bleibt gestoppt!
Nach StreamPutData gleich ChannelGetData($hStream) aufrufen (somit spielt der STream nicht, aber die DSP-Funktionen = BeatDetection sollten aufgerufen werden...)
EDIT:
AutoIt
#AutoIt3Wrapper_UseX64=n
#include "Bass.au3"
#include "BassFX.au3"
OnAutoItExitRegister("_FreeBass")
HotKeySet("{ESC}", "_Exit")
_BASS_Startup()
_BASS_FX_Startup()
_BASS_Init(0)
_BASS_RecordInit(-1)
$hStream = _BASS_StreamCreate(44100, 2, $BASS_STREAM_DECODE, $STREAMPROC_DUMMY)
_BASS_FX_BPM_BeatCallbackSet($hStream, "_BPMBEATPROC", 0)
$hRecord = _BASS_RecordStart(44100, 2, 0)
While 1
$iBytes = _BASS_ChannelGetData($hRecord, 0, 0)
If $iBytes Then
$tData = DllStructCreate("byte[" & $iBytes & "]")
_BASS_ChannelGetData($hRecord, DllStructGetPtr($tData), $iBytes)
_BASS_ChannelGetData($hStream, DllStructGetPtr($tData), $iBytes)
EndIf
Sleep(20)
WEnd
Func _BPMBEATPROC($handle, $pos, $user)
ConsoleWrite("Beat position: " & $pos & @CRLF)
EndFunc ;==>_BPMBEATPROC
Func _Exit()
Exit
EndFunc ;==>_Exit
Func _FreeBass()
_BASS_StreamFree($hStream)
_BASS_Free()
EndFunc ;==>_FreeBass
Alles anzeigen