Aufnahme mit _BASS_Record

  • Hallo zusammen,

    ich habe mir ein kleines Script zusammengebastelt, welches folgendes tun sollte:
    - 1kHz. Sinuston ausgeben
    - Eigene Ausgabe bezüglich Frequenz und Pegel messen
    - Mikrofoneingang bezüglich Frequenz und Pegel messen.

    Die ersten beiden Punkte habe ich schon geschafft und das scheint gut zu funktionieren. Doch nun müsste ich noch die Frequenz des Tones am Mikrofoneingang und dessen Pegel messen. Das klappt nicht.

    Zur Erklärung ich habe einfach den Kopfhörer Ausgang mit dem Mikrofon Eingang verbunden und sollte somit +/- das gleiche Ergebnis erhalten. Letzten Endes ist dann natürlich kein einfaches Kabel dazwischen, sondern ein Gerät, welches geprüft werden soll.

    Hier mal mein SCHNELL zusammengebasteltes Test-Script:

    Spoiler anzeigen
    [autoit]

    #include "Bass.au3"
    #include "BassConstants.au3"

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

    Dim $File = "1kHz.wav", $hMusic, $fftstruct, $fft, $Recordstruct, $Record, $hRecord
    Dim $TmpData = 0, $TmpNr = 0, $TmpLevel = 0, $Level = 0, $Timer

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

    _BASS_STARTUP ("BASS.dll") ;Open Bass.DLL.
    _BASS_Init(0, -1, 44100, 0, "") ;Initalize bass.

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

    $hMusic = _BASS_StreamCreateFile(False, $File, 0, 0, 0)
    _BASS_ChannelPlay($hMusic, 1)

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

    $fftstruct = DllStructCreate("float[4096]")
    _BASS_ChannelGetData($hMusic, DllStructGetPtr($fftstruct), $BASS_DATA_FFT8192)
    For $i = 0 To 4095
    $TmpData = Round(DllStructGetData($fftstruct, 1, $i + 1) * 100)
    If $fft < $TmpData Then ;Bestimme den Ort des Maximalwerts der FFT Analyse
    $fft = $TmpData
    $TmpNr = $i+1
    EndIf
    Next
    $FrequencyOut = Round(22000 / 4096 * $TmpNr) ;Max 22kHz.

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

    $Timer = TimerInit()
    While 1
    Sleep(10)
    $TmpLevel = _BASS_ChannelGetLevel($hMusic) ;Get Sound Level for max 500ms
    If $Level < $TmpLevel Then $Level = $TmpLevel
    If TimerDiff($Timer) > 500 Then ExitLoop
    WEnd

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

    _BASS_RecordInit(-1)
    $hRecord = _BASS_RecordStart(44100,1,0,"Bass_Callback_Record",0)
    $Recordstruct = DllStructCreate("float[4096]")
    _BASS_ChannelGetData($hRecord, DllStructGetPtr($Recordstruct),$BASS_DATA_FFT8192)

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

    $TmpData = 0
    $Record = 0
    $TmpNr = 0

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

    For $i = 0 To 4095
    $TmpData = Round(DllStructGetData($Recordstruct, 1, $i + 1) * 100)
    If $Record < $TmpData Then ;Bestimme den Ort des Maximalwerts der FFT Analyse
    $Record = $TmpData
    $TmpNr = $i+1
    EndIf
    Next
    MsgBox(0,$i+1,$Record & "/" & $TmpNr)

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

    MsgBox(0,"Ausgabe","Frequenz: " & $FrequencyOut & "Hz." & @LF & "Maximalpegel: " & $Level)
    _BASS_Free()
    _BASS_RecordFree()
    Exit

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

    Func Bass_Callback_Record($handle, $buffer, $length, $user)
    Return 1
    EndFunc

    [/autoit]

    Die dafür notwendigen externen Dateien sind im hier (autoit.de/wcf/attachment/8844/) enthalten.

    Vielleicht kann mit ja jemand helfen. Ich verstehe auch nicht, was eine Callback Funktion sein soll......
    Vielen Dank für Eure gnädigen und geduldigen Antworten!

    Grüsse
    Veronesi

  • Hallo (Auto)Bert,

    vielen Dank für die Antwort. Doch leider hilft mir das im Moment noch nicht viel weiter.
    Ich möchte ja nicht direkt aufzeichnen, sondern nur analysieren, was beim Mikrofon Eingang reinkommt.

    Das Tool sieht zwar echt genial aus, doch ich kann nur die EXE starten. Die Source selber hat dutzende von Fehler (bei meiner Auto-IT Version; die momentan aktuellste).
    Eigentlich müsste ich ja nur noch die beiden Funktionen "_BASS_RecordStart" und "_BASS_ChannelGetData" korrekt ausführen können - und zwar auf dem Mic-Eingang.

    Dann würde es laufen.
    Hast Du vielleicht gleich eine Idee?
    Im Script wird mit "_BASS_Encode_Start" gearbeitet. Das brauche ich aber gar nicht, oder???

    Grüsse
    Veronesi

  • Hallo!

    Inzwischen bin ich so weit, dass ich zuerst das Audio Signal mit dem normalen Line-In Eingang der Soundkarte einlesen möchte. Einfach alles automatisch in ein temporäres File einlesen. Dann sehe ich weiter.
    Ich habe es geschafft, dass er mir ein WAV File erstellt. Er schreibt auch Daten rein. Aber irgendwie schreibt er nicht das rein, was über den Line-In Eingang reinkommt..

    Hat jemand eine Idee zu meinem kleinen Skript hier?

    Spoiler anzeigen
    [autoit]

    #include <BassEnc.au3>
    Local $RecordDevice, $hRecord, $EncHandle, $temp, $basscb_dll

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

    _BASS_STARTUP("Bass.dll")
    _BASS_Encode_STARTUP("BassEnc.dll")
    $basscb_dll = DllOpen("BASSCB.dll")
    $RecordDevice = _BASS_RecordInit(-1)

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

    $temp = DllCall($basscb_dll, "dword", "RecordStart", "dword", 44100, "dword", 2, "dword", _makelong($BASS_SAMPLE_FX, 10))
    $hRecord = $temp[0]

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

    ;~ $hRecord = _BASS_RecordStart(44100,2,0)
    $EncHandle = _BASS_Encode_Start($hRecord, @ScriptDir & "\Test.wav", $BASS_ENCODE_PCM)
    Sleep(500)
    _BASS_Encode_Stop($hRecord)

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

    _BASS_Free()
    _BASS_RecordFree()

    [/autoit]

    Ich suche einfach die EINFACHSTE Möglichkeit, um automatisch 500ms lang ein Audiosignal auf dem Line-In aufzuzeichnen. Das kann doch nicht so schwer sein!
    Wer hat eine Idee?

    Grüsse
    Veronesi

    Einmal editiert, zuletzt von veronesi (13. April 2010 um 16:27)

  • Hallo Techmix,

    danke für die Links. Doch unter Windows 7 scheint das (bei mir) nicht mehr zu laufen.
    Überhaupt möchte ich unabhängiger von der Betriebssystem-Version sein.

    Mit dem Script in meinem letzten Post kann ich ja grundsätzlich eine WAV Datei aufzeichnen. Doch es wird irgendwie das falsche (evtl. falscher Kanal?) aufgezeichnet.

    Trotzdem danke!

  • So, nun bin ich wieder einen kleinen Schritt weiter zur Lösung gekommen.
    Mein Skript für die Aufnahmen scheint grundsätzlich zu funktionieren. (Ich hatte einen Hardware Defekt und schlechte Kontakte!)

    Nun kommt aber die nächste Hürde:
    Ich möchte ja schlussendlich von dem 1kHz. File welches abgespielt wird die Frequenz und den Pegel bestimmen. Danach das gleiche noch von dem aufgenommenen File.
    Das sollte dann schlussendlich +/- gleich sein!

    Spiele ich nun das 1kHz. File ab, kann ich die Frequenz mit dem Skript im 1. Post bestimmen. Geht prima, er erkennt mir immer 1004 Herz.
    Dann stoppe ich das Programm und ändere den Pfad für das File ab, so dass er nicht mehr das 1kHz. File abspielt, sondern ein "leeres" WAV.
    Nun starte ich mein Programm und er sagt mir, dass dies 0Hz. sind. Stimmt ja auch, denn es kommt kein Ton raus!

    Wenn ich nun aber beides in einem Programm nacheinander machen möchte, also 1kHz. abspielen, Frequenz bestimmen, _BASS_Free() wählen, alles neu initialisieren
    und dann das "leere" File abspiele, dann bestimmt er mir beim 2. (leeren) File immer auch 1004 Herz.
    Warum?

    Ich befürchte, dass das irgendwas mit einem Puffer oder so zu tun hat. Aber ich habe ja mit _BASS_Free() alles gelöscht, oder?

    Grüsse
    Veronesi

  • Setze mal die Werte von $FrequencyOut und $Level zu Beginn jedes Durchlaufes auf 0.

    Und Poste mal dein Aktuelles Script, weil ich das bei mir nicht testen kann.


    Und schau dir mal das hier an, da hat Eukalyptus die Töne direkt über Frequenzen erstellt und nicht mit Wav´s.

    2 Mal editiert, zuletzt von Techmix (13. April 2010 um 22:34)

  • Leider hat das auch nichts gebracht.
    Ich hänge mal mein aktuelles Skript an.
    Hier wird nichts aufgezeichnet. Ich nehme einfach mein 1kHz. File (mit 1kHz. Ton) und mein Test.wav (leere Aufnahme). autoit.de/wcf/attachment/8919/

    Spoiler anzeigen
    [autoit]

    #include "Bass.au3"
    #include "BassConstants.au3"

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

    Dim $File = "1kHz.wav", $hMusic, $fftstruct, $fft, $Recordstruct, $Record, $hRecord
    Dim $TmpData = 0, $TmpNr = 0, $TmpLevel = 0, $Level = 0, $Timer

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

    $test1 = test("1kHz.wav")
    $test2 = test("test.wav")
    MsgBox(0,"",$test1 & " / " & $test2)
    exit

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

    func test($file)
    $FrequencyOut = 0
    $fftstruct = 0
    $hMusic = 0
    _BASS_STARTUP ("BASS.dll") ;Open Bass.DLL.
    _BASS_Init(0, -1, 44100, 0, "") ;Initalize bass.

    $hMusic = _BASS_StreamCreateFile(False, $File, 0, 0, 0)
    _BASS_ChannelPlay($hMusic, 1)

    $fftstruct = DllStructCreate("float[4096]")
    _BASS_ChannelGetData($hMusic, DllStructGetPtr($fftstruct), $BASS_DATA_FFT8192)
    For $i = 0 To 4095
    $TmpData = Round(DllStructGetData($fftstruct, 1, $i + 1) * 100)
    If $fft < $TmpData Then ;Bestimme den Ort des Maximalwerts der FFT Analyse
    $fft = $TmpData
    $TmpNr = $i+1
    EndIf
    Next
    $FrequencyOut = Round(22000 / 4096 * $TmpNr) ;Max 22kHz.


    Sleep(800)
    _BASS_StreamFree($hMusic)
    _BASS_Free()
    Return $FrequencyOut
    EndFunc

    [/autoit]

    Hat sonst noch jemand eine Idee?
    Gruss
    Veronesi

  • Hi

    Du musst auch $TmpNr auf 0 setzen.
    Bzw. wär es besser, wenn du die Variablen in der Funktion als Local deklarierst

    Edit:
    So kannst du den Record-Input direkt auslesen:

    Spoiler anzeigen
    [autoit]

    #include "Bass.au3"
    #include "BassConstants.au3"

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

    Global $File = "1kHz.wav"

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

    _BASS_STARTUP("BASS.dll") ;Open Bass.DLL.
    _BASS_Init(0, -1, 44100, 0, "") ;Initalize bass.

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

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

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

    $hMusic = _BASS_StreamCreateFile(False, $File, 0, 0, 0)
    _BASS_ChannelPlay($hMusic, 1)

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

    While _BASS_ChannelIsActive($hMusic) = $BASS_ACTIVE_PLAYING
    $iFreqOut = _GetFreq($hMusic)
    $iFreqIn = _GetFreq($hRecord)
    ToolTip("Frequenz Out: " & $iFreqOut & @LF & "Frequenz In: " & $iFreqIn)
    Sleep(100)
    WEnd

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

    _BASS_Free()
    _BASS_RecordFree()

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

    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 $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

    [/autoit]

    Beachte, daß beim Output und Input des Audiointerfaces jeweils der standard gewählt wird, d.h. der Out/Input, welcher auch im Windows-Mixer ausgewählt ist.
    In einem der Beispiele der Bass UDF wird gezeigt, wie man diese auswählen kann

    mfgE

  • Hey Eukalyptus, Du bist genial!

    Das war es! Nun funktioniert es!

    Hier das geänderte Script

    Spoiler anzeigen
    [autoit]

    #include "Bass.au3"
    #include "BassConstants.au3"

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

    Opt("MustDeclareVars", 1)

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

    Dim $test1 = 0, $test2 = 0

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

    $test1 = test("1kHz.wav")
    $test2 = test("test.wav")
    MsgBox(0,"",$test1 & " / " & $test2)
    exit

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

    Func test($file)
    Local $FrequencyOut = 0, $fftstruct = 0, $hMusic = 0, $TmpNr = 0, $TmpData
    Local $hMusic, $fftstruct, $fft
    _BASS_STARTUP ("BASS.dll") ;Open Bass.DLL.
    _BASS_Init(0, -1, 44100, 0, "") ;Initalize bass.

    $hMusic = _BASS_StreamCreateFile(False, $File, 0, 0, 0)
    _BASS_ChannelPlay($hMusic, 1)

    $fftstruct = DllStructCreate("float[4096]")
    _BASS_ChannelGetData($hMusic, DllStructGetPtr($fftstruct), $BASS_DATA_FFT8192)
    For $i = 0 To 4095
    $TmpData = Round(DllStructGetData($fftstruct, 1, $i + 1) * 100)
    If $fft < $TmpData Then ;Bestimme den Ort des Maximalwerts der FFT Analyse
    $fft = $TmpData
    $TmpNr = $i+1
    EndIf
    Next
    $FrequencyOut = Round(22000 / 4096 * $TmpNr) ;Max 22kHz.


    Sleep(800)
    _BASS_StreamFree($hMusic)
    _BASS_Free()
    Return $FrequencyOut
    EndFunc

    [/autoit]

    Natürlich werde ich das nun noch mit dem Aufnehmen einfügen und dann das ganze besser formattieren und überarbeiten!
    Aber im Grundsatz scheint es nun zu funktionieren!

    Vielen Dank!!!!

    Grüsse
    Veronesi

  • Hab das Programm gleich getestet. Leider funktioniert es nicht....

    Ich habe mal den Line-In Eingang offen gelassen. Somit sollte die FreqOut = 1004Hz und FreqIn = 0Hz sein.
    Doch beide sind bei mir nun 1004Hz.

    (D.h. am Anfang sehe ich für den Out ganz kurz eine 0. Die wechselt dann aber innerhalb eines Wimpernschlages auf 1004Hz.!)

    Im Windows kann ich nur einen Eingang wählen. (Obwohl ich auf der Soundkarte einen Line-In und einen Mic-In habe.
    Doch da ich ja vom Line-Out komme, gehe ich auf den Line-In!

    Was kann hier wohl wieder falsch sein?

    Danke + Gruss
    Veronesi

  • Guter Gedanke! Doch das ist es nicht.
    Ich habe nämlich den Stecker beim Line-Out drinnen gelassen. Somit kommt nichts aus dem integrierten PC-Lautsprecher.
    Und die aktiven Lautsprecher vom Line-Out habe ich ausgeschaltet.

    Im Büro ist es auch ruhig......

    Irgendwie glaube ich an Übersprechen innerhalb der Soundkarte auf den Mic-Eingang....
    Doch leider muss das ganze Schlussendlich mit genau dieser Soundkarte funktionieren :(

    Gruss
    Veronesi

  • Mit 0.2 funktioniert das leider nicht.
    Ich bin deshalb mal hoch gegangen auf 100!

    [autoit]

    If $TmpData > 100 AND $fft < $TmpData Then

    [/autoit]


    Und da passiert das unfassbare: Nun ist plötzlich Frequenz Out = 0 und Frequenz In = 1004.
    Also genau verdreht.

    Dann habe ich das wieder rückgängig gemacht:

    [autoit]

    If $fft < $TmpData Then

    [/autoit]


    und dafür das Sleep in der While Schlaufe verlängert. (Auf Sleep(1000))
    Nun zeigt er zwar für IN 1004 und für Out 0 an, doch auch wenn ich das Kabel an Line-In wieder einstecke, bleibt das so!

    Mir scheint das fast zufällig zu sein!

  • Nun habe ich Dein Script noch auf einem anderen PC (ohne Mikrofon nur mit Line-In) getestet.
    Es läuft (fast) einwandfrei!

    Aber warum auf meinem Rechner nicht?

    Sind auf dem anderen PC keine Audio Kabel verbunden, so messe ich als Out 1004Hz und als In 0Hz. völlig korrekt.
    Nun stecke ich aber das Kabel (Line-Out zu Line-In) ein und messe nochmals. Dann bekomme ich als Out 1004Hz und als In 5Hz.

    Gibt es eine bessere Methode um die Frequenz eines TONES über die Soundkarte zu bestimmen?
    Ich brauche die Frequenz auch nicht wahnsinnig genau. Denn ich muss bloss wissen, ob das Signal am Line-In ankommt und ob es in sehr grob die richtige Frequenz / Pegel hat.

    Bei der Frequenz reichen mir +/- 50Hz. locker!

    Hast Du noch weitere Ideen?
    Grüsse
    Veronesi

  • Probier mal dieses Script poste hier dann den Consolenoutput (in Scite unten)

    Spoiler anzeigen
    [autoit]

    #include "Bass.au3"
    #include "BassConstants.au3"

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

    Global $File = "1kHz.wav"

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

    _BASS_STARTUP("BASS.dll") ;Open Bass.DLL.
    _BASS_Init(0, -1, 44100, 0, "") ;Initalize bass.

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

    _BASS_RecordInit(-1)

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

    _ListDevices()
    _ListRecDevices()

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

    $hRecord = _BASS_RecordStart(44100, 1, 0, "", 0)

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

    $hMusic = _BASS_StreamCreateFile(False, $File, 0, 0, 0)
    _BASS_ChannelPlay($hMusic, 1)

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

    While _BASS_ChannelIsActive($hMusic) = $BASS_ACTIVE_PLAYING
    $iFreqOut = _GetFreq($hMusic)
    $iFreqIn = _GetFreq($hRecord)
    ToolTip("Frequenz Out: " & $iFreqOut & @LF & "Frequenz In: " & $iFreqIn)
    Sleep(100)
    WEnd

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

    _BASS_Free()
    _BASS_RecordFree()

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

    Func _ListDevices()
    Local $aInfo
    For $i = 0 To 5
    $aInfo = _BASS_GetDeviceInfo($i)
    If @error Then ExitLoop
    If IsArray($aInfo) Then
    If BitAND($aInfo[2], $BASS_DEVICE_INIT) Then
    ConsoleWrite("+Output " & $i & ": <" & $aInfo[0] & "> <" & $aInfo[1] & "> <" & $aInfo[2] & ">" & @LF)
    Else
    ConsoleWrite("-Output " & $i & ": <" & $aInfo[0] & "> <" & $aInfo[1] & "> <" & $aInfo[2] & ">" & @LF)
    EndIf
    EndIf
    Next
    ConsoleWrite(@LF)
    EndFunc ;==>_ListDevices

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

    Func _ListRecDevices()
    Local $aInfo, $aInfo2
    For $i = 0 To 5
    $aInfo = _BASS_RecordGetDeviceInfo($i)
    If @error Then ExitLoop
    If IsArray($aInfo) Then
    If BitAND($aInfo[2], $BASS_DEVICE_INIT) Then
    ConsoleWrite("+Input " & $i & ": <" & $aInfo[0] & "> <" & $aInfo[1] & "> <" & $aInfo[2] & ">" & @LF)
    $aInfo = _BASS_RecordGetInfo()
    For $j = 0 To $aInfo[2]
    $sName = _BASS_RecordGetInputName($j)
    If @error Then ExitLoop
    $aInfo2 = _BASS_RecordGetInput($j)
    If BitAND($aInfo2[0], $BASS_INPUT_OFF) Then
    ConsoleWrite("!" & @TAB & $sName & @LF)
    Else
    ConsoleWrite("+" & @TAB & $sName & @LF)
    EndIf
    Next
    Else
    ConsoleWrite("-Input " & $i & ": <" & $aInfo[0] & "> <" & $aInfo[1] & "> <" & $aInfo[2] & ">" & @LF)
    EndIf
    EndIf
    Next
    ConsoleWrite(@LF)
    EndFunc ;==>_ListRecDevices

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

    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

    [/autoit]
  • So, hier ist der Output der Konsole:

    (Line-In Eingang war nicht verbunden und trotzdem bekam ich jeweils 1004Hz. angezeigt...)

    -Output 0: <No sound> <> <1>
    +Output 1: <Realtek HD Audio output> <RtkHDAud.sys> <7>

    +Input 0: <Realtek HD Audio Input> <RtkHDAud.sys> <7>
    + CD-Lautstärke
    + Mikrofon
    + Line-Lautstärke
    + Aux-Lautstärke
    + Stereomix

    Gruss
    Veronesi