AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Mikrofon Lautstärke für Wave-Aufnahme setzen
Thema durchsuchen
Ansicht
Themen-Optionen

Mikrofon Lautstärke für Wave-Aufnahme setzen

Ein Thema von hadschi92 · begonnen am 20. Mär 2011 · letzter Beitrag vom 26. Mai 2011
Antwort Antwort
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
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#2

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

  Alt 20. Mär 2011, 17:41
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.
Angehängte Dateien
Dateityp: zip EnumDevices.zip (1,8 KB, 68x aufgerufen)
  Mit Zitat antworten Zitat
hadschi92

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

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

  Alt 26. Mai 2011, 19:30
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.
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

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

  Alt 26. Mai 2011, 20:00
BASS wäre auch noch eine Möglichkeit gewesen.
  Mit Zitat antworten Zitat
hadschi92

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

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

  Alt 26. Mai 2011, 20:29
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.
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#6

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

  Alt 26. Mai 2011, 20:55
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]
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:53 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