網上看了下,提問的多,但是解決了的還沒見著。
那位做過的給點Demo吧,謝謝。就是把幾個文件合併成一個然後播放出來。
那位做過的給點Demo吧,謝謝。就是把幾個文件合併成一個然後播放出來。
解决方案 »
- 用Delphi做东西,涉及HDC,就是图形之类的,但 编译是老是显示:Undeclared identifier: 'HDC'
- 如何用Socket传接收文件
- delphi7 webbrowser
- BED ERROR $000F大家来帮忙啊
- [公务贴]基础类版務日志!!!
- 一直的疑惑:同一功能的实现往往要在多个事件中实现,这样可读性和可维护性极差。如何才能将这些各事件中的代码整和在一起
- [原创]上联:“面对面向对象”。求下联。
- delphi模仿163上传附件,可以添加多个文件,文件重复了提示,将文件以流的形式保存到数据库中怎么办?急!
- 备份数据要
- :database连接sql server7时怎样避免连接不通而死机或无止的等待!!谢谢!
- DBGRID 如何高亮显示某一列~
- 如何根据cxGrid中的一字段值,分别设置当前行的文字颜色
应该类似这样,如果再复杂点就得分析wav文件格式var
aryMs:array of TMemoryStream;
temp: TMemoryStream;
begin
......
temp.Clear;
temp.Seek(0,soBeginning);
aryMs[0].Seek(0,soFromBeginning);
temp.CopyFrom( aryMs[0],aryMs[0].Size );
aryMs[1].Seek(0,soFromBeginning);
temp.CopyFrom( aryMs[1],aryMs[1].Size );
aryMs[3].Seek(0,soFromBeginning);
temp.CopyFrom( aryMs[3],aryMs[3].Size );
aryMs[2].Seek(0,soFromBeginning);
temp.CopyFrom( aryMs[2],aryMs[2].Size );
aryMs[4].Seek(0,soFromBeginning);
temp.CopyFrom( aryMs[4],aryMs[4].Size );
temp.SaveToFile( 'F:\AV.wav' );
.....
end;
要不然通过其他软件合并起来再playsound不知道行不行
^_^都是高手,不敢乱说,呵呵
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;
执行到这里时就退出了。