美文网首页
Lame To MP3

Lame To MP3

作者: 小猪圣骑士 | 来源:发表于2020-05-21 14:31 被阅读0次

Lame framework

逻辑过程

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字符,如rbw+bab+等组合,加入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文件格式解析

相关文章

网友评论

      本文标题:Lame To MP3

      本文链接:https://www.haomeiwen.com/subject/wovgnhtx.html