免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
合并兩個(gè)格式相同的WAV文件

合并兩個(gè)格式相同的WAV文件

時(shí)間:2011-6-2來源:yang 作者: peng點(diǎn)擊: 6次
type
  TWavFormat = packed record
    ChunkID: array[0..3] of Char; //‘RIFF‘
    ChunkSize: Longword; // file size - 8 [bytes]
    Format: array[0..3] of Char; // ‘WAVE‘
    SubChunk1ID: array[0..3] of Char; // ‘fmt ‘   mind the space!
    SubChunk1Size: Longword; // hex10
    AudioFormat: Word; // hex 01
    NumOfChannels: Word; //1 mono, 2 stereo
    SampleRate: Longword; // number of samples/sec
    ByteRate: Longword; // samplerate* num of channels*
                        // bytes per (mono) sample
    BytesperSample: Word; // size of (mono) sample [bytes]
    BitsPerSample: Word; // BytesperSample *8
    SubChunk2ID: array[0..3] of Char; //‘data‘
    SubChunk2Size: Longword; //number of data bytes
  end;
 
function ConcatWavFile(AWavFile1, AWavFile2, ANewFile: string): Boolean;
var
  vWavFormat1: TWavFormat;
  vWavFormat2: TWavFormat;
  vFileHandle1: THandle;
  vFileHandle2: THandle;
  vFileStream1: TFileStream;
  vFileStream2: TFileStream;
  vChunkSize1, vChunkSize2: Integer;
begin
  Result := False;
  if not FileExists(AWavFile1) then Exit;
  if not FileExists(AWavFile2) then Exit;
  vFileHandle1 := _lopen(PChar(AWavFile1), OF_READ or OF_SHARE_DENY_NONE);
  vFileHandle2 := _lopen(PChar(AWavFile2), OF_READ or OF_SHARE_DENY_NONE);
  if (Integer(vFileHandle1) <= 0) or (Integer(vFileHandle2) <= 0) then
  begin
    _lclose(vFileHandle1);
    _lclose(vFileHandle2);
    Exit;
  end;
 
  vFileStream1 := TFileStream.Create(vFileHandle1);
  vFileStream2 := TFileStream.Create(vFileHandle2);
  try
    if vFileStream1.Read(vWavFormat1, SizeOf(TWavFormat)) <>
      SizeOf(TWavFormat) then Exit;
    if vFileStream2.Read(vWavFormat2, SizeOf(TWavFormat)) <>
      SizeOf(TWavFormat) then Exit;
    if vWavFormat1.ChunkID <> ‘RIFF‘ then Exit;
    if vWavFormat1.SubChunk2ID <> ‘data‘ then Exit;
    vChunkSize1 := vWavFormat1.SubChunk2Size;
    vChunkSize2 := vWavFormat2.SubChunk2Size;
    vWavFormat1.ChunkSize := 0;
    vWavFormat1.SubChunk2Size := 0;
    vWavFormat2.ChunkSize := 0;
    vWavFormat2.SubChunk2Size := 0;
    if not CompareMem(@vWavFormat1, @vWavFormat2, SizeOf(TWavFormat)) then Exit; //格式不相同
    with TMemoryStream.Create do try
      vWavFormat1.ChunkSize := vChunkSize1 + vChunkSize2 +
        SizeOf(vWavFormat1) - 8;
      vWavFormat1.SubChunk2Size := vChunkSize1 + vChunkSize2;
      Write(vWavFormat1, SizeOf(TWavFormat));
      CopyFrom(vFileStream1, vChunkSize1);
      CopyFrom(vFileStream2, vChunkSize2);
      try
        SaveToFile(ANewFile);
      except
        Exit;
      end;
    finally
      Free;
    end;
  finally
    vFileStream1.Free;
    vFileStream2.Free;
  end;
  Result := True;
end; { ConcatWavFile }
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  ConcatWavFile(‘c:\windows\media\chord.wav‘, ‘c:\windows\media\chimes.wav‘,
    ‘c:\temp\temp.wav‘);
end;
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
g.711 decoder and encoder
WAVE頭分析代碼
實(shí)現(xiàn)一個(gè)PHP WAV接合方案
【wav音頻解析】之wavread函數(shù)的C 實(shí)現(xiàn)
Delphi中轉(zhuǎn)向語句Break,Continue,Exit的作用
在Delphi XE中使用go語言的defer方法
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服