WAV 录制时在期间作记号,播放时能直接跳到记号处开始播放?(100分)

  • 主题发起人 主题发起人 赛特
  • 开始时间 开始时间

赛特

Unregistered / Unconfirmed
GUEST, unregistred user!
我是这样作记号的:
var
w: TWaveHeader;
//头文件record
tmpFS:TfileStream;
Source:String;
//WAV 路径
mark:String;
//记号
begin

mark:='ABC';
Source:=ExtractFilePath(paramstr(0))+ 'Temp.wav';
w:=getWaveHeader(Source);

w.rLen:=w.rLen + Length(mark);
w.wSampleLength:=w.wSampleLength + Length(mark);
tmpFS := TFileStream.create(Source, fmOpenReadWrite);
try
tmpFS.Write(w, SizeOf(w));
//更改头文件部分信息
tmpFS.Seek(0, soFromEnd);
//在当前录制位置,也就是最后,作记号
tmpFS.Write(PChar(mark)^, Length(mark));
finally
tmpFS.Free;
end;


end;

而如果继续录制,则先 MediaPlayer1.StartPos:=MediaPlayer1.Length;

播放时,就可以先找到记号处,再播放。但按我这样作记号,mark的位置为什么会改变呢?如果改变了,肯定就不能实现要的目的了。(我说的改变是,比如我是在tmpFS.Position为1000时作了记号,然后接着录音。这时如果查找记号,发现它的position变了。如果再录,它还会变)。该如何解决这个问题啊!!!万分感谢!!!!
 
你是不是想在一段录音的文件中打上几个标志,因为你这段录音分不同次录的.比如分三次,那么打个A,B,C的标志.要想播B部分的时候就找到这个标志直接播放B部分的,但是现在找不到这个B的位置了,因为它变化了,更你预先设定好的不一样了,是不是这个意思啊?
 
对,就是这个意思,要能直接跳到想听的位置。
我也想过先在变量中记下几个标记的位置,等录制完后在最后写进去,但这样不保险,万一非正常结束程序就不能保证了。所以,要是能边录边作记号是最保险的办法。
 
你这句代码MediaPlayer1.StartPos:=MediaPlayer1.Length;

改成这样试试看:MediaPlayer1.StartPos:=MediaPlayer1.Length - 1;
 
你这个函数getWaveHeader是怎么写的,可以贴出来看看么
 
噢,我知道怎么读了,我照你的方法录一个看看
 
我可能知道该如何实现了,这样做:
先写头文件;
接着就写一个record,里面是个数组,记录各个点的position:Integer;
以后就修改这个record
实际上形成的wav文件是这样的结构:头文件+record+具体内容
 
而不是到处去留些记号
 
噢,我想也是,因为不能在录音的时候在中间打标记
 
我试过了,就是这样能实现了
 
接受答案了.
 
大哥,能不能把你这部分的代码给我分享一下,我这段时间也在做录音方面的。我的邮箱:morgan123654@yahoo.com.cn
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
719
import
I
I
回复
0
查看
1K
import
I
后退
顶部