So erstellen Sie ein Aufnahmeprogramm mit Delphi
Chen Jingtao
Delphi ist ein hervorragendes visuelles Programmiertool von InPRise (ehemals Borland). Die integrierte Mediaplayer-Steuerung ist ein leistungsstarkes Tool für die Multimedia-Entwicklung. Sie können damit in nur wenigen Minuten ein Programm erstellen, das Multimediadateien wie Jieba abspielen kann. Aber nur wenige wissen vielleicht, dass man damit auch ein Aufnahmeprogramm erstellen kann.
Führen Sie Delphi aus und ziehen Sie ein Mediaplayer-Steuerelement auf der Systemseite in das Formular. Der Standardname ist Mediaplayer1. Da unser Programm eine eigene Schaltfläche verwendet, setzen Sie die Visible-Eigenschaft von Mediaplayer1 auf False und behalten Sie die Standardwerte für andere Eigenschaften bei. Platzieren Sie zwei weitere Knöpfe, Button1 und Button2. Der Attributname von Button1 wird in „BtStart“ geändert, die Beschriftung wird in „Aufzeichnung starten“ geändert, der Attributname von Button2 wird in „BtStop“ geändert, die Beschriftung wird in „Aufzeichnung stoppen“ geändert und das Attribut „Aktiviert“ wird in „Falsch“ geändert. Schalten Sie dann das Fenster auf das Codefenster um und beginnen Sie mit dem Schreiben von Code.
Im Programm definieren wir das Datei-Header-Format einer Wav-Datei. Bei der Aufnahme erstellen wir zunächst eine Wav-Datei nur mit dem Datei-Header und schreiben dann den von Mediaplayer1 aufgenommenen Ton in die Datei. Die Bedeutung mehrerer Parameter im CreateWav-Prozess ist wie folgt: Die ersten Kanäle stellen den Tonkanal dar, wenn 1 verwendet wird, stellt er Mono dar, und wenn 2 verwendet wird, stellt er Stereo dar. Für die Auflösung stehen außerdem nur zwei Werte zur Auswahl. Wenn 16 ausgewählt ist, steht die Tonfrequenz für 16 Bit. Je größer der Wert, desto klarer ist der Ton und desto größer ist natürlich auch die aufgenommene Datei. Der letzte Parameter stellt den entsprechenden Dateinamen dar. CreateWav kann also die folgende Form haben:
CreateWav(1,8,11025,'C:/abc.wav');//Erstellen Sie eine 8-Bit-Mono-WAV-Datei mit dem Namen abc.wav mit einer Häufigkeit von 11025 im Stammverzeichnis von Laufwerk C
CreateWav(2,16,44100,'C:/abc.wav');//Erstellen Sie eine Wav-Datei mit dem Namen abc.wav und einer 16-Bit-Stereokanalfrequenz von 44100 im Stammverzeichnis von Laufwerk C
Netbus, eine bekannte in Delphi geschriebene ausländische Fernbedienungssoftware, verfügt über eine Tonüberwachungsfunktion, die mit der Methode dieses Artikels geschrieben wurde. Es zeichnet zunächst die Stimme des anderen Teilnehmers auf und überträgt sie dann zurück, um den Zweck der Überwachung des anderen Teilnehmers zu erreichen. Voraussetzung ist natürlich, dass die andere Partei ein Mikrofon installiert haben muss, andernfalls wird der von der anderen Partei wiedergegebene Ton überwacht (öffnen Sie beispielsweise Jieba oder Readplay und führen Sie dieses Programm aus, um den wiedergegebenen Ton aufzunehmen).
Tatsächlich hat sich die aktuelle Netzwerk-Tonübertragungstechnologie bis zu einem gewissen Grad entwickelt, und auch Sprach-Gegensprechanlagen und IP-Telefone haben begonnen, ausgereift zu sein. Sie verwenden jedoch das VOX-Format oder das ACM-Format. Die spezifischen Codes können von meiner Homepage http://Lovejingtao.126.com heruntergeladen werden. Aber wenn Sie mit den VOX- oder ACM-Formaten nicht vertraut sind, können Sie die Methode in diesem Artikel auch verwenden, um Ihren eigenen „Recorder“ zu erstellen. Bezüglich des Aufrufs der mit dem System gelieferten avifil32.dll für die Online-Videowiedergabe werde ich bei Gelegenheit mit Ihnen kommunizieren.
Dieses Programm wurde unter Pwin98+Delphi5 ausgeführt.
Einheit Einheit1;
Schnittstelle
verwendet
Windows, Nachrichten, SysUtils, Klassen, Grafiken, Steuerelemente, Formulare, Dialoge,
StdCtrls, MPlayer;
Typ
TWavHeader = record //Definieren Sie ein WAV-Datei-Header-Format
rId: longint;
rLen: longint;
wId: longint;
fId: longint;
fLen: lange Ganzzahl;
wFormatTag : Word;
nChannels: Wort;
nSamplesPerSec : longint;
nAvgBytesPerSec : longint;
nBlockAlign: Wort;
wBitsPerSample: Wort;
dId: longint;
wSampleLength : longint;
Ende;
TForm1 = Klasse(TForm)
MediaPlayer1: TMediaPlayer;
BtStart: TButton;
BtStop: TButton;
procedure CreateWav(channels: Word; Resolution: Word; Rate: Longint; Fn: String); // Passen Sie den Prozess zum Schreiben eines WAV-Datei-Headers an
procedure BtStartClick(Sender: TObject);
procedure BtStopClick(Sender: TObject);
Privat
{Private Erklärungen}
öffentlich
{Öffentliche Erklärungen}
Ende;
var
Form1: TForm1;
Durchführung
{$R *.DFM}
Prozedur TForm1.CreateWav( Kanäle : Wort; { 1 (Mono) oder 2 (Stereo) }
Auflösung: Wort; { 8 oder 16, repräsentiert 8-Bit- oder 16-Bit-Ton}
rate: longint; {Tonfrequenz, z. B. 11025, 22050, 44100}
fn: string {entsprechender Dateiname});
var
wf: Datei von TWavHeader;
wh: TWavHeader;
beginnen
wh.rId := $46464952;
wh.rLen := 36;
wh.wId := $45564157;
wh.fId := $20746d66;
wh.fLen := 16;
wh.wFormatTag := 1;
wh.nChannels := Kanäle;
wh.nSamplesPerSec := rate;
wh.nAvgBytesPerSec := Kanäle*Rate*(Auflösung Div 8);
wh.nBlockAlign := Kanäle*(Auflösung div 8);
wh.wBitsPerSample := Auflösung;
wh.dId := $61746164;
wh.wSampleLength := 0;
Assignfile(wf,fn); {öffne die entsprechende Datei}
rewrite(wf); {Bewegen Sie den Zeiger an den Anfang der Datei}
write(wf,wh); {in den Dateiheader schreiben}
closefile(wf); {Datei schließen}
Ende;
procedure TForm1.BtStartClick(Sender: TObject);
beginnen
versuchen
//Erstelle eine WAV-Datei Temp.wav im aktuellen Verzeichnis des Programms
CreateWav(1, 8, 11025, (ExtractFilePath(application.ExeName)+ 'Temp.wav'));
MediaPlayer1.DeviceType := dtAutoSelect;
MediaPlayer1.FileName := (ExtractFilePath(Application.ExeName)+ 'Temp.wav');
MediaPlayer1.Open;
MediaPlayer1.StartRecording;
BtStart.Enabled:=false;
BtStop.Enabled:=true;
außer
BtStart.Enabled:=True;
BtStop.Enabled:=false;
Application.MessageBox('Initialisierung des Mediengeräts fehlgeschlagen!','Error',MB_ICONERROR+MB_OK);
Ende;
Ende;
procedure TForm1.BtStopClick(Sender: TObject);
beginnen
versuchen
MediaPlayer1.Stop;
MediaPlayer1.Save;
MediaPlayer1.Close;
Application.MessageBox('Sprachaufzeichnung abgeschlossen!','Message',MB_ICONINFORMATION+MB_OK);
BtStart.Enabled:=True;
BtStop.Enabled:=false;
außer
Application.MessageBox('Fehler beim Speichern der Sounddatei!','Error',MB_ICONERROR+MB_OK);
BtStart.Enabled:=True;
BtStop.Enabled:=false;
Ende;
Ende;
Ende.
Ergänzung: 1. Beim Abspielen der aufgenommenen Datei müssen Sie möglicherweise den Wav-Wert des Audioattributs erhöhen.
2. Wenn andere Audiotreiber auf dem System installiert sind, kann die Größe der aufgezeichneten WAV-Datei Null sein, aber gleichzeitig wird eine Datei mit der Endung TMP generiert. Durch Ändern der Erweiterung in WAV wird die aufgezeichnete Audiodatei angezeigt. Aber das kommt selten vor. (Die Chance ist fast Null^-^)
3. Dieses Programm kann die Tonaufnahme weiterleiten, während Jieba und Replayer ausgeführt werden.