Wave 文件(15): 合并与剪裁 wav 文件

 Unit1;




  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;


  TForm1 = (TForm)
    Button1: TButton;
    Button2: TButton;
     Button1Click(Sender: TObject);
     Button2Click(Sender: TObject);
  ;


  Form1: TForm1;





 MMSystem;

 GetWaveFmtData( path: ;  fmt: TWaveFormatEx;  buf: TBytes): Boolean;

  hFile: HMMIO;
  ckiRIFF,ckiFmt,ckiData: TMMCKInfo;

  Result := False;
  hFile := mmioOpen(PChar(path), , MMIO_READ);
   hFile =   Exit;
  ZeroMemory(@ckiRIFF, SizeOf(TMMCKInfo));
  ZeroMemory(@ckiFmt, SizeOf(TMMCKInfo));
  ZeroMemory(@ckiData, SizeOf(TMMCKInfo));
  ckiRIFF.fccType := mmioStringToFOURCC(, );
  ckiFmt.ckid := mmioStringToFOURCC(, );
  ckiData.ckid := mmioStringToFOURCC(, );
  ZeroMemory(@fmt, SizeOf(TWaveFormatEx));
  mmioDescend(hFile, @ckiRIFF, , MMIO_FINDRIFF);
   (ckiRIFF.ckid = FOURCC_RIFF)  (ckiRIFF.fccType = mmioStringToFOURCC(,)) 
     (mmioDescend(hFile, @ckiFmt, @ckiRIFF, MMIO_FINDCHUNK) = MMSYSERR_NOERROR) 
     (mmioRead(hFile, @fmt, ckiFmt.cksize) = ckiFmt.cksize) 
     (mmioAscend(hFile, @ckiFmt, ) = MMSYSERR_NOERROR) 
     (mmioDescend(hFile, @ckiData, @ckiRIFF, MMIO_FINDCHUNK) = MMSYSERR_NOERROR) 
  
    SetLength(buf, ckiData.cksize);
    Result := (mmioRead(hFile, PAnsiChar(buf), ckiData.cksize) = ckiData.cksize);
  ;
  mmioClose(hFile, );
;

 CreateWave( path: ;  fmt: TWaveFormatEx;  buf: TBytes): Boolean;

  h: HMMIO;
  ckiRiff, ckiFmt, ckiData: TMMCKInfo;

  ZeroMemory(@ckiRiff, SizeOf(TMMCKInfo));
  ckiRiff.cksize :=  -  + Length(buf);
  ckiRiff.fccType := mmioStringToFOURCC(, );

  ZeroMemory(@ckiFmt, SizeOf(TMMCKInfo));
  ckiFmt.ckid := mmioStringToFOURCC(, );

  ZeroMemory(@ckiData, SizeOf(TMMCKInfo));
  ckiData.ckid := mmioStringToFOURCC(, );
  ckiData.cksize := Length(buf);

  h := mmioOpen(PChar(path), , MMIO_CREATE  MMIO_WRITE);
   (h <> )  (mmioCreateChunk(h, @ckiRiff, MMIO_CREATERIFF) = MMSYSERR_NOERROR) 
    (mmioCreateChunk(h, @ckiFmt, ) = MMSYSERR_NOERROR) 
    (mmioWrite(h, PAnsiChar(@fmt), SizeOf(TPCMWaveFormat)) = SizeOf(TPCMWaveFormat)) 
    (mmioAscend(h, @ckiFmt, ) = MMSYSERR_NOERROR) 
    (mmioCreateChunk(h, @ckiData, ) = MMSYSERR_NOERROR) 
    Result := (mmioWrite(h, PAnsiChar(buf), Length(buf)) = Length(buf));
  mmioClose(h, );
;


 TForm1.Button1Click(Sender: TObject);

  pathSource = ;
  pathDest = ;

  fmt: TWaveFormatEx;
  buf: TBytes;

  GetWaveFmtData(pathSource, fmt, buf);
  SetLength(buf, Length(buf)  );
  CreateWave(pathDest, fmt, buf);
;

 TForm1.Button2Click(Sender: TObject);

  path1 = ;
  path2 = ;
  pathDest = ;

  fmt1,fmt2: TWaveFormatEx;
  buf1,buf2: TBytes;
  oldLen: Integer;

  GetWaveFmtData(path1, fmt1, buf1);
  GetWaveFmtData(path2, fmt2, buf2);

   CompareMem(@fmt1, @fmt2, SizeOf(TWaveFormatEx)) 
  
    oldLen := Length(buf1);
    SetLength(buf1, Length(buf1) + Length(buf2));
    CopyMemory(@buf1[oldLen], Pointer(buf2), Length(buf2));
    CreateWave(pathDest, fmt1, buf1);
    ShowMessage();
;

.

转载于:https://www.cnblogs.com/lzh-boy/archive/2010/01/13/1646596.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值