Schaut doch nicht so schlecht aus
Das sollte doch eigentlich so funktionieren:
Spoiler anzeigen
#AutoIt3Wrapper_UseX64=n
[/autoit] [autoit][/autoit] [autoit]#include "Bass.au3"
#include "BassConstants.au3"
Global $File = "1kHz.wav"
[/autoit] [autoit][/autoit] [autoit]_BASS_STARTUP("BASS.dll") ;Open Bass.DLL.
_BASS_Init(0, 2, 44100, 0, "") ;Initalize bass.
If @error Then
MsgBox(0,"ERROR","ERROR Audio Out")
Exit
EndIf
_BASS_RecordInit(0)
If @error Or _BASS_RecordGetDevice() > 10 Or _BASS_RecordGetDevice() < 0 Then
MsgBox(0,"ERROR","ERROR Audio In")
Exit
EndIf
_BASS_RecordSetInput(0, $BASS_INPUT_ON,-1)
[/autoit] [autoit][/autoit] [autoit]$hRecord = _BASS_RecordStart(44100, 2, 0, "", 0)
[/autoit] [autoit][/autoit] [autoit]$hMusic = _BASS_StreamCreateFile(False, $File, 0, 0, 0)
_BASS_ChannelPlay($hMusic, 1)
While _BASS_ChannelIsActive($hMusic) = $BASS_ACTIVE_PLAYING
$iFreqOut = _GetFreq($hMusic)
$iFreqIn = _GetFreq($hRecord)
ToolTip("Frequenz Out: " & $iFreqOut & @LF & "Frequenz In: " & $iFreqIn)
Sleep(100)
WEnd
_BASS_Free()
_BASS_RecordFree()
Func _GetFreq($hHandle)
Local $TmpData = 0, $TmpNr = 0, $fft = 0
Local $fftstruct = DllStructCreate("float[4096]")
_BASS_ChannelGetData($hHandle, DllStructGetPtr($fftstruct), $BASS_DATA_FFT8192)
For $i = 0 To 4095
$TmpData = Round(DllStructGetData($fftstruct, 1, $i + 1) * 100)
If $TmpData > 0.2 And $fft < $TmpData Then ;Bestimme den Ort des Maximalwerts der FFT Analyse
$fft = $TmpData
$TmpNr = $i + 1
EndIf
Next
Return Round(22000 / 4096 * $TmpNr) ;Max 22kHz.
EndFunc ;==>_GetFreq