逻辑过程
1、声明Lame全局变量
2、初始化Lame并设置各种转码参数
3、开始转码
// 初始化
lame_t lame = lame_init();
//设置wav的采样率
lame_set_in_samplerate(lame, 44100.0);
//声道,不设置默认为双声道
lame_set_num_channels(lame, 2);
// 设置比特率, 默认是(vbr_off)CBR,vbr_default = vbr_mtrh 是VBR
lame_set_VBR(lame, vbr_default);
// 设置好的参数建立编码器
lame_init_params(lame);
// pcm文件还没读取完成,将PCM数据送入编码器,获取编码出的mp3数据。这些数据写入文件就是mp3文件。
// lame_encode_buffer 单声道,16位
// lame_encode_buffer_interleaved 双声道,16位
// lame_encode_buffer_float 单声道,32位
write = lame_encode_buffer_interleaved(lame, pcm_buffer, read, mp3_buffer, MP3_SIZE);
// pcm文件已经全部读取完毕。
write = lame_encode_flush(lame, mp3_buffer, MP3_SIZE);
// 写入文件
fwrite(mp3_buffer, write, 1, mp3);
// 编码完成之后,写入Mp3 VBR Tag,如果不写入的话,可能会导致某些播放器播放时获取时长出现问题,所以建议写入。
lame_mp3_tags_fid(lame, mp3);
//销毁编码器,释放资源。
lame_close(lame);
fopen
头文件:#include<stdio.h>
定义函数:FILE * fopen(const char * path,const char * mode);
mode:
-
r
打开只读文件,该文件必须存在。 -
r+
打开可读写的文件,该文件必须存在。 -
w
打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。 -
w+
打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。 -
a
以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。 -
a+
以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。
上述的形态字符串都可以再加一个b
字符,如rb
、w+b
或ab+
等组合,加入b
字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。
返回值:
文件顺利打开后,指向该流的文件指针就会被返回,如果文件打开失败则返回NULL
。
#include <stdio.h>
main()
{
File *fp = fopen()先写一个文件
FILE *fp; /*定义一个文件指针*/
int i;
fp=fopen("wenjian", "rb"); /*打开当前目录名为wenjian的文件只读*/
if(fp==NULL) /*判断文件是否打开成功*/
puts("File open error");/*提示打开不成功*/
i=fclose(fp); /*关闭打开的文件*/
if(i==0) /*判断文件是否关闭成功*/
printf("O,K"); /*提示关闭成功*/
else
puts("File close error");/*提示关闭不成功*/
}
VBR编码
Variable Bit Rate(可改变之比特率)
提供内容供用户下载、 将内容在本地播放或者在读取速度有限的设备 如CD或 DVD播放机 上播放时,请使用VBR编码。当 编码内容中混有简单数据和复杂数据(例如,在快动作和慢动作间切换的视频)时,VBR 编码是很有优势的。使用VBR编码时,系统将自动为内容的简单部分分配较少的比特,从而留出足量的比特用于生成高质量的复杂部分。这意味着复杂性恒定的内容(例如新闻播音)不会受益于VBR编码。
使用时,你可以选择从最差音质/最大压缩比到最好音质/最低压缩比之间的种种过渡级数,在MP3文件编码之时,程序会尝试保持所选定的整个文件的品质,将选择适合音乐文件的不同部分的比特率来编码。主要优点是可以让整首歌都能大致达到我们的品质要求,缺点是编码时无法估计压缩出来的文件大小。
VBR 适合的应用场景是媒体存储,而不是网络传输
MP3帧头格式
能尽快和精确地计算一个MPEG文件的播放时长,最常见的是MPEG-1 Layer III (既MP3),它应用了比较成熟的压缩技术。
一个MPEG音频文件是由很多帧数据组成。Layer II,II,III的音频帧头都是相同的,不同之处体现在音频数据的编码方式。帧本身是由slot组成的。Layer I的slot大小是4字节,其余情况是1字节。
参考
MP3文件格式解析
网友评论