Comment créer un programme d'enregistrement à l'aide de Delphi
Chen Jingtao
Delphi est un excellent outil de programmation visuelle d'InPRise (anciennement Borland). Son contrôle Mediaplayer intégré est un outil puissant pour développer du multimédia. Vous pouvez l'utiliser en quelques minutes seulement pour créer un programme capable de lire des fichiers multimédia comme Jieba. Mais peu de gens savent peut-être que vous pouvez également l’utiliser pour créer un programme d’enregistrement.
Exécutez Delphi et faites glisser un contrôle Mediaplayer sur la page Système vers le formulaire. Le nom par défaut est Mediaplayer1. Puisque notre programme utilise son propre bouton, définissez la propriété Visible de Mediaplayer1 sur False et conservez les autres propriétés à leurs valeurs par défaut. Placez deux autres boutons, Button1 et Button2. Le nom de l'attribut Button1 est remplacé par BtStart, la légende est remplacée par "Démarrer l'enregistrement", le nom de l'attribut Button2 est remplacé par BtStop, la légende est modifiée par "Arrêter l'enregistrement" et l'attribut Enabled est modifié par False. Basculez ensuite la fenêtre vers la fenêtre de code et commencez à écrire du code.
Dans le programme, nous définissons le format d'en-tête d'un fichier Wav. Lors de l'enregistrement, nous créons d'abord un fichier Wav avec uniquement l'en-tête du fichier, puis écrivons le son enregistré par Mediaplayer1 dans le fichier. La signification de plusieurs paramètres dans le processus CreateWav est la suivante : les premiers canaux représentent le canal sonore, lorsque 1 est pris, il représente le mono, et lorsque 2 est pris, il représente la stéréo. La résolution n'a également que deux valeurs parmi lesquelles choisir. Lorsque 8 est sélectionné, il représente un son 8 bits. Lorsque 16 est sélectionné, il représente un son 16 bits. Le taux représente la fréquence sonore, par exemple 11025, 22050, 44100. Plus la valeur est élevée, plus le son est clair et, bien sûr, plus le fichier enregistré est volumineux. Le dernier paramètre représente le nom du fichier correspondant. Ainsi CreateWav peut avoir la forme suivante :
CreateWav(1,8,11025,'C:/abc.wav');//Créer un fichier Wav mono 8 bits nommé abc.wav avec une fréquence de 11025 dans le répertoire racine du lecteur C
CreateWav(2,16,44100,'C:/abc.wav');//Créez un fichier Wav nommé abc.wav avec une fréquence de canal stéréo 16 bits de 44100 dans le répertoire racine du lecteur C
Netbus, un logiciel de contrôle à distance étranger bien connu écrit en Delphi, dispose d'une fonction de surveillance sonore, qui est écrite en utilisant la méthode de cet article. Il enregistre d'abord la voix de l'autre partie, puis la retransmet pour atteindre l'objectif de surveillance de l'autre partie. Bien sûr, le principe est que l'autre partie doit avoir un microphone installé, sinon le son joué par l'autre partie sera surveillé (par exemple, ouvrez Jieba ou Readplay et exécutez ce programme pour enregistrer le son joué).
En fait, la technologie actuelle de transmission du son sur réseau s'est développée jusqu'à un certain stade, et les interphones vocaux et les téléphones IP ont également commencé à mûrir. Cependant, ils utilisent le format VOX ou le format ACM. Les codes spécifiques peuvent être téléchargés depuis ma page d'accueil http://Lovejingtao.126.com. Mais si vous n'êtes pas familier avec les formats VOX ou ACM, vous pouvez également utiliser la méthode présentée dans cet article pour créer votre propre « enregistreur ». Quant à savoir comment appeler le fichier avifil32.dll fourni avec le système de lecture vidéo en ligne, je communiquerai avec vous lorsque j'en aurai l'occasion.
Ce programme est passé sous Pwin98+Delphi5.
unité Unité1 ;
interface
utilise
Windows, messages, SysUtils, classes, graphiques, contrôles, formulaires, boîtes de dialogue,
StdCtrls, MPlayer ;
taper
TWavHeader = record //Définir un format d'en-tête de fichier Wav
rid : entier long ;
rLen : entier long;
wId : entier long ;
fid : entier long ;
fLen : entier long;
wFormatTag : Mot ;
nCanaux : mot ;
nSamplesPerSec : entier long;
nAvgBytesPerSec : entier long;
nBlockAlign : mot ;
wBitsPerSample : mot ;
dId : entier long ;
wSampleLength : entier long;
fin;
TForm1 = classe(TForm)
MediaPlayer1 : TMediaPlayer ;
BtStart : TButton ;
BtStop : TButton ;
procédure CreateWav(channels : word; résolution : word; rate : longint; fn : string);//Personnaliser le processus d'écriture d'un en-tête de fichier Wav
procédure BtStartClick(Expéditeur : TObject);
procédure BtStopClick(Expéditeur : TObject);
privé
{Déclarations privées}
publique
{Déclarations publiques}
fin;
var
Formulaire1 : TForm1 ;
mise en œuvre
{$R *.DFM}
procédure TForm1.CreateWav( canaux : mot; { 1 (mono) ou 2 (stéréo) }
résolution : mot ; { 8 ou 16, représentant un son 8 bits ou 16 bits}
taux : entier long ; {fréquence sonore, telle que 11025, 22050, 44100}
fn : string {nom du fichier correspondant} );
var
wf : fichier de TWavHeader ;
wh : TWavHeader;
commencer
wh.rId := 46464952 $ ;
wh.rLen := 36;
wh.wId := 45564157 $ ;
wh.fId := 20 746 d66 $ ;
wh.fLen := 16;
wh.wFormatTag := 1;
wh.nChannels := chaînes ;
wh.nSamplesPerSec := taux ;
wh.nAvgBytesPerSec := canaux*taux*(résolution div 8);
wh.nBlockAlign := canaux*(résolution div 8);
wh.wBitsPerSample := résolution ;
wh.dId := 61746164 $ ;
wh.wSampleLength := 0;
assignfile(wf,fn); {ouvrir le fichier correspondant}
rewrite(wf); {Déplacer le pointeur au début du fichier}
write(wf,wh); {écrire dans l'en-tête du fichier}
closefile(wf); {Fermer le fichier}
fin;
procédure TForm1.BtStartClick(Expéditeur : TObject);
commencer
essayer
//Créer un fichier Wav Temp.wav dans le répertoire courant du programme
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;
sauf
BtStart.Enabled:=True;
BtStop.Enabled:=false;
Application.MessageBox('Échec de l'initialisation du périphérique multimédia !','Erreur',MB_ICONERROR+MB_OK);
fin;
fin;
procédure TForm1.BtStopClick(Expéditeur : TObject);
commencer
essayer
MediaPlayer1.Stop ;
MediaPlayer1.Enregistrer ;
MediaPlayer1.Fermer ;
Application.MessageBox('Enregistrement vocal terminé !','Message',MB_ICONINFORMATION+MB_OK);
BtStart.Enabled:=True;
BtStop.Enabled:=false;
sauf
Application.MessageBox('Erreur lors de l'enregistrement du fichier son !','Erreur',MB_ICONERROR+MB_OK);
BtStart.Enabled:=True;
BtStop.Enabled:=false;
fin;
fin;
fin.
Supplément : 1. Lors de la lecture du fichier enregistré, vous devrez peut-être augmenter la valeur Wav de l'attribut audio.
2. Si d'autres pilotes audio sont installés sur le système, la taille du fichier Wav enregistré peut être nulle, mais un fichier se terminant par TMP sera généré en même temps. Changer son extension en Wav est le fichier audio enregistré. Mais cela arrive rarement. (La chance est presque nulle ^-^)
3. Ce programme peut transmettre l'enregistrement sonore lors de l'exécution de Jieba et Replayer.