中国程序员联盟 正在重新改版中ing 不便之处还请见谅 改版后将内容涉及java delphi .net php
 
  首页 | 数据库开发 | 网络通讯 | 多线程 | 多媒体开发 | 图像处理 | 程序人生 | 系统函数 | 控件开发 | Web服务
 
  当前位置:笨鱼delphi技术网>多媒体开发>文章内容

delphi 如何处理wave多媒体文件的split

来源:国外 关于:Kniebusch Horst 发布时间:2007-07-15   [收藏] [推荐]
If you know how wave files work, this is very easy.
First you need the complete file header of the old wave file:

type
  TWaveHeader = record
    ident1: array[0..3] of Char;       // Must be "RIFF"
    len: DWORD;                        // remaining length after this header
    ident2: array[0..3] of Char;       // Must be "WAVE"
    ident3: array[0..3] of Char;       // Must be "fmt "
    reserv: DWORD;                     // Reserved Size
    wFormatTag: Word;                  // format type
    nChannels: Word;                   // number of channels (i.e. mono, stereo, etc.)
    nSamplesPerSec: DWORD;             //sample rate
    nAvgBytesPerSec: DWORD;            //for buffer estimation
    nBlockAlign: Word;                 //block size of data
    wBitsPerSample: Word;              //number of bits per sample of mono data
    cbSize: Word;                      //the count in bytes of the size of
    ident4: array[0..3] of Char;       //Must be "data"
end;

You can load the file header with this function:

function GetWaveHeader(FileName: TFilename): TWaveHeader;
const
  riff = 'RIFF';
  wave = 'WAVE';
var
  f: TFileStream;
  w: TWaveHeader;
begin
  if not FileExists(Filename) then
    exit;
  try
    f := TFileStream.create(Filename, fmOpenRead);
    f.Read(w, Sizeof(w));
    if w.ident1 <> riff then
    begin
      Showmessage('This is not a RIFF File');
      exit;
    end;
    if w.ident2 <> wave then
    begin
      Showmessage('This is not a valid wave file');
      exit;
    end;
  finally
    f.free;
  end;
  Result := w;
end;

Now we have all for creating the code for spliting the wave file:
function SplitWave(Source, Dest1, Dest2: TFileName; Pos: Integer): Boolean;
var
  f1, f2, f3: TfileStream;
  w: TWaveHeader;
  p: Integer;
begin
  Result:=False
  if not FileExists(Source) then
    exit;
  try
    w := GetWaveHeader(Source);
    p := Pos - Sizeof(TWaveHeader);
    f1 := TFileStream.create(Source, fmOpenRead);
    f2 := TFileStream.create(Dest1, fmCreate);
    f3 := TFileStream.create(Dest2, fmCreate);
    {++++++++++Create file 1 ++++++++++++++++}
    w.len := p;
    f2.Write(w, Sizeof(w));
    f1.position := Sizeof(w);
    f2.CopyFrom(f1, p);
    {++++++++++++++++++++++++++++++++++++++++}
    {+++++++++++Create file 2 +++++++++++++++}
    w.len := f1.size - Pos;
    f3.write(w, Sizeof(w));
    f1.position := Pos;
    f3.CopyFrom(f1, f1.size - pos);
    {++++++++++++++++++++++++++++++++++++++++}
  finally
    f1.free;
    f2.free;
    f3.free;
  end;
  Result:=True;
end;

[浏览: 次]   
上一篇:delphi 如何将.wav多媒体文件加载到可的执行程序   下一篇:delphi 多媒体音量调节
[收藏] [推荐] [返回顶部] [打印本页] [关闭窗口]  
    评论加载中…
google adsense热点文章
·delphi 播放wav文件
·delphi 设置声卡音量
·delphi 多媒体wave文件写盘
·delphi 多媒体音量调节
·delphi 如何将.wav多媒体文件加载到可
·delphi 音量输出仪表
·delphi 多媒体wave文件CD音频
·delphi 分析多媒体波频文件
·delphi 音乐播放器信号显示组件
·delphi 音乐播放器扬声器类
·delphi 如何处理扩展名为.avi的audio流
     delphi技术网 | firefox 下载 | Avant Browser下载 | dedecms 技术网 | drupal 爱好者 | php 技术网
  Copyright@www.delphichm.com,2006-2009.All Rights Reserved.
 
程序员联盟 | delphi Java .net|QQ:707102932