![]() |
Primäre Soundkarte setzen
Liste der Anhänge anzeigen (Anzahl: 1)
Ziel:Ändern des primären Soundgerätes für, Ausgabe, Aufnahme und Midiausgabe.
Die Funktionen:
Delphi-Quellcode:
Die Funktionen geben als Ergebnis das Ergebnis der Message funktion zurück, was eine detailierte Fehleranalyse zulässt, Rückgabewerte sind wie folg:
uses MMSystem;
... const DRVM_MAPPER = $2000; // mmddk.h #define DRVM_MAPPER 0x2000 DRVM_MAPPER_PREFERRED_GET = DRVM_MAPPER+21; // mmddk.h, damit könnte man sich die ID der primären Soundkarte besorgen DRVM_MAPPER_PREFERRED_SET = DRVM_MAPPER+22; // in einer uralten version von mmddk.h, jetzt undokumentiert ... //Ändert die primäre Soundkarte für die Ausgabe function ChangePrimarySndOutDevice(dev: cardinal): integer; {dev Bereich: 0 bis waveOutGetNumDevs - 1} begin result := waveOutMessage(HWAVEOUT(WAVE_MAPPER), DRVM_MAPPER_PREFERRED_SET, dev, 0); end; //Ändert die primäre Soundkarte für die Aufnahme function ChangePrimarySndInDevice(dev: cardinal): integer; {dev Bereich: 0 bis waveInGetNumDevs - 1} begin result := waveInMessage(HWAVEIN(WAVE_MAPPER), DRVM_MAPPER_PREFERRED_SET, dev, 0); end; //Ändert die primäre Soundkarte für die MIDI-Ausgabe function ChangePrimaryMidiOutDevice(dev : cardinal): integer; {dev Bereich: 0 bis midiOutGetNumDevs - 1} begin result := midiOutMessage(HMIDIOUT(MIDI_MAPPER), DRVM_MAPPER_PREFERRED_SET, dev, 0); end; Zitat:
Auf dem Formular exsistieren 3 Combobox, 3 labels zur Beschreibung letzterer und ein Button. Wenn das Formular geladen wird werden die verfügbaren Geräte in die Comboboxen geschrieben(GetXXXDevices), anschließend wählt der User seine bevorzugten Geräte aus und legt diese mit einem Klick auf den Button fest.
Delphi-Quellcode:
Wenn man beispielsweise 2 Soundkarten hat und einfach immer wechseln will genügt es ChangePrimarySndXDevice(1) zu schreiben, da Windows(XP) die Devicebelegung jedesmal vertauscht!
...
type TMainForm = class(TForm) ComboBox1: TComboBox; //SoundAusgabe ComboBox2: TComboBox; //SoundAufnahme ComboBox3: TComboBox; //MidiAusgabe Button1: TButton; //Einstellugen übernehmen Label1: TLabel; //Beschriftung der Comboboxen Label2: TLabel; Label3: TLabel; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private procedure GetOutDevices; procedure GetInDevices; procedure GetMidiOutDevices; public { Public declarations } end; var MainForm: TMainForm; implementation {$R *.dfm} uses MMSystem; const DRVM_MAPPER = $2000; // mmddk.h #define DRVM_MAPPER 0x2000 DRVM_MAPPER_PREFERRED_GET = DRVM_MAPPER+21; // mmddk.h DRVM_MAPPER_PREFERRED_SET = DRVM_MAPPER+22; // in einer uralten version von mmddk.h function ChangePrimarySndOutDevice(dev: cardinal): integer; {dev Bereich: 0 bis waveOutGetNumDevs - 1} begin result := waveOutMessage(HWAVEOUT(WAVE_MAPPER), DRVM_MAPPER_PREFERRED_SET, dev, 0); end; function ChangePrimarySndInDevice(dev: cardinal): integer; {dev Bereich: 0 bis waveInGetNumDevs - 1} begin result := waveInMessage(HWAVEIN(WAVE_MAPPER), DRVM_MAPPER_PREFERRED_SET, dev, 0); end; function ChangePrimaryMidiOutDevice(dev : cardinal): integer; {dev Bereich: 0 bis midiOutGetNumDevs - 1} begin result := midiOutMessage(HMIDIOUT(MIDI_MAPPER), DRVM_MAPPER_PREFERRED_SET, dev, 0); end; //Listet alle verfügbaren Ausgabekarten procedure TMainForm.GetOutDevices; var dev: Integer; caps: TWaveOutCaps; begin ComboBox1.Clear; for dev := 0 to waveOutGetNumDevs - 1 do begin waveOutGetDevCaps(dev, @caps, sizeof(TWaveOutCaps)); ComboBox1.Items.Add(caps.szPname); end; ComboBox1.ItemIndex := 0; //Die jetzige primäre Soundkarte auswählen end; //Listet alle verfügbaren AufnahmeKarten procedure TMainForm.GetInDevices; var dev: Integer; caps: TWaveInCaps; begin ComboBox2.Clear; for dev := 0 to waveInGetNumDevs - 1 do begin waveInGetDevCaps(dev, @caps, sizeof(TWaveInCaps)); ComboBox2.Items.Add(caps.szPname); end; ComboBox2.ItemIndex := 0; //Die jetzige primäre Soundkarte auswählen end; //Listet alle Midiausgabe Geräte procedure TMainForm.GetMidiOutDevices; var dev: Integer; caps: TMidiOutCaps; begin ComboBox3.Clear; for dev := 0 to midiOutGetNumDevs - 1 do begin midiOutGetDevCaps(dev, @caps, sizeof(TMidiOutCaps)); ComboBox3.Items.Add(caps.szPname); end; ComboBox3.ItemIndex := 0; //Die jetzige primäre Soundkarte auswählen end; //Alle Comboboxen füllen procedure TMainForm.FormCreate(Sender: TObject); begin GetOutDevices; GetInDevices; GetMidiOutDevices; end; procedure TMainForm.Button1Click(Sender: TObject); begin if ChangePrimarySndOutDevice(Combobox1.ItemIndex) = MMSYSERR_NOERROR then begin GetOutDevices; //Windows setzt immer die primäre Karte als 0, daher müssen wir die Liste neu holen MessageDlg('Primäres Ausgabegerät wurde erfolgreich geändert', mtInformation, [mbOK], 0); end else MessageDlg('Fehler beim Setzen des primären Ausgabegerätes', mtError, [mbOK], 0); if ChangePrimarySndInDevice(Combobox2.ItemIndex) = MMSYSERR_NOERROR then begin GetInDevices; //Windows setzt immer die primäre Karte als 0, daher müssen wir die Liste neu holen MessageDlg('Primäres Aufnahmegerät wurde erfolgreich geändert', mtInformation, [mbOK], 0); end else MessageDlg('Fehler beim Setzen des primären Aufnahmegerätes', mtError, [mbOK], 0); if ChangePrimaryMidiOutDevice(Combobox3.ItemIndex) = MMSYSERR_NOERROR then begin GetMidiOutDevices; //Windows setzt immer die primäre Karte als 0, daher müssen wir die Liste neu holen MessageDlg('Primäres MIDI-Ausgabegerät wurde erfolgreich geändert', mtInformation, [mbOK], 0); end else MessageDlg('Fehler beim Setzen des primären MIDI-Ausgabegerätes', mtError, [mbOK], 0); end; ... Im Anhang hab ich noch nen kleines Beispielprogramm gepackt! Viel Spaß damit, Eichhoernchen |
Re: Primäre Soundkarte setzen
Liste der Anhänge anzeigen (Anzahl: 1)
Hier habe ich noch eine kleine Konsolenanwendung, die ebenfalls nocheinmal die Benutzung der funktionen zeigt sowie ein paar zusätzliche MMSystem funktionen
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:55 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 by Thomas Breitkreuz