![]() |
Aufnahmequelle wählen?
Hallo, liebe Community,
ich möchte in meiner Anwendung, dass sie beim Start die "Standard Aufnahmequelle" von Windows auf eine bestimmte Soundkarte schaltet ("USB Audio" heisst das Teil), von dieser dann LineIn als Eingang wählt und diesen auf volle Lautstärke setzt. Es geht um eine Hardware, die zu unserer Software mitgebaut und -geliefert wird, die eine eingebaute USB-Soundkarte hat, die (idealerweise -.-) "USB Audio" heisst. Das Gerät wird auch über USB angeschlossen. Wenn die Software gestartet wird - bzw. spätestens wenn eine Analyse läuft - MUSS sicher gestellt sein, dass der LineIn dieses Audiogeräts als Aufnahmequelle gewählt ist, da halt hierüber die Daten kommen. Wenn man z.B. die USB-Verbindung trennt, stellt Windows die Aufnahmequelle wieder auf den Standardsoundtreiber und auf "Mikrofon". Steckt man das Gerät wieder dran und wählt manuell das Gerät, so steht die Aufnahme standardmäßig auf Mikrofon und die Lautstärke ist ziemlich runtergeregelt. Ich bemühe schon seit gut zwei Tagen Google, bin auch auf diverse Sachen gestoßen (MSDN, SwissDelphiCenter, delphi.about.com, etc.) und hab hier im Forum gesucht ( ![]() Weiß hier jemand Rat? ;) Danke und Grüße, Mario |
Re: Aufnahmequelle wählen?
Hallo,
hab eine Lösung gefunden. Ist zwar nicht unbedingt das, was ich mir vorgestellt hab, aber unterm Strich auf jeden Fall sauberer. Hab keine Antworten und Lösungen gefunden, wie ich die globale Windows-Einstellung umstelle. Deswegen habe ich die entsprechenden Teile in der Anwendung von "TAudioIO" mit "BASS" ersetzt, welche gewünschte Funktionen unterstützt.
Delphi-Quellcode:
function BASS_Initialize_Recording_Device: Boolean;
var i: Integer; ChannelName, DeviceName: PChar; FoundDevice: Boolean; begin Result := FALSE; // **** Aufnahmegerät auf "USB Audio" setzen FoundDevice := FALSE; BASS_RecordFree; i := 0; DeviceName := BASS_RecordGetDeviceDescription (i); while DeviceName <> nil do begin if (StrPas(DeviceName) = SOURCE_AUDIO_NAME) then begin BASS_RecordInit (i); FoundDevice := TRUE; break; end; inc (i); DeviceName := BASS_RecordGetDeviceDescription (i); end; // while if not FoundDevice then raise Exception.Create ('Fehler: Das Audiogerät "' + SOURCE_AUDIO_NAME + '" konnte nicht gefunden werden.'); // **** Aufnahmequelle auf "LineIn" und max. Lautstärke setzen FoundDevice := FALSE; i := 0; ChannelName := BASS_RecordGetInputName(i); while ChannelName <> nil do begin if (StrPas(ChannelName) = SOURCE_AUDIO_INPUT) then begin FoundDevice := TRUE; BASS_RecordSetInput (i, BASS_INPUT_ON or BASS_INPUT_LEVEL or 100); break; end; inc(i); ChannelName := BASS_RecordGetInputName(i); end; // while if not FoundDevice then raise Exception.Create ('Fehler: Für das Audiogerät "' + SOURCE_AUDIO_NAME + '" konnte die Quelle "' + SOURCE_AUDIO_INPUT + '" nicht gewählt werden.'); // **** Result := TRUE; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz