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 4 von 10   « Erste     234 56     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 Sunlight7
Sunlight7

 
Delphi 5 Standard
 
#31
  Alt 16. Okt 2006, 22:37
Zitat von FlorianBernd:
Kann man den Sound auch direkt in einen Stream schreiben, welcher dann ständig aktualisiert wird? Ich will versuchen immer die neuen Teile des Streams an einen anderen Computer zu senden ...
Ist mir nix bekannt.

Zitat von FlorianBernd:
Oder kann ich einfach hintereinader mehrere wav Files aufnehmen, diese zum Server senden, welcher diese immer wieder zum Stream hinzufügt und den Stream kontinuierlich abspielt?
Nur sehr wackelig, und sicher nicht in Echtzeit.

Versuchs mal mit WaveIn oder DirectSoundCapture.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

 
Delphi 10.2 Tokyo Starter
 
#32
  Alt 16. Okt 2006, 22:50
Hast du einen Beispielcode, wie das mit dem WaveIn geht? Ich finde da leider nichts ...

Florian
  Mit Zitat antworten Zitat
Eichhoernchen

 
Turbo Delphi für Win32
 
#33
  Alt 16. Okt 2006, 22:54
Zitat von Florian Bernd:
Hast du einen Beispielcode, wie das mit dem WaveIn geht? Ich finde da leider nichts ...

Florian
Hab sowas für MidiIn... dürfte aber fast das gleiche sein.
Angehängte Dateien
Dateityp: pas midi_300.pas (4,3 KB, 66x aufgerufen)
Jan
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

 
Delphi 10.2 Tokyo Starter
 
#34
  Alt 16. Okt 2006, 23:07
Mhh geht leider nicht so einfach auf Wave zu portieren ... Zumindest bin ich zu blöde für ...
  Mit Zitat antworten Zitat
Eichhoernchen

 
Turbo Delphi für Win32
 
#35
  Alt 17. Okt 2006, 15:17
So, ich hab mal, da es mich auch interessiert ein Programm geschrieben, das Sound von der Primärensoundkarte aufnimmt und wieder dort abspielt, d.h. wenn du durch ein Micro redest, hörst du dich selbst, leicht verzögert.

Ich häng das ganze Projekt mal an, ich hoffe das hilft dir weiter!

Leider gibt es vor jedem abspielen ein kurzes knacken... frag mich nicht wo das herkommt, vielleicht hab ich nicht das Beste Aufnahmeformat gewählt.

Die Puffergröße musst du ggf. auch noch anpassen, wenn dir der Puffer zu klein ist.

Edit: Habs was vergessen zu entfernen, lösch einfach aus dem Projektquellcode den Verweis auf waveout.pas, dann sollte es laufen!
Angehängte Dateien
Dateityp: zip voice_429.zip (8,9 KB, 258x aufgerufen)
Jan
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

 
Delphi 5 Standard
 
#36
  Alt 17. Okt 2006, 17:19
Zitat von Florian Bernd:
Hast du einen Beispielcode, wie das mit dem WaveIn geht? Ich finde da leider nichts ...
Ja, hab ich, aber wird nicht mehr gebraucht?!
  Mit Zitat antworten Zitat
Tropby
 
#37
  Alt 6. Dez 2006, 16:19
Also hab mir das Programm mal angesehen und Probiert nachzuprogrammieren nur leider kommt bei mir nur ganz verstockt was wieder an hat vielleicht einer ne idee wie ich das hin bekomme das das nicht so stockt ??

Edit : Es ist eher ein Knacken. nur ich bekomm es nicht weg
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

 
Delphi 5 Standard
 
#38
  Alt 6. Dez 2006, 16:39
Hallo Tropby und herzlich Willkommen in der DP!

Hab mir den Code mal schnell angesehen, kein Wunder, das es knackt...
Es wird nur ein Buffer verwendet.
Wenn der voll ist, wird er verarbeitet, und während dieser Zeit kann nicht in diesen Aufgenommen werden.
Also ein 2. Buffer muß her, oder besser noch ein, zwei auf Reserve
Grüßle!

PS: Nutz die Foren Suche, ich hab das hier schon mal in nen anderen Thread geschrieben

Edit: Wenn die Buffergröße zu klein ist, kann es bei der Methode, WOM_DATA Nachrichten zu empfangen auch zum Knacken kommen, da Windows zu lahm für ist.
Edit2: Ne stimmt ja nicht, bei WaveIn sinds ja WIM_DATA Nachrichten
  Mit Zitat antworten Zitat
Tropby
 
#39
  Alt 6. Dez 2006, 16:45
Ich bin irgendwie zu blöd um das zu finden

wenn ich nach Wavein suche kommt nichts und wenn ich nach Wavein Knacken suche kommt auch nichts
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

 
Delphi 5 Standard
 
#40
  Alt 6. Dez 2006, 16:53
Also einen hab ich gefunden: Audiostream "Knackt"
Den anderen konnt' ich auch nicht finden
Die Bugs in der Suchfunktion machen das auch nicht leichter
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 10   « Erste     234 56     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 22:58 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