Einzelnen Beitrag anzeigen

hadschi92

Registriert seit: 25. Okt 2006
83 Beiträge
 
Delphi XE3 Professional
 
#1

Mikrofon Lautstärke für Wave-Aufnahme setzen

  Alt 20. Mär 2011, 16:32
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?

Geändert von hadschi92 (20. Mär 2011 um 16:37 Uhr)
  Mit Zitat antworten Zitat