windows phone 8 mp3 编码及解码

前言:
前段时间看了个博客:
介绍了mp3的编码,可惜没有源码,在github里找了下 只有一个项目,而且比较复杂不容易看懂,
所以自己就做了这个项目。
目前已发布在github里了。
(该项目在HTC8X测试通过,不过在界面那的代码可能还有些问题,C++/CX 基本可用了)
 
编解码需要用到 lame 的源码 上面的博客说的很清楚 我就不再解释了。
个人建议有条件的 直接使用ARM环境(也就是真机环境)
 
关于C++/CX调试:
在“启动项目”--“属性”--“调试” 中:
 
编码流程:
 
获取wav头:
 
          unsigned char pcmheaddata [ 44 ];
          for ( int    i   =   0 ;   i   <   44 ;   i ++)
         {
            pcmheaddata [ i ]= bytes [ i ];                
         }
根据wav头初始化MP3编码器:
 
    WaveHeader pcmhead(waveheaddata);//解析wav头
 
    lame_global_flags* lame = lame_init();
    //if(pcmhead.GetSampleRate()>1){
    //    lame_set_in_samplerate(lame, pcmhead.GetSampleRate());
    //}
    if(pcmhead.GetChannels()>0){
        lame_set_num_channels(lame, pcmhead.GetChannels());
    }
    if(p_Wrapper->EncodeBrate>31){
        lame_set_brate(lame,p_Wrapper->EncodeBrate); //128
    }
    if(p_Wrapper->EncodeQuality>=0&&p_Wrapper->EncodeQuality<=9){
        lame_set_quality(lame, p_Wrapper->EncodeQuality);
    }
 
    lame_init_params(lame);
    return lame;
 
编码数据:
编码使用
lame_encode_buffer_interleaved
lame_encode_buffer 这个使用感觉不好用,参数还要分左右声道。
 
 
解码流程:
 
初始化解码器:

    lame_t lame = lame_init();
    lame_set_decode_only(lame, 1);
    if(lame_init_params(lame) == -1)
    {
        throw ref new Exception(-2,"FATAL ERROR: parameters failed to initialize properly in lame. Aborting! ");
    }
    hip_t hip = hip_decode_init();

 
跳过mp3头:
只有跳过mp3 后 ,再使用hip_decode1_headers 才能获得mp3data_struct
int id3size= GetLenOfId3v2Tag(mp3);
 
解码数据:
解码函数:
len = hip_decode1_headers(gfp,mp3buf,mp3_len,left, right, mp3data);
这个函数需要注意的是 len 总是1152 或者 576 所以需要循环接收数据 ,
但是 mp3_len 第一次是 mp3_len 循环时mp3_len=0;代表只接收,不输入。
 
总结:
1、如果要支持24/32bit的wav 不能使用lame_encode_buffer_interleaved,因为输入输入长度是short,应该是int才行。
2、大部分需要的功能在lame源码项目中都有,有时候我为了找个函数在网上浪费了半天。
3、C++/CX 的公开函数中 参数不能是C++的类型,只能是对象,不知道怎么支持 基础类型(int,char)。
4、编码/解码中
由于是第一次写C++/CX,本人对C++还没入门,所以这个项目目前只能对16bit的wav编码 24bit和32bit 目前还不行
mp3解码基本没问题。 希望大家喜欢的,帮我多完善。也让我学习下,谢谢 。





原文地址:https://www.cnblogs.com/tianjing/p/3444423.html