从CD中抓取音轨为WAV文件(100分)

  • 主题发起人 主题发起人 lxmzm
  • 开始时间 开始时间
L

lxmzm

Unregistered / Unconfirmed
GUEST, unregistred user!
从CD中抓取音轨为WAV文件,如果采用44100采样率,可以正常播放,如采用22050或11250
则WAV播放出现慢放效果,如何才能用22050或11250采样率正常抓轨呢?
 
可能对你有帮助
生成一个波文件
Type

TPCMWaveHeader = record

rID : array[0..3] of char;
{ 'RIFF' Identifier }

rLen : longint;


wID : array[0..3] of char;
{ 'WAVE' Identifier }

fId : array[0..3] of char;
{ 'fmt ' Identifier }

fLen : longint;
{ Fixed, must be 16 }

wFormatTag : word;
{ Fixed, must be 1 }

nChannels : word;
{ Mono=1, Stereo=2 }

nSamplesPerSec : longint;
{ SampleRate in Hertz }

nAvgBytesPerSec : longint;


nBlockAlign : word;


nBitsPerSample : word;
{ Resolution, e.g. 8 or 16 }

dId : array[0..3]of char;
{ 'data' Identifier }

dLen : longint;
{ Number of following data bytes }

end;





procedure WritePCMWaveFile(Filename : string;
Resolution, Channels, Samplerate, Samples : integer;
Data : Pointer);


var h : TPCMWaveHeader;


f : file;


databytes : integer;


begin


DataBytes:=Samples;


DataBytes:=DataBytes*Channels;
{do
uble if stereo }

DataBytes:=DataBytes*(Resolution div 8);
{do
uble if 16 Bit }





FillChar(h,SizeOf(TPCMWaveHeader),#0);


with hdo


begin


rID[0]:='R';


rID[1]:='I';


rID[2]:='F';


rID[3]:='F';
{ 1st identifier }

rLen:=DataBytes+36;


wID[0]:='W';


wID[1]:='A';


wID[2]:='V';


wID[3]:='E';
{ 2nd identifier }

fId[0]:='f';


fId[1]:='m';


fId[2]:='t';


fID[3]:=Chr($20);
{ 3rdidentifier ends with a space character }

fLen:=$10;
{ Fixed, must be 16 }

wFormatTag:=1;
{ Fixed, must be 1 }

nChannels:=Channels;
{ Channels }

nSamplesPerSec:=SampleRate;
{ Sample rate in Hertz }

nAvgBytesPerSec:=SampleRate*Channels*trunc(Resolution div 8);


nBlockAlign:=Channels*(Resolution div 8);
{ Byte order, see below }

nBitsPerSample:=Resolution;


dId[0]:='d';


dId[1]:='a';


dId[2]:='t';


dId[3]:='a';
{ Data identifier }

dLen:=DataBytes;
{ number of following data bytes }

end;



AssignFile(f,filename);


ReWrite(f,1);


BlockWrite(f,h,SizeOf(h));


BlockWrite(f,pbytearray(data),databytes);


CloseFile(f);


{ The rest of the file is the wave data. Order is low-high for left channel,

low-high for right channel, and so on.

For mono or 8 bit files make the respective changes. }

end;


 
关键是你如何抓音轨,让我们了解一下
 
在CSDN中有源代码,http://www.csdn.net/cnshare/soft/12/12739.shtm
你自己下载后仔细观摩一番吧[:D]
 
根本不是一回事
 

Similar threads

D
回复
0
查看
867
DelphiTeacher的专栏
D
D
回复
0
查看
836
DelphiTeacher的专栏
D
后退
顶部