博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
操作 Wave 文件(8): 使用 TMediaPlayer 录制 wav 文件
阅读量:7250 次
发布时间:2019-06-29

本文共 2239 字,大约阅读时间需要 7 分钟。

  hot3.png

TMediaPlayer 录音是基于一个已存在的 wav 文件, 上次建立空白 wav 的函数可派上用场了.
TMediaPlayer 的功能是基于 MCI 的, 都是该淘汰的东西了, 只是简单了解下.
接下来还要学习用 waveIn...系列函数录音、用 DirectSound 录音.

unit Unit1;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, MPlayer, StdCtrls;type  TForm1 = class(TForm)    MediaPlayer1: TMediaPlayer;    Button1: TButton;    Button2: TButton;    procedure FormCreate(Sender: TObject);    procedure Button1Click(Sender: TObject);    procedure Button2Click(Sender: TObject);  end;var  Form1: TForm1;implementation{$R *.dfm}uses MMSystem;//建立一个空白 Wave 文件的函数function CreateWav(chan, freq, bit: Word; const FilePath: string): Boolean;var  h: HMMIO;  ckiRiff, ckiFmt, ckiData: TMMCKInfo;  fmt: TPCMWaveFormat;begin  ZeroMemory(@ckiRiff, SizeOf(TMMCKInfo));  ckiRiff.cksize := 36;  ckiRiff.fccType := mmioStringToFOURCC('WAVE', 0);  ZeroMemory(@ckiFmt, SizeOf(TMMCKInfo));  ckiFmt.ckid := mmioStringToFOURCC('fmt', 0);  ZeroMemory(@ckiData, SizeOf(TMMCKInfo));  ckiData.ckid := mmioStringToFOURCC('data', 0);  fmt.wf.wFormatTag := WAVE_FORMAT_PCM;  fmt.wf.nChannels := chan;  fmt.wf.nSamplesPerSec := freq;  fmt.wf.nAvgBytesPerSec := freq * chan * bit div 8;  fmt.wf.nBlockAlign := chan * bit div 8;  fmt.wBitsPerSample := bit;  h := mmioOpen(PChar(FilePath), nil, MMIO_CREATE or MMIO_WRITE);  if h = 0 then Exit(False);  if (mmioCreateChunk(h, @ckiRiff, MMIO_CREATERIFF) = MMSYSERR_NOERROR) and    (mmioCreateChunk(h, @ckiFmt, 0) = MMSYSERR_NOERROR) and    (mmioWrite(h, PAnsiChar(@fmt), SizeOf(TPCMWaveFormat)) = SizeOf(TPCMWaveFormat)) and    (mmioAscend(h, @ckiFmt, 0) = MMSYSERR_NOERROR) and    (mmioCreateChunk(h, @ckiData, 0) = MMSYSERR_NOERROR) then Result := True;  mmioClose(h, 0);end;//文件路径const path = 'C:\Temp\Test.wav';//开始录音procedure TForm1.Button1Click(Sender: TObject);begin  CreateWav(2, 22050, 16, path);  MediaPlayer1.FileName := path;  MediaPlayer1.Open;  MediaPlayer1.StartRecording;  Button2.Enabled := True;end;//停止录音并播放procedure TForm1.Button2Click(Sender: TObject);begin  MediaPlayer1.Stop;  MediaPlayer1.Play;end;procedure TForm1.FormCreate(Sender: TObject);begin  MediaPlayer1.Visible := False;  Button2.Enabled := FileExists(path);end;end.

转载于:https://my.oschina.net/hermer/blog/319450

你可能感兴趣的文章
Ruby语法学习笔记(1)
查看>>
Windows Phone 7 使用选择器(Chooser)
查看>>
QOS 之 WRED
查看>>
ASP.NET MVC5 知识点整理
查看>>
CCNP 640-892知识点中文精简解释
查看>>
listview适配器与加载过程详解
查看>>
SDN控制器列表
查看>>
LeetCode - 8. String to Integer (atoi)
查看>>
在两个php下session无法使用的问题
查看>>
说一说关于破解支付宝AR红包的事
查看>>
Oracle DG之--构建Physical Standby(一主库对应多备库)
查看>>
深入学习 Hyper-V 的导出和导入
查看>>
为迎接祖国60华诞,更换博客页面了!!!
查看>>
基于OHCI的USB主机 —— USB设备去的配置描述符
查看>>
IO Foundation 6-解压缩zip文件
查看>>
收件人管理及活动目录集成
查看>>
几个常用的dos命令
查看>>
多态的概念
查看>>
个人笔记:LINUX下MAIL通知维护
查看>>
Azure国际版VM密码重置(Portal)
查看>>