美文网首页
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