Cómo crear un programa de grabación usando Delphi
Chen Jingtao
Delphi es una excelente herramienta de programación visual de InPRise (anteriormente Borland). Su control Mediaplayer integrado es una poderosa herramienta para desarrollar multimedia. Puedes usarlo en sólo unos minutos para crear un programa que pueda reproducir archivos multimedia como Jieba. Pero pocas personas sabrán que también puedes usarlo para crear un programa de grabación.
Ejecute Delphi y arrastre un control Mediaplayer en la página Sistema al formulario. El nombre predeterminado es Mediaplayer1. Dado que nuestro programa usa su propio botón, establezca la propiedad Visible de Mediaplayer1 en Falso y mantenga otras propiedades en sus valores predeterminados. Coloque dos botones más, Botón1 y Botón2. El nombre del atributo de Botón1 se cambia a BtStart, el título se cambia a "Iniciar grabación", el nombre del atributo de Botón2 se cambia a BtStop, el título se cambia a "Detener grabación" y el atributo Enabled se cambia a Falso. Luego cambie la ventana a la ventana de código y comience a escribir código.
En el programa, definimos el formato del encabezado del archivo Wav. Al grabar, primero creamos un archivo Wav con solo el encabezado del archivo y luego escribimos el sonido grabado por Mediaplayer1 en el archivo. Los significados de varios parámetros en el proceso CreateWav son los siguientes: los primeros canales representan el canal de sonido, cuando se toma 1, representa mono y cuando se toma 2, representa estéreo. La resolución también tiene solo dos valores para elegir. Cuando se selecciona 8, representa sonido de 8 bits. Cuando se selecciona 16, representa sonido de 16 bits. La velocidad representa la frecuencia del sonido, como 11025, 22050, 44100. Cuanto mayor sea el valor, más claro será el sonido y, por supuesto, más grande será el archivo grabado. El último parámetro representa el nombre del archivo correspondiente. Entonces CreateWav puede tener la siguiente forma:
CreateWav(1,8,11025,'C:/abc.wav');//Cree un archivo Wav mono de 8 bits llamado abc.wav con una frecuencia de 11025 en el directorio raíz de la unidad C
CreateWav(2,16,44100,'C:/abc.wav');//Cree un archivo Wav llamado abc.wav con una frecuencia de canal estéreo de 16 bits de 44100 en el directorio raíz de la unidad C
Netbus, un conocido software de control remoto extranjero escrito en Delphi, tiene una función de monitoreo de sonido, que se escribe utilizando el método de este artículo. Primero graba la voz de la otra parte y luego la transmite para lograr el propósito de monitorear a la otra parte. Por supuesto, la premisa es que la otra parte debe tener un micrófono instalado; de lo contrario, se monitoreará el sonido reproducido por la otra parte (por ejemplo, abra Jieba o Readplay y ejecute este programa para grabar el sonido reproducido).
De hecho, la tecnología actual de transmisión de sonido en red se ha desarrollado hasta cierto punto y los intercomunicadores de voz y los teléfonos IP también han comenzado a madurar. Sin embargo, utilizan el formato VOX o ACM. Los códigos específicos se pueden descargar desde mi página de inicio http://Lovejingtao.126.com. Pero si no estás familiarizado con los formatos VOX o ACM, también puedes utilizar el método de este artículo para crear tu propia "grabadora". En cuanto a cómo llamar al avifil32.dll que viene con el sistema para la reproducción de videos en línea, me comunicaré con usted cuando tenga la oportunidad.
Este programa pasó bajo Pwin98+Delphi5.
unidad Unidad1;
interfaz
usos
Windows, Mensajes, SysUtils, Clases, Gráficos, Controles, Formularios, Cuadros de diálogo,
StdCtrls, MPlayer;
tipo
TWavHeader = registro //Definir un formato de encabezado de archivo Wav
librar: entero largo;
rLen: entero largo;
wId: entero largo;
fId: entero largo;
fLen: entero largo;
wFormatTag: Palabra;
nCanales: palabra;
nSamplesPerSec: entero largo;
nAvgBytesPerSec: entero largo;
nBlockAlign: palabra;
wBitsPerSample: palabra;
hizo: entero largo;
wSampleLength: entero largo;
fin;
TForm1 = clase(TForm)
MediaPlayer1: TMediaPlayer;
BtInicio: TBotón;
BtStop: TBotón;
procedimiento CreateWav(canales: palabra; resolución: palabra; velocidad: entero largo; fn: cadena);//Personalizar el proceso de escritura de un encabezado de archivo Wav
procedimiento BtStartClick(Remitente: TObject);
procedimiento BtStopClick(Remitente: TObject);
privado
{Declaraciones privadas}
público
{Declaraciones públicas}
fin;
var
Formulario1: TForm1;
implementación
{$R *.DFM}
procedimiento TForm1.CreateWav( canales: palabra; { 1 (mono) o 2 (estéreo) }
resolución: palabra; {8 o 16, que representa sonido de 8 o 16 bits}
tasa: entero largo; {frecuencia de sonido, como 11025, 22050, 44100}
fn: cadena {nombre del archivo correspondiente});
var
wf: archivo de TWavHeader;
por qué: TWavHeader;
comenzar
wh.rId := $46464952;
wh.rLen := 36;
wh.wId := $45564157;
wh.fId := $20746d66;
wh.fLen := 16;
wh.wFormatTag: = 1;
wh.nChannels := canales;
wh.nSamplesPerSec := tasa;
wh.nAvgBytesPerSec := canales*tasa*(resolución div 8);
wh.nBlockAlign := canales*(resolución div 8);
wh.wBitsPerSample := resolución;
wh.dId := $61746164;
wh.wSampleLength := 0;
asignarfile(wf,fn); {abre el archivo correspondiente}
rewrite(wf); {Mover el puntero al principio del archivo}
escribir(wf,wh); {escribir en el encabezado del archivo}
closefile(wf); {Cerrar archivo}
fin;
procedimiento TForm1.BtStartClick(Remitente: TObject);
comenzar
intentar
//Crea un archivo Wav Temp.wav en el directorio actual del programa
CreateWav(1, 8, 11025, (ExtractFilePath(application.ExeName)+ 'Temp.wav'));
MediaPlayer1.DeviceType := dtAutoSelect;
MediaPlayer1.FileName := (ExtractFilePath(Application.ExeName)+ 'Temp.wav');
MediaPlayer1.Open;
MediaPlayer1.Iniciar grabación;
BtStart.Enabled:=falso;
BtStop.Enabled:=verdadero;
excepto
BtStart.Enabled:=Verdadero;
BtStop.Enabled:=falso;
Application.MessageBox('¡Falló la inicialización del dispositivo multimedia!','Error',MB_ICONERROR+MB_OK);
fin;
fin;
procedimiento TForm1.BtStopClick(Remitente: TObject);
comenzar
intentar
MediaPlayer1.Detener;
MediaPlayer1.Guardar;
MediaPlayer1.Cerrar;
Application.MessageBox('¡Grabación de voz completada!','Mensaje',MB_ICONINFORMATION+MB_OK);
BtStart.Enabled:=Verdadero;
BtStop.Enabled:=falso;
excepto
Application.MessageBox('¡Error al guardar el archivo de sonido!','Error',MB_ICONERROR+MB_OK);
BtStart.Enabled:=Verdadero;
BtStop.Enabled:=falso;
fin;
fin;
fin.
Suplemento: 1. Al reproducir el archivo grabado, es posible que necesite aumentar el valor Wav del atributo de audio.
2. Si hay otros controladores de audio instalados en el sistema, el tamaño del archivo Wav grabado puede ser cero, pero al mismo tiempo se generará un archivo que termina en TMP. Cambiar su extensión a Wav es el archivo de sonido grabado. Pero esto rara vez sucede. (La probabilidad es casi nula ^-^)
3. Este programa puede pasar la grabación de sonido mientras ejecuta Jieba y Replayer.