操作 Wave 文件(8): 使用 TMediaPlayer 录制 wav 文件


TMediaPlayer 录音是基于一个已存在的 wav 文件, 上次建立空白 wav 的函数可派上用场了.

TMediaPlayer 的功能是基于 MCI 的, 都是该淘汰的东西了, 只是简单了解下.

接下来还要学习用 waveIn...系列函数录音、用 DirectSound 录音.

unit Unit1;

interface

uses
  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.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Delphi XE作为一个强大的开发工具,可以用于创建Android应用程序。在Delphi XE中,我们可以使用资源文件来存储和管理应用程序中的各种资源,如图像、音频和文本等。下面是使用资源文件进行Android开发的步骤: 1. 在项目中创建一个资源文件:在Delphi XE的菜单栏中选择"File",然后选择"New",再选择"Other"。在弹出的对话框中选择"Resource File",并输入一个文件名以保存资源文件。 2. 向资源文件中添加资源:双击资源文件,然后在打开的资源编辑器中点击"Add"按钮。可以选择添加图像、音频、文本等资源。选择要添加的资源后,点击"OK"按钮。 3. 使用资源文件:在项目中使用资源文件的资源,需要在程序中使用ResXFileRef组件。在程序中添加一个TResStreamAdapter组件,并将其FileName属性设置为要使用的资源文件的名称。然后,将需要的资源存储在一个TResourceStream变量中,通过调用ResXFileRef组件的SaveToStream方法。 例如,将图片资源存储到TImage组件中: ```delphi var ResStream: TResourceStream; begin ResStream := TResourceStream.Create(hInstance, 'ResourceName', RT_RCDATA); try Image1.Picture.LoadFromStream(ResStream); finally ResStream.Free; end; end; ``` 这样,资源文件中的资源就可以在应用程序中使用了。 总结:使用Delphi XE进行Android开发时,可以通过创建资源文件并将所需资源添加到其中来管理和使用应用程序的资源。通过调用TResStreamAdapter组件和相关方法,可以在应用程序中使用资源文件中的资源。这样,开发者可以更方便地管理和调用应用程序所需的各种资源。 ### 回答2: 在Delphi XE中进行安卓开发时,可以使用资源文件来存储和管理应用程序使用的各种资源。资源文件可以是图片、音频、视频、文本文件等。 首先,在项目中创建一个资源文件,这可以通过在项目中点击“项目”菜单,然后选择“添加到项目”中的“资源”选项来完成。 在资源文件中,你可以添加各种资源,如图片、音频等。 然后,在代码中使用这些资源文件中的资源。 1. 你可以使用代码访问并加载资源文件中的图片到你的应用程序中,使用`TImage`控件的`Bitmap.LoadFromResourceName`方法来加载资源图片,例如: ```delphi Image1.Bitmap.LoadFromResourceName(HInstance, 'MyImage'); ``` 其中,`MyImage`是你在资源文件中添加的图片资源的名称。 2. 你也可以使用代码访问资源文件中的文本文件使用`TResourceStream`类来加载资源文件中的文本内容,例如: ```delphi var ResStream: TResourceStream; Text: TStringList; begin ResStream := TResourceStream.Create(HInstance, 'MyText', RT_RCDATA); try Text := TStringList.Create; try Text.LoadFromStream(ResStream); // 使用Text变量中的文本内容进行接下来的操作 finally Text.Free; end; finally ResStream.Free; end; end; ``` 其中,`MyText`是你在资源文件中添加的文本资源的名称。 通过使用资源文件,你可以方便地管理应用程序中使用的各种资源,并在代码中灵活使用这些资源。 ### 回答3: 在Delphi XE中,我们可以使用资源文件来存储和管理Android应用程序所需要的各种资源,如图像、音频、视频等。以下是使用资源文件进行Delphi XE安卓开发的步骤: 1. 打开Delphi XE,并创建一个新的FireMonkey移动应用程序项目。 2. 在项目结构中,右键单击"Android"节点,选择"添加"->"新建"->"资源文件"。 3. 在资源文件编辑器中,可以添加和管理资源。点击"添加"按钮,选择要添加的资源类型(如图像、音频等),然后将所需的资源文件添加到资源文件列表中。 4. 在代码中使用资源:在需要使用资源的地方,通过使用TStyleBook、TImage、TMediaPlayer等组件,将资源文件中的资源加载到应用程序中。例如,可以使用TImage组件来显示资源文件中的图像。 5. 在应用程序启动时加载资源:可以使用FMX.Platform.TFMXApplicationEvent组件来在应用程序启动时加载资源。创建一个事件处理程序,在该事件处理程序中使用TResourceStream类来加载资源文件中的资源。 6. 构建和部署应用程序:选择目标为Android,然后构建和部署应用程序到Android设备或模拟器上。 以上是使用资源文件进行Delphi XE安卓开发的基本步骤。通过使用资源文件,我们可以更方便地管理和使用应用程序所需的各种资源,提高开发效率和代码可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值