Как создать программу записи с помощью Delphi
Чэнь Цзинтао
Delphi — превосходный инструмент визуального программирования от InPRise (ранее Borland). Его встроенный элемент управления Mediaplayer является мощным инструментом для разработки мультимедиа. С его помощью вы сможете создать программу, способную воспроизводить мультимедийные файлы типа Jieba всего за несколько минут. Но мало кто знает, что его также можно использовать для создания записывающей программы.
Запустите Delphi и перетащите элемент управления Mediaplayer со страницы «Система» в форму. Имя по умолчанию — Mediaplayer1. Поскольку наша программа использует собственную кнопку, установите для свойства Visible Mediaplayer1 значение False и оставьте для остальных свойств значения по умолчанию. Поместите еще две кнопки: Button1 и Button2. Имя атрибута Button1 изменено на BtStart, заголовок изменен на «Начать запись», имя атрибута Button2 изменено на BtStop, заголовок изменен на «Остановить запись», а атрибут Enabled изменен на False. Затем переключите окно на окно кода и начните писать код.
В программе мы определяем формат заголовка файла Wav. При записи мы сначала создаем Wav-файл только с заголовком файла, а затем записываем в него звук, записанный Mediaplayer1. Значения нескольких параметров в процессе CreateWav следующие: первые каналы представляют звуковой канал, когда берется 1, он представляет моно, а когда берется 2, он представляет стерео. Разрешение также имеет только два значения на выбор. Когда выбрано 8, оно представляет 8-битный звук. Когда выбрано 16, оно представляет 16-битный звук. Скорость представляет частоту звука, например 11025, 22050, 44100. Чем больше значение, тем чище звук и, конечно же, тем больше записываемый файл. Последний параметр представляет соответствующее имя файла. Таким образом, CreateWav может иметь следующий вид:
CreateWav(1,8,11025,'C:/abc.wav');//Создаем 8-битный моно Wav-файл с именем abc.wav и частотой 11025 в корневом каталоге диска C.
CreateWav(2,16,44100,'C:/abc.wav');//Создаем Wav-файл с именем abc.wav с частотой 16-битного стереоканала 44100 в корневом каталоге диска C.
Netbus, известная зарубежная программа дистанционного управления, написанная на Delphi, имеет функцию мониторинга звука, которая написана по методу данной статьи. Сначала он записывает голос другой стороны, а затем передает его обратно для достижения цели мониторинга другой стороны. Конечно, предполагается, что у другой стороны должен быть установлен микрофон, иначе звук, воспроизводимый другой стороной, будет отслеживаться (например, откройте Jieba или Readplay и запустите эту программу для записи воспроизводимого звука).
Фактически, нынешняя технология сетевой передачи звука достигла определенного этапа, а голосовые домофоны и IP-телефоны также начали развиваться. Однако они используют формат VOX или формат ACM. Конкретные коды можно загрузить с моей домашней страницы http://Lovejingtao.126.com. Но если вы не знакомы с форматами VOX или ACM, вы также можете использовать метод, описанный в этой статье, чтобы сделать свой собственный «диктофон». По поводу того, как вызвать идущую в комплекте с системой avifil32.dll для онлайн-воспроизведения видео, я с вами свяжусь, когда будет возможность.
Эта программа прошла под Pwin98+Delphi5.
блок Unit1;
интерфейс
использует
Windows, сообщения, SysUtils, классы, графика, элементы управления, формы, диалоги,
StdCtrls, MPlayer;
тип
TWavHeader = запись //Определение формата заголовка файла Wav
избавился: лонгинт;
рЛен: лонгинт;
wId: лонгинт;
фид: лонгинт;
fLen: лонгинт;
wFormatTag: Слово;
nКаналы: слово;
nSamplesPerSec: Longint;
nAvgBytesPerSec: Longint;
nBlockAlign: слово;
wBitsPerSample: слово;
сделал: лонгинт;
wSampleLength: Longint;
конец;
ТФорм1 = класс (ТФорма)
Медиаплеер1: ТМедиаплеер;
BtStart: TButton;
BtStop: TButton;
процедура CreateWav(каналы: слово; разрешение: слово; скорость: longint; fn: строка);//Настраиваем процесс записи заголовка Wav-файла
процедура BtStartClick (Отправитель: TObject);
процедура BtStopClick (Отправитель: TObject);
частный
{Частные заявления}
общественный
{Публичные заявления}
конец;
вар
Форма1: ТФорм1;
выполнение
{$R *.DFM}
процедура TForm1.CreateWav(каналы: слово; { 1 (моно) или 2 (стерео) }
разрешение: слово { 8 или 16, представляющее 8-битный или 16-битный звук}
скорость: longint {частота звука, например 11025, 22050, 44100}
fn: string {соответствующее имя файла});
вар
wf: файл TWavHeader;
WH: TWavHeader;
начинать
wh.rId:= $46464952;
wh.rLen := 36;
wh.wId:= $45564157;
wh.fId:= $20746d66;
wh.fLen := 16;
wh.wFormatTag: = 1;
wh.nChannels := каналы;
wh.nSamplesPerSec := скорость;
wh.nAvgBytesPerSec := каналы*скорость*(разрешение div 8);
wh.nBlockAlign := каналы*(разрешение div 8);
wh.wBitsPerSample := разрешение;
wh.dId:= $61746164;
wh.wSampleLength: = 0;
Assignfile(wf,fn); {открыть соответствующий файл}
rewrite(wf); {Перемещаем указатель в начало файла}
write(wf,wh); {записать в заголовок файла}
closefile(wf); {Закрыть файл}
конец;
процедура TForm1.BtStartClick(Отправитель: TObject);
начинать
пытаться
//Создаем Wav-файл Temp.wav в текущем каталоге программы
CreateWav(1, 8, 11025, (ExtractFilePath(application.ExeName)+ 'Temp.wav'));
MediaPlayer1.DeviceType := dtAutoSelect;
MediaPlayer1.FileName := (ExtractFilePath(Application.ExeName)+ 'Temp.wav');
Медиаплеер1.Открыть;
Медиаплеер1.Начать запись;
BtStart.Enabled:=false;
BtStop.Enabled:=истина;
кроме
BtStart.Enabled:=Истина;
BtStop.Enabled:=false;
Application.MessageBox('Инициализация медиа-устройства не удалась!','Ошибка',MB_ICONERROR+MB_OK);
конец;
конец;
процедура TForm1.BtStopClick(Отправитель: TObject);
начинать
пытаться
Медиаплеер1.Стоп;
Медиаплеер1.Сохранить;
Медиаплеер1.Закрыть;
Application.MessageBox('Запись голоса завершена!','Сообщение',MB_ICONINFORMATION+MB_OK);
BtStart.Enabled:=Истина;
BtStop.Enabled:=false;
кроме
Application.MessageBox('Ошибка сохранения звукового файла!','Ошибка',MB_ICONERROR+MB_OK);
BtStart.Enabled:=Истина;
BtStop.Enabled:=false;
конец;
конец;
конец.
Дополнение: 1. При воспроизведении записанного файла может потребоваться увеличить значение Wav атрибута audio.
2. Если в системе установлены другие аудиодрайверы, размер записанного файла Wav может быть нулевым, но при этом будет создан файл, заканчивающийся на TMP. Изменение его расширения на Wav является записанным звуковым файлом. Но это случается редко. (Шанс почти нулевой^-^)
3. Эта программа может передавать запись звука во время работы Jieba и Replayer.