博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
windows phone 8 mp3 编码及解码
阅读量:4967 次
发布时间:2019-06-12

本文共 1833 字,大约阅读时间需要 6 分钟。

前言:
前段时间看了个博客:
介绍了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!\n");
    }
    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

你可能感兴趣的文章
python——爬虫
查看>>
孤荷凌寒自学python第五十八天成功使用python来连接上远端MongoDb数据库
查看>>
求一个字符串中最长回文子串的长度(承接上一个题目)
查看>>
简单权限管理系统原理浅析
查看>>
springIOC第一个课堂案例的实现
查看>>
求输入成绩的平均分
查看>>
php PDO (转载)
查看>>
wordpress自动截取文章摘要代码
查看>>
[置顶] 一名优秀的程序设计师是如何管理知识的?
查看>>
scanf和gets
查看>>
highcharts 图表实例
查看>>
ubuntu下如何查看用户登录及系统授权相关信息
查看>>
秋季学期学习总结
查看>>
SpringBoot 优化内嵌的Tomcat
查看>>
【LaTeX】E喵的LaTeX新手入门教程(1)准备篇
查看>>
highcharts曲线图
查看>>
extjs动态改变样式
查看>>
PL/SQL Developer 查询的数据有乱码或者where 字段名=字段值 查不出来数据
查看>>
宏定义
查看>>
笔记:git基本操作
查看>>