录音机录入来的声音存为WAV格式如何(100分)

  • 主题发起人 主题发起人 greater
  • 开始时间 开始时间
G

greater

Unregistered / Unconfirmed
GUEST, unregistred user!
录音机录入来的声音存为WAV格式后,格式是如何?
(跟WINDOWS提供的WAV文件格式好象不同)
我做了一个实验,能读出WINDOWS的WAV文件的声音数据
但是不能读出录音机转换过来的声音数据
 
WAV格式最关键的一点是支持ACM,你必须使用标准的MMIO函数和ACM函数进行读取。自己写一个格式处理程序是不完善的。
 
最简单的是存储成 pcm wave 格式..

又不需要压缩.只需要些个文件头就可以了.

所有的wave都是有个文件头的. 里面是关于数据的存放方式和压缩方法.
后面是数据区.

pcm的数据区则是wave的线性数据按左右声道交叉排列的.没有压缩.
 
的确和ACM有关!
 
定义一个文件头:

TWavHeader = record //定义一个Wav文件头格式
rId : longint;

rLen : longint;

wId : longint;

fId : longint;

fLen : longint;

wFormatTag : word;

nChannels : word;

nSamplesPerSec : longint;

nAvgBytesPerSec : longint;

nBlockAlign : word;

wBitsPerSample : word;

dId : longint;

wSampleLength : longint;

end;



然后建立一个文件, 并写入这个文件头结构:


procedure TForm1.CreateWav( channels : word;
{ 1(单声)或者2(立体声) }
resolution : word;
{ 8或者16,代表8位或16位声音 }
rate : longint;
{ 声音频率,如11025,22050, 44100}
fn : string { 对应的文件名称 } );
var
wf : file of TWavHeader;
wh : TWavHeader;
begin

wh.rId := $46464952;

wh.rLen := 36;

wh.wId := $45564157;

wh.fId := $20746d66;

wh.fLen := 16;

wh.wFormatTag := 1;

wh.nChannels := channels;

wh.nSamplesPerSec := rate;

wh.nAvgBytesPerSec := channels*rate*(resolution div 8);
wh.nBlockAlign := channels*(resolution div 8);
wh.wBitsPerSample := resolution;
wh.dId := $61746164;

wh.wSampleLength := 0;


assignfile(wf,fn);
{打开对应文件 }
rewrite(wf);
{移动指针到文件头}
write(wf,wh);
{写进文件头 }
closefile(wf);
{关闭文件 }
end;



(注明: 这是从网上找到的文章, 测试成立)
 
没有声音
 
我用acm做了一个程序,局域网内可以聊天。但是声音特别小,在本机上调试时
也是如此。不知道是不是集成声卡的问题啊,我已经把音量,麦克开到最大啦!
哪位大虾知道请告知。谢谢。
 
后退
顶部