Como criar um programa de gravação usando Delphi
Chen Jingtao
Delphi é uma excelente ferramenta de programação visual da InPRise (anteriormente Borland). Seu controle Mediaplayer integrado é uma ferramenta poderosa para o desenvolvimento de multimídia. Você pode usá-lo em apenas alguns minutos para criar um programa que pode reproduzir arquivos multimídia como o Jieba. Mas poucas pessoas sabem que você também pode usá-lo para fazer um programa de gravação.
Execute o Delphi e arraste um controle Mediaplayer na página Sistema para o formulário. O nome padrão é Mediaplayer1. Como nosso programa usa seu próprio botão, defina a propriedade Visible de Mediaplayer1 como False e mantenha as outras propriedades com seus valores padrão. Coloque mais dois botões, Button1 e Button2. O nome do atributo do Button1 é alterado para BtStart, a legenda é alterada para "Iniciar gravação", o nome do atributo do Button2 é alterado para BtStop, a legenda é alterada para "Parar gravação" e o atributo Enabled é alterado para False. Em seguida, mude a janela para a janela de código e comece a escrever o código.
No programa, definimos o formato do cabeçalho do arquivo Wav. Ao gravar, primeiro criamos um arquivo Wav apenas com o cabeçalho do arquivo e, em seguida, escrevemos o som gravado pelo Mediaplayer1 no arquivo. Os significados de vários parâmetros no processo CreateWav são os seguintes: os primeiros canais representam o canal de som, quando 1 é obtido, representa mono e quando 2 é obtido, representa estéreo. A resolução também tem apenas dois valores para escolher. Quando 8 é selecionado, representa o som de 8 bits. Quando 16 é selecionado, representa o som de 16 bits. Quanto maior o valor, mais nítido será o som e, claro, maior será o arquivo gravado. O último parâmetro representa o nome do arquivo correspondente. Portanto CreateWav pode ter o seguinte formato:
CreateWav(1,8,11025,'C:/abc.wav');//Cria um arquivo Wav mono de 8 bits chamado abc.wav com uma frequência de 11025 no diretório raiz da unidade C
CreateWav(2,16,44100,'C:/abc.wav');//Crie um arquivo Wav chamado abc.wav com uma frequência de canal estéreo de 16 bits de 44100 no diretório raiz da unidade C
Netbus, um conhecido software de controle remoto estrangeiro escrito em Delphi, possui uma função de monitoramento de som, que é escrita usando o método deste artigo. Primeiro grava a voz da outra parte e depois a transmite de volta para atingir o objetivo de monitorar a outra parte. Claro, a premissa é que a outra parte deve ter um microfone instalado, caso contrário o som reproduzido pela outra parte será monitorado (por exemplo, abra o Jieba ou Readplay e execute este programa para gravar o som reproduzido).
Na verdade, a atual tecnologia de transmissão de som em rede desenvolveu-se até certo ponto, e os intercomunicadores de voz e os telefones IP também começaram a amadurecer. No entanto, eles usam o formato VOX ou ACM. Os códigos específicos podem ser baixados da minha página inicial http://Lovejingtao.126.com. Mas se você não está familiarizado com os formatos VOX ou ACM, também pode usar o método deste artigo para fazer seu próprio “gravador”. Quanto a como chamar o avifil32.dll que acompanha o sistema para reprodução de vídeo online, entrarei em contato com você quando tiver oportunidade.
Este programa foi aprovado no Pwin98+Delphi5.
unidade Unidade1;
interface
usa
Windows, Mensagens, SysUtils, Classes, Gráficos, Controles, Formulários, Diálogos,
StdCtrls, MPlayer;
tipo
TWavHeader = record //Definir um formato de cabeçalho de arquivo Wav
rId: inteiro longo;
rLen: inteiro longo;
wId: inteiro longo;
fId: inteiro longo;
fLen: inteiro longo;
wFormatTag: Palavra;
nCanais: palavra;
nSamplesPerSec: inteiro longo;
nAvgBytesPerSec: inteiro longo;
nBlockAlign: palavra;
wBitsPerSample: palavra;
dId: inteiro longo;
wSampleLength: inteiro longo;
fim;
TForm1 = classe(TForm)
MediaPlayer1: TMediaPlayer;
BtStart: TButton;
BtStop: Botão T;
procedimento CreateWav(canais: palavra; resolução: palavra; taxa: inteiro longo; fn: string); // Personaliza o processo de gravação de um cabeçalho de arquivo Wav
procedimento BtStartClick(Remetente: TObject);
procedimento BtStopClick(Remetente: TObject);
privado
{Declarações privadas}
público
{Declarações públicas}
fim;
var
Formulário1: TForm1;
implementação
{$R *.DFM}
procedimento TForm1.CreateWav (canais: palavra; {1 (mono) ou 2 (estéreo)}
resolução: palavra; {8 ou 16, representando som de 8 ou 16 bits}
taxa: inteiro longo; {frequência de som, como 11025, 22050, 44100}
fn: string {nome do arquivo correspondente});
var
wf: arquivo do TWavHeader;
o que: TWavHeader;
começar
wh.rId := $46464952;
wh.rLen := 36;
wh.wId := $45564157;
wh.fId := $20746d66;
wh.fLen := 16;
wh.wFormatTag := 1;
wh.nCanais := canais;
wh.nSamplesPerSec := taxa;
wh.nAvgBytesPerSec := canais*taxa*(resolução div 8);
wh.nBlockAlign := canais*(resolução div 8);
wh.wBitsPerSample := resolução;
wh.dId := $61746164;
wh.wSampleLength:= 0;
atribuaarquivo(wf,fn); {abra o arquivo correspondente}
rewrite(wf); {Move o ponteiro para o início do arquivo}
write(wf,wh); {escrever no cabeçalho do arquivo}
closefile(wf); {Fechar arquivo}
fim;
procedimento TForm1.BtStartClick(Remetente: TObject);
começar
tentar
//Cria um arquivo Wav Temp.wav no diretório atual do programa
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:=falso;
BtStop.Enabled:=true;
exceto
BtStart.Enabled:=Verdadeiro;
BtStop.Enabled:=falso;
Application.MessageBox('Falha na inicialização do dispositivo de mídia!','Erro',MB_ICONERROR+MB_OK);
fim;
fim;
procedimento TForm1.BtStopClick(Remetente: TObject);
começar
tentar
MediaPlayer1.Stop;
MediaPlayer1.Salvar;
MediaPlayer1.Fechar;
Application.MessageBox('Gravação de voz concluída!','Mensagem',MB_ICONINFORMATION+MB_OK);
BtStart.Enabled:=Verdadeiro;
BtStop.Enabled:=falso;
exceto
Application.MessageBox('Erro ao salvar arquivo de som!','Erro',MB_ICONERROR+MB_OK);
BtStart.Enabled:=Verdadeiro;
BtStop.Enabled:=falso;
fim;
fim;
fim.
Suplemento: 1. Ao reproduzir o arquivo gravado, pode ser necessário aumentar o valor Wav do atributo de áudio.
2. Se alguns outros drivers de áudio estiverem instalados no sistema, o tamanho do arquivo Wav gravado pode ser zero, mas um arquivo terminando em TMP será gerado ao mesmo tempo. Alterando sua extensão para Wav é o arquivo de som gravado. Mas isso raramente acontece. (A chance é quase zero ^-^)
3. Este programa pode transmitir a gravação de som durante a execução do Jieba e do Replayer.