AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Delphi Sound aufnehmen
Tutorial durchsuchen
Ansicht
Themen-Optionen

Sound aufnehmen

Ein Tutorial von overmoon · begonnen am 21. Aug 2003 · letzter Beitrag vom 17. Jan 2016
Antwort Antwort
Seite 8 von 10   « Erste     678 910      
Benutzerbild von overmoon
overmoon
Registriert seit: 8. Aug 2003
Sound aufnehmen

Auf den Vorschlag von Matze habe ich aus zwei meiner Beiträge ein Tutorial zusammengebastelt. Vielleicht kann es irgendjemand irgendwann irgendwozu brauchen.

Also Dinge aufnehmen geht mit Delphi und der Unit mmSystem richtig einfach.

Der Schlüssel ist die Prozedur "mciSendString". Über diese Prozedur kann man die Komplette Aufnahme des Wave-Files machen.

1.) Wir müssen ein Audiogerät öffnen. Ich nenne es einfach mal "mySound".

mciSendString('OPEN NEW TYPE WAVEAUDIO ALIAS mySound',nil,0,Handle);
2.) Nun müssen wir die Optionen für die Audioaufnahme einstellen. Da für gibt es einige Einstellungen:

- BitsPerSample (Wie genau wird ein analoger Wert abgetastet; meist 8 oder 16)

- Channels (Mono(1) oder Stereo (2))

- SamplesPerSec (Abtastungen pro Sekunde; 800,11025,22050,44100)

Damit wäre eigentlich alles angegeben, was man braucht. Damit es funktioniert, müssen noch zwei weitere Dinge angegeben werden. Lässt man diese weg, gibt es Probleme.

- BytesPerSec (= (BitsPerSample div 8)*Channels*SamplesPerSec )

- Alignment (= Channels*(BitsPerSample div 8) )

Die Prozedur zum Einstellen der Einstellungen sieht dann folgendermaßen aus:

Delphi-Quellcode:
mciSendString('SET mySound ' +
                   'TIME FORMAT MS ' +
                   'BITSPERSAMPLE 16 ' +
                   'CHANNELS 2 ' +
                   'SAMPLESPERSEC 44100 ' +
                   'BYTESPERSEC 176400 ' +
                   'ALIGNMENT 4',
                   nil,0,handle);
3.) Das Starten der Aufnahme:

Das folgende erklärt sich eigentlich von selbst:

mciSendString('RECORD mySound',nil,0,Handle);
4.) Genauso einfach ist das Stoppen der Aufnahme:

mciSendString('STOP mySound',nil,0,Handle);
5.) Nach erfolgter Aufnahme wollen wir die Datei natürlich nicht im Nirvana des OS verschwinden lassen... wir müssen sie speichern.

Das geht folgendermaßen:

mciSendString('SAVE mySound "c:\datei.wav"',nil,0,Handle);

6.) Schließlich muss man noch das Audiogerät "mySound", welches man am Anfang geöffnet hatte, schließen.

mciSendString('CLOSE mySound',nil,0,Handle);
Und wir sind fertig mit der Aufnahme.

7.) Weitere Aufgaben, die man über "mciSendString" machen kann sind z.B. noch: PLAY, WAIT und LOAD


8.) Die Aufnahmen werden nur leider recht groß, deshalb macht sich eine Konvertierung zu Mp3 recht gut.

Dazu bietet sich der lame - Encoder an.

Den bekommst du hier:
http://lame.sourceforge.net/

Dort bekommst du die lame_enc.dll und die lame.exe .
Kannst du eigentlich nehmen, was du willst, konvertieren beide brav waves nach Mp3.

Die lame.exe musst du z.B. einfach mit entsprechenden Parametern aufrufen.


Zur Lizenz vom Lame_Ecoder:

Zitat:
Can I use LAME in my commercial program?

Yes, you can, under the restrictions of the LGPL. The easiest
way to do this is to:

1. Link to LAME as separate library (libmp3lame.a on unix or
lame_enc.dll on windows)

2. Fully acknowledge that you are using LAME, and give a link
to our web site, www.mp3dev.org

3. If you make modifications to LAME, you *must* release these
these modifications back to the LAME project, under the LGPL.

overmoon
"Habe Mut, dich deines eigenen Verstandes zu bedienen." (Immanuel Kant)
 
I love Delphi
 
#71
  Alt 24. Jun 2008, 20:44
Bin mal wieder erstaunt wie einfach manche Sachen in Delphi funktionieren.

Kann man den Ton auch direkt von der Soundkarte abgreifen, so dass das aufgenommen wird, was gerade läuft?
Und wie ging das mit der Wait-Funktion die im Tutorial genannt wurde???

MfG Florian

[Ich habe schon bemerkt, dass dieser Thread uralt ist]
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

 
Delphi 5 Standard
 
#72
  Alt 24. Jun 2008, 22:08
Hallo, I love Delphi
und herzlich willkommen in der


Zitat von I love Delphi:
Kann man den Ton auch direkt von der Soundkarte abgreifen, so dass das aufgenommen wird, was gerade läuft?
Jein, es kommt auf Deine Soundkarte an, was die alles kann, bzw ...
Zitat von Sunlight7:
Das was aus dem Lautsprecher kommt kann eine Wave oder MIDI Wiedergabe sein, Vom Line-In, CD, DAT, ... Was halt Deine Soundkarte so kann.
Starte einfach mal den Windows Mixer (sndvol32.exe /r) und schaue, was Du alles aufnehmen kannst.



Zitat von I love Delphi:
Und wie ging das mit der Wait-Funktion die im Tutorial genannt wurde???
Ich mag jetzt grad nicht den ganzen Thread nochmals durchlesen, zitiere bitte den Beitrag oder verlinke dorthin, was Du meinst
Dies solltest Du generell tuen, dann kann man Dir leichter helfen, wenn man weiß, was Du genau meinst

Mfg Sun
  Mit Zitat antworten Zitat
I love Delphi
 
#73
  Alt 25. Jun 2008, 09:46
sndvol32.exe gibt es unter Vista anscheinend nicht mehr. Auch der interne Audiorecorder von Vista ist für den A... . Optionen bietet der nämlich auch keine mehr an. Wo kann ich denn dan rausfinden was meine Soundkarte alles kann?

Im ersten Beitrag dieses Threads ging es ja hauptsächlich ums aufnehmen. Es wurde aber auch erwähnt, dass man Sound abspielen kann und, so nehme ich an, mit WAIT pausieren kann. Das mit dem Abspielen ist kein Problem, WAIT will nicht so wie ich will.

Danke,
I Love Delphi
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

 
Delphi 5 Standard
 
#74
  Alt 25. Jun 2008, 17:15
Ich rate mal, in Vista heißt das dann sndvol.exe, egal, schau Dich einfach mal durchs Startmenü nach einer Lautstärkeregelung.
Oder Du guckst ob sich ein kleiner Lautprecher auf Deiner Taskliste befindet (Doppelklicken)

Der Befehl WAIT in MCI bedeutet nicht, das eine Pause gemacht werden soll, sondern, das die Steuerung erst an Dein Programm zurück gegeben wird, sobald der MCI Befehl ausgeführt wurde.
D.h. wenn Du etwas abspielst mit MCI und WAIT angibst reagiert Dein Programm solange nicht mehr, bis das abspielen fertig ist.
  Mit Zitat antworten Zitat
I love Delphi
 
#75
  Alt 25. Jun 2008, 17:27
Wie ich die Lautstärkeregelung finde, war mir klar. Ich dachte jedoch, dass du etwas anderes meinst, dass dieser LAutstärkeregelung echt nichts zu entnehmen ist. Habe mal einen Screenshot angehängt.

Da mit Wait ist mir peinlich...

MfG,
I love Delphi
Miniaturansicht angehängter Grafiken
laust_rkeregelung_vista_213.png  
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

 
Delphi 5 Standard
 
#76
  Alt 26. Jun 2008, 03:38
Wie das mit dem Windows Lautstärkeregelung funktioniert, schaust Du am Besten in der Windows Hilfe nach.
  Mit Zitat antworten Zitat
Jeff93

 
Turbo Delphi für Win32
 
#77
  Alt 14. Okt 2008, 17:13
Habe eine kurze Frage wenn man die Audio-Ausgabe mit
mciSendString('RECORD mySound',nil,0,Handle); aufgezeichnet hat und dann gestoppt hat, wie kann man nun das Aufgezeichnete löschen ohne
mciSendString('CLOSE mySound',nil,,FHandle); zu benutzen?
  Mit Zitat antworten Zitat
dutyfree
 
#78
  Alt 9. Mär 2009, 17:34
Hallo,
mal ne kurze Frage, wie kann ich denn zwischen Mikrofon und Stereo Mix wechseln?
Wenn ich jetzt aufnehme nimmt er halt mein Mikro auf, wie wechsel ich zum Stereo mix (Also, dass er das aufnimmt, was aus der Soundkarte rauskommt)
Thx

Edit:

Noch eine Frage:

Ich hab halt diesen Code:

mciSendString('SAVE mySound "c:\one.wav"',nil,0,Handle); Und eine Variable wo ein Pfad drin ist, wie kann ich die Datei jetzt in den Pfad speichern?

mciSendString('SAVE mySound pfad+"one.wav"',nil,0,Handle); Habe ich schon versucht, geht nicht.
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

 
Delphi 5 Standard
 
#79
  Alt 10. Mär 2009, 00:20
mciSendString(PChar('SAVE mySound '+pfad+'"\one.wav"'), nil, 0, Handle);
  Mit Zitat antworten Zitat
DevStar
 
#80
  Alt 26. Mai 2009, 23:58
Habe den Beispiel-Code mal getestet. Funktioniert auch.

Allerdings gibt es keine Änderung der wav-Datei, wenn ich hier die Werte ändere:

Delphi-Quellcode:
procedure TForm2.FormCreate(Sender: TObject);
var
  Format: tWAVEFORMATEX;
begin
  with Format do
  begin
    wFormatTag := WAVE_FORMAT_PCM;
    nChannels := 1;
     wBitsPerSample := 8;
     nSamplesPerSec := 44100;
      nBlockAlign := nChannels * (wBitsPerSample div 8);
     nAvgBytesPerSec := nSamplesPerSec * nBlockAlign;
    cbSize := 0;
  end;
 wave := TWaveIn.Create;
 wave.OnData := OnData;
 wave.open(0);
 waveOutOpen(@fHandle, 0, @format, 0, 0, CALLBACK_NULL);
end;
Ich brauch das vox-Format ADPCM.

Weiß jemand wieso?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 8 von 10   « Erste     678 910      


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 23:48 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