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 1 von 10  1 23     Letzte »    
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)
 
Benutzerbild von overmoon
overmoon

 
Delphi 6 Personal
 
#2
  Alt 21. Aug 2003, 21:31
9.) Und zum Abschluss nun den ganzen Code in einem Stück:

Delphi-Quellcode:
//==============================================================================

// OnClick-Event des Buttons zum Starten der Aufnahme
procedure TFormMain.ButtonAufnahmeStartenClick(Sender: TObject);
begin
     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);
end;

//==============================================================================

// OnClick-Event des Buttons zum Beenden und Speichern der Aufnahme.
procedure TFormMain.ButtonAufnahmeAnhaltenClick(Sender: TObject);
begin
     mciSendString('STOP mySound',nil,0,Handle);
     mciSendString('SAVE mySound "c:\datei.wav"',nil,0,Handle);
     mciSendString('CLOSE mySound',nil,0,Handle);
end;

//==============================================================================
Wie man sieht, ist das Aufnehmen eigentlich super-einfach.

10.) Anmerkung (aus eigener Erfahrung)

- Man sollte verhindern, dass der Benutzer das Programm beenden kann, während die Aufnahme läuft.

- Die Umwandlung nach Mp3 sollte man in extra-Threads auslagern, damit gleich wieder mit der Aufnahme begonnen werden kann und nicht erst auf die MP3 gewartet werden muss. (Und auch hier gilt: Das Programm sollte nicht beendet werden solange der Thread noch läuft; aber das eklärt sich ja von selbst.)

11.) Bye
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin
 
#3
  Alt 15. Jul 2004, 16:49
hi,
ich bekomm das gnze zwar ohne fehler zum laufen, allerdings herrsch in der erstellten wav datei nur eisernes schweigen. ich habe versucht, ein abgespieltes winamp lied aufzunehmen. in der systemsteuerung habe ich die lautstärke bei der aufnahme auch schon hochgeschruabt, aber es tut sich nix. woran könnte das liegen?

*MFG*
Leo S.
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

 
FreePascal / Lazarus
 
#4
  Alt 15. Jul 2004, 17:35
Klick mal mit der rechten Maustaste auf das Lautsprecher-Symbol in der TNA und geh dann auf "Lautstärkeregelung öffnen".
Dann gehst du im aufpoppenden Fenster auf "Optionen|Eigenschaften". Daraufhin wählst du den RadioBuitton "Aufnahme" und drückst OK. Zurück im Hauptfenster kannst du mit Hilfe der CheckBoxen die Aufnahmequelle auswählen. Dann machst du das Fenster mit dem "X" zu und bist glücklich!
Julian J. Pracht
  Mit Zitat antworten Zitat
Benutzerbild von atreju2oo0
atreju2oo0

 
Delphi 6 Enterprise
 
#5
  Alt 15. Jul 2004, 17:36
Ich würde schätzen Du nimmst von der falschen Quelle auf.
Ich denke der Code ist für Line-In ( also Mikro)...
Dann würde es also an der ersten Zeile liegen:

mciSendString('OPEN NEW TYPE WAVEAUDIO ALIAS mySound',nil,0,Handle); Statt WAVEAUDIO muss was anderes hin...
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin
 
#6
  Alt 15. Jul 2004, 20:29
Zitat von Ultimator:
Klick mal mit der rechten Maustaste auf das Lautsprecher-Symbol in der TNA und geh dann auf "Lautstärkeregelung öffnen".
Dann gehst du im aufpoppenden Fenster auf "Optionen|Eigenschaften". Daraufhin wählst du den RadioBuitton "Aufnahme" und drückst OK. Zurück im Hauptfenster kannst du mit Hilfe der CheckBoxen die Aufnahmequelle auswählen. Dann machst du das Fenster mit dem "X" zu und bist glücklich!
wie schon gesagt, ide habe ich schon alle ganz hoch gedreht. es tut sich aber nix. aber was statt wavaaudio sollte da hin und vor allem warum sollte waveaudio nicht stimmen??
Leo S.
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin
 
#7
  Alt 16. Jul 2004, 16:42
^^ ^^
Leo S.
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

 
FreePascal / Lazarus
 
#8
  Alt 16. Jul 2004, 17:42
Zitat:
Ich denke der Code ist für Line-In ( also Mikro)...
Das muss ich dich korrigieren, denn man hat doch separate Eingänge für Line-In und Mikrofon.
Julian J. Pracht
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin
 
#9
  Alt 17. Jul 2004, 20:04
^^ seufz ^^
Leo S.
  Mit Zitat antworten Zitat
Kernel32.DLL
 
#10
  Alt 17. Jul 2004, 20:11
Zitat von Meflin:
Zitat von Ultimator:
Klick mal mit der rechten Maustaste auf das Lautsprecher-Symbol in der TNA und geh dann auf "Lautstärkeregelung öffnen".
Dann gehst du im aufpoppenden Fenster auf "Optionen|Eigenschaften". Daraufhin wählst du den RadioBuitton "Aufnahme" und drückst OK. Zurück im Hauptfenster kannst du mit Hilfe der CheckBoxen die Aufnahmequelle auswählen. Dann machst du das Fenster mit dem "X" zu und bist glücklich!
wie schon gesagt, ide habe ich schon alle ganz hoch gedreht. es tut sich aber nix. aber was statt wavaaudio sollte da hin und vor allem warum sollte waveaudio nicht stimmen??
Ich denke mal, was er meinte war, dass du die richtige Aufnahmequelle, in diesem Fall anscheinend den Line-In Eingang deiner Soundkarte, auswähltst. Wenn nämlich vor "Auswählen..." kein Häckchen ist, kannste die Lautstärkeregler so hoch schrauben wie du willst...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 10  1 23     Letzte »    


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 13:35 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