Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Mikrofon Lautstärke für Wave-Aufnahme setzen (https://www.delphipraxis.net/159256-mikrofon-lautstaerke-fuer-wave-aufnahme-setzen.html)

hadschi92 20. Mär 2011 16:32


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:
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:
Delphi-Quellcode:
intRet := mixerGetLineInfo(hMix, @mxl, MIXER_GETLINEINFOF_COMPONENTTYPE);
intRet = 1024, sodass der restliche Code übersprungen wird. Im Code steht
Delphi-Quellcode:
 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?

samso 20. Mär 2011 17:41

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.

hadschi92 26. Mai 2011 19:30

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 NewAC gefunden. Das ganze darf kommerziell verwendet werden, man hat viele Möglichkeiten, mehr als die Windows API einem bieten kann und zu guter letzt kann ich dort auch komfortabel das Eingabegerät einstellen.

Den Quellcode zum Input wählen kann man aus den mitgelieferten Demos herausbekommen, einfach mal in "demos\Recorders-rippers\DirectSoundRecorder" schauen.

nuclearping 26. Mai 2011 20:00

AW: Mikrofon Lautstärke für Wave-Aufnahme setzen
 
BASS wäre auch noch eine Möglichkeit gewesen.

hadschi92 26. Mai 2011 20:29

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.

Satty67 26. Mai 2011 20:55

AW: Mikrofon Lautstärke für Wave-Aufnahme setzen
 
Zitat:

Zitat von hadschi92 (Beitrag 1103163)
NewAC

Scheint eine recht ordentliche Komponentensammlung zu sein. Werd' ich mir mal genauer anschauen.

[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 07:38 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz