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 9 von 10   « Erste     789 10      
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
 
#81
  Alt 27. Mai 2009, 06:58
Zitat von DevStar:
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?
Wo hast Du hier ne Änderung? Du hast auf PCM, 8 Bit, 44.1 KHz, Mono eingestellt
  Mit Zitat antworten Zitat
DevStar
 
#82
  Alt 31. Mai 2009, 00:46
Zitat von Sunlight7:
Wo hast Du hier ne Änderung? Du hast auf PCM, 8 Bit, 44.1 KHz, Mono eingestellt
Nirgends, es ist immer Stereo, 16bit, 44000 khz. Das meinte ich.

Egal wie ich die Werte ändere.
  Mit Zitat antworten Zitat
AlexII

 
FreePascal / Lazarus
 
#83
  Alt 31. Mai 2009, 10:47
overmoon schreib doch dein Tut zu ende, nämlich das mit der Konvertierung der .wav nach .mp3
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

 
Delphi 2009 Professional
 
#84
  Alt 31. Mai 2009, 10:52
Zitat von AlexII:
overmoon schreib doch dein Tut zu ende, nämlich das mit der Konvertierung der .wav nach .mp3
Einfach die Wave-Datei an die lame_enc.exe übergeben (oder die DLL nutzen), die konvertiert das ganze dann.
Manuel
  Mit Zitat antworten Zitat
AlexII

 
FreePascal / Lazarus
 
#85
  Alt 31. Mai 2009, 10:54
Ja wenn das einfach ist, dann braucht man auch dieses Tut nicht, ist ja auch einfach
  Mit Zitat antworten Zitat
Benutzerbild von Jakob Ullmann
Jakob Ullmann

 
Lazarus
 
#86
  Alt 31. Mai 2009, 14:42
Zitat von AlexII:
Ja wenn das einfach ist, dann braucht man auch dieses Tut nicht, ist ja auch einfach
Was ist denn daran bitte so schwer? -> ShellAPI.ShellExecute()
Jakob
  Mit Zitat antworten Zitat
DevStar
 
#87
  Alt 1. Jun 2009, 23:31
Und wie kann ich eine WAV-Datei in eine VOX ADPCM konvertieren?
  Mit Zitat antworten Zitat
DevStar
 
#88
  Alt 4. Jun 2009, 10:01
Zitat von DevStar:
Und wie kann ich eine WAV-Datei in eine VOX ADPCM konvertieren?
Anscheinend gibt es hier wohl keine Lösung in DELPHI.

Aber möglich muss es doh sein. Verwndet niemand von euch diese Vox-Dateien oder sind die zu spezifisch, dass die nur in Dialogic-Systemen verwendung finden?

Ich wäre sehr dankbar, wenn jemand einen Tipp hätte.
  Mit Zitat antworten Zitat
ReneHSZ
 
#89
  Alt 16. Jan 2016, 16:35
Wie kann man die Frequenzen der Aufnahme herausbekommen???

LG Rene
  Mit Zitat antworten Zitat
Medium

 
Delphi 2007 Enterprise
 
#90
  Alt 17. Jan 2016, 04:12
Bei Google suchenFourier Transformation
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 9 von 10   « Erste     789 10      


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 12:01 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