![]() |
Mikrofon Lautstärke für Wave-Aufnahme setzen
Ich programmiere gerade etwas um vom Mikrofon aufzunehmen. Gleich im Voraus, die bass.dll kann ich nicht nehmen, da das Programm eventuell kommerziell wird. Jetzt geht es darum, die Aufnahmelautstärke des Mikrofons zu verändern. Für die Ausgabe kann ich die Lautstärke schon ändern und zwar folgendermaßen:
Delphi-Quellcode:
Das funktioniert auch hervorragend, wie mache ich das ganze jedoch beim Mikrofon? In der mmSystem-Unit gibt es zwar die Funktion "WaveOutSetVolume", aber kein "WaveInSetVolume".
function SetWaveVolume(const AVolume: DWORD): Boolean;
var WaveOutCaps: TWAVEOUTCAPS; begin Result := False; if WaveOutGetDevCaps(WAVE_MAPPER, @WaveOutCaps, SizeOf(WaveOutCaps)) = MMSYSERR_NOERROR then if WaveOutCaps.dwSupport and WAVECAPS_VOLUME = WAVECAPS_VOLUME then Result := WaveOutSetVolume(WAVE_MAPPER, AVolume) = MMSYSERR_NOERROR; end; procedure TForm1.Button6Click(Sender: TObject); var LVol: Word; RVol: Word; begin LVol := 30000; // max. is 65535 RVol := 30000; // max. is 65535 SetWaveVolume(MakeLong(LVol, RVol)); end; Folgenden Code habe ich auch schon ausprobiert: ![]()
Delphi-Quellcode:
intRet = 1024, sodass der restliche Code übersprungen wird. Im Code steht
intRet := mixerGetLineInfo(hMix, @mxl, MIXER_GETLINEINFOF_COMPONENTTYPE);
Delphi-Quellcode:
, heißt hier tritt irgendein Fehler auf.
if intRet = MMSYSERR_NOERROR then
Vielleicht ist der Code unter Windows 7 nicht mehr funktionell. BTW: Mit diesen Funktionen nehme ich vom Mikrofon auf, funktioniert auch super:
Delphi-Quellcode:
Kann mir hier einer weiterhelfen?
mciSendString('OPEN NEW TYPE WAVEAUDIO ALIAS mySound',nil,0,Handle);
mciSendString('SET mySound ' + 'TIME FORMAT MS ' + 'BITSPERSAMPLE 16 ' + 'CHANNELS 2 ' + 'SAMPLESPERSEC 44100 ' + 'BYTESPERSEC 176400 ' + 'ALIGNMENT 4', nil,0,handle); mciSendString('RECORD mySound',nil,0,Handle); |
AW: Mikrofon Lautstärke für Wave-Aufnahme setzen
Liste der Anhänge anzeigen (Anzahl: 1)
Ja unter Windows 7 spielt das so nicht mehr. Da es bei mir schon eine Weile her ist, kann ich mich nicht mehr an alle Details erinnern. Letztendlich hängt es damit zusammen, das das Mikrofon unter Windows 7 als 0815-WaveIn-Device eingetütet wird und deshalb die Suche nach einem Mikrofon-Device nicht mehr funktioniert. Ich ein kleines Demoprogramm beigelegt mit dem man die Devices und die Typen dazu ansehen kann. Daran kann man dann sehr schön die Unterschiede bei XP und Windows 7 sehen.
|
AW: Mikrofon Lautstärke für Wave-Aufnahme setzen
So, dann will ich auch mal eine Lösung posten.
Mit den Windows APIs habe ich es nicht geschafft die Lautstärken und Input so anzusteuern wie ich es wollte. Dann bisschen im Internet gesucht und ![]() Den Quellcode zum Input wählen kann man aus den mitgelieferten Demos herausbekommen, einfach mal in "demos\Recorders-rippers\DirectSoundRecorder" schauen. |
AW: Mikrofon Lautstärke für Wave-Aufnahme setzen
BASS wäre auch noch eine Möglichkeit gewesen.
|
AW: Mikrofon Lautstärke für Wave-Aufnahme setzen
Du hast Recht, wenn man jedoch ein Programm mit BASS-Komponenten kommerziell vertreibt muss man leider Lizenzgebühren zahlen. NewAC darf auch kostenlos in kommerziellen Projekten verwendet werden.
|
AW: Mikrofon Lautstärke für Wave-Aufnahme setzen
Zitat:
[OT] Auch wenn der Code im Ergebnis scheinbar hochwertig ist (DirectSound fordert auch schon ziemliches Wissen), erinnert mich der Source an meine Anfangszeit. Riesige Procedure-Würste und daraus resultierend eine platzsparende Formatierung der Code-Blöcke und if-then Anweisungen ;) Soll die Arbeit aber nicht schmälern, ist mir beim Blick in die Sourcen nur direkt ins Auge gesprungen. [/OT] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:02 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