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:
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;
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".
Folgenden Code habe ich auch schon ausprobiert:
http://swissdelphicenter.ch/de/showcode.php?id=1204. Doch nach Get Line Info wird bei mir an dieser Stelle:
intRet := mixerGetLineInfo(hMix, @mxl, MIXER_GETLINEINFOF_COMPONENTTYPE);
intRet = 1024, sodass der restliche Code übersprungen wird. Im Code steht
if intRet = MMSYSERR_NOERROR then
, heißt hier tritt irgendein Fehler auf.
Vielleicht ist der Code unter Windows 7 nicht mehr funktionell.
BTW: Mit diesen Funktionen nehme ich vom Mikrofon auf, funktioniert auch super:
Delphi-Quellcode:
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);
Kann mir hier einer weiterhelfen?