搜索
bottom↓
回复: 27

谁有 mp3的解码库啊 ?

[复制链接]

出0入0汤圆

发表于 2017-5-14 08:45:03 | 显示全部楼层 |阅读模式
谁有 mp3的解码库啊 ?

出0入0汤圆

发表于 2017-5-14 09:05:03 来自手机 | 显示全部楼层
helix解码库的话上网搜,很多的,主要基于stm32f4discovery

出0入0汤圆

发表于 2017-5-14 09:42:30 | 显示全部楼层
昨天刚看到新闻。。。
说MP3要死了
AAC接替。。。。。

出0入0汤圆

发表于 2017-5-14 10:52:21 | 显示全部楼层
https://github.com/captain168/stm32f4_honglong/tree/master/mp3

captain168 stm32f407基于红龙开发板的MP3的例程

出0入10汤圆

发表于 2017-5-14 12:30:23 | 显示全部楼层
野火官方的教程有,我写的。

出0入0汤圆

 楼主| 发表于 2017-5-14 13:49:12 | 显示全部楼层
10xjzheng 发表于 2017-5-14 12:30
野火官方的教程有,我写的。

有没有关于 iar 工程的移植 ?

目前把这个  keil 工程移植到 iar 上,出现几个 汇报错误

出0入10汤圆

发表于 2017-5-14 14:08:22 | 显示全部楼层
hpdell 发表于 2017-5-14 13:49
有没有关于 iar 工程的移植 ?

目前把这个  keil 工程移植到 iar 上,出现几个 汇报错误 ...

没有                       

出0入0汤圆

发表于 2017-5-14 20:14:56 来自手机 | 显示全部楼层
mp3专利去年过期了

出0入0汤圆

 楼主| 发表于 2017-5-14 20:19:32 | 显示全部楼层
gongxd 发表于 2017-5-14 20:14
mp3专利去年过期了

那现在有什么好的 方案来取代 mp3 ?

出0入0汤圆

发表于 2017-5-14 21:14:56 | 显示全部楼层
hpdell 发表于 2017-5-14 20:19
那现在有什么好的 方案来取代 mp3 ?


发明人宣布MP3退出历史舞台,AAC取而代之

上世纪90年代开始兴起并对音乐消费方式产生革命性影响的播放格式MP3,正式退出了历史舞台。发明了这种格式的德国研究机构夫琅和费集成电路研究所(Fraunhofer Institute for Integrated Circuits)宣布,终止了某些MP3相关专利的许可,换句话说就是他们不想让这种格式继续存在下去,因为2017年其他更好的存储音乐的方法。

该研究所的主管称,高级音频编码(AAC)格式成为“手机音乐下载和视频的事实标准”。这种格式效率更高、功能更好,比特率比MP3更低,流体电视和电台广播都使用该格式发送高品质音频。在上世纪80年代后期,埃尔朗根-纽伦堡弗里德里希-亚历山大大学对音频编码进行了基础研究。夫琅和费集成电路研究所与他们联手,开发了MP3标准。该格式只需原文件10%的存储空间,大大减少了下载时间。

史蒂芬·维特(Stephen Witt)的书《How Music Got Free》(音乐如何变得免费)称,企业阻扰和其他失败几乎使MP3变得毫无用处。最终,夫琅和费研究所向消费免费提供软件,让他们从CD下载歌曲到电脑的MP3文件中,此后该格式流行起来。然而,到上世纪90年代末随着互联网的出现,这些MP3文件在网上迅速传播,催生了数字盗版的淘金热。这种格式在非法共享上统治多年,Napster和Kazaa等流行的P2P服务允许人们只需点击鼠标就能下载歌曲。

当然该格式也促使合法一面的发展,在线销售商争相合法地满足联网公众数字化购买音乐的需求。苹果的iTunes店主导了该市场,用MP3播放器iPod收藏音乐。苹果几乎一开始就提供用户AAC选项,该格式最终证明是MP3的替代者。但MP3在历史中有自己的地位,让人们首次体验到互联网在数据交换上的真正潜力。

via:Engadget(原标题:MP3 is dead, long live AAC) https://www.engadget.com/2017/05/12/mp3-is-dead-long-live-aac/

出0入0汤圆

发表于 2017-5-14 21:27:07 来自手机 | 显示全部楼层
那又如何?mp3退出,就不能继续使用么?还是继续使用mp3是犯法的要被枪毙?

出0入0汤圆

发表于 2017-5-14 21:48:04 来自手机 | 显示全部楼层
XA144F 发表于 2017-5-14 21:27
那又如何?mp3退出,就不能继续使用么?还是继续使用mp3是犯法的要被枪毙? ...

这样子就装不了逼,用户觉得垃圾不肯埋单。

出0入0汤圆

 楼主| 发表于 2017-5-15 17:15:34 | 显示全部楼层
XA144F 发表于 2017-5-14 21:27
那又如何?mp3退出,就不能继续使用么?还是继续使用mp3是犯法的要被枪毙? ...

既然是过时的产品,估计应该是可以继续使用的吧,

出0入0汤圆

发表于 2017-5-15 17:21:13 | 显示全部楼层
hpdell 发表于 2017-5-14 13:49
有没有关于 iar 工程的移植 ?

目前把这个  keil 工程移植到 iar 上,出现几个 汇报错误 ...

把那几个汇编改成C

出0入0汤圆

 楼主| 发表于 2017-5-15 17:22:38 | 显示全部楼层
zack_cf 发表于 2017-5-14 21:14
发明人宣布MP3退出历史舞台,AAC取而代之

上世纪90年代开始兴起并对音乐消费方式产生革命性影响的播放格 ...

不简单啦,了解的很全面啦

出0入8汤圆

发表于 2017-5-15 21:22:26 来自手机 | 显示全部楼层
开玩笑,门票3

出0入8汤圆

发表于 2017-5-15 21:22:56 来自手机 | 显示全部楼层
mp3咋那么容易就死掉的。

出0入54汤圆

发表于 2017-5-15 21:24:31 | 显示全部楼层
我用的是Libmad解码库,你也可以网上搜搜相关的。

出0入0汤圆

 楼主| 发表于 2017-5-15 22:13:29 | 显示全部楼层
lusson 发表于 2017-5-15 21:24
我用的是Libmad解码库,你也可以网上搜搜相关的。

你好,这个苦能否移植到 iar 的平台上啊 ??

我在网上找了几个,都是基于keil 的平台,但是移植到 iar 的平台上,貌似汇编部分就不行了

出0入0汤圆

发表于 2017-5-16 08:34:31 | 显示全部楼层
  1. #elif defined(EWARM) /* mowin add */

  2. #define __inline  inline
  3. /*
  4. * MULSHIFT32(x, y)    signed multiply of two 32-bit integers (x and y), returns top 32 bits of 64-bit result
  5. * FASTABS(x)          branchless absolute value of signed integer x
  6. * CLZ(x)              count leading zeros in x
  7. * MADD64(sum, x, y)   (Windows only) sum [64-bit] += x [32-bit] * y [32-bit]
  8. * SHL64(sum, x, y)    (Windows only) 64-bit left shift using __int64
  9. * SAR64(sum, x, y)    (Windows only) 64-bit right shift using __int64 */

  10. /* 1 MULSHIFT32 */
  11. static long MULSHIFT32(long x, long y)
  12. {
  13.     Word64 r = (Word64)x * y;
  14.     return (r >> 32);
  15. }

  16. /* 2 FASTABS */
  17. static __inline int FASTABS(int x)
  18. {
  19.         int sign;

  20.         sign = x >> (sizeof(int) * 8 - 1);
  21.         x ^= sign;
  22.         x -= sign;

  23.         return x;
  24. }

  25. /* 3 CLZ */
  26. #include "stm32f4xx.h" /* mowin 2016-12-12 */
  27. static __inline int CLZ(int x)
  28. {
  29.     return __CLZ(x);
  30. }

  31. /* 4 MADD64 */
  32. static __inline Word64 MADD64(Word64 sum64, int x, int y)
  33. {
  34.     return (Word64)x * y + sum64;
  35. }

  36. /* 5 SHL64 */

  37. /* 6 SAR64 */
  38. static __inline Word64 SAR64(Word64 x, int n)
  39. {
  40.         return x >> n;
  41. }
复制代码


出0入54汤圆

发表于 2017-5-16 10:41:32 | 显示全部楼层
hpdell 发表于 2017-5-15 22:13
你好,这个苦能否移植到 iar 的平台上啊 ??

我在网上找了几个,都是基于keil 的平台,但是移植到 iar  ...

我说的这个全是C语言的。。。

出0入0汤圆

 楼主| 发表于 2017-5-16 11:33:33 | 显示全部楼层

你好,修改后出现如下的错误,







错误目前主要就是出现在 .s 的启动文件里面,该如何修改啊 ??

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2017-5-16 12:54:06 | 显示全部楼层
hpdell 发表于 2017-5-16 11:33
你好,修改后出现如下的错误,


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2017-5-16 21:00:32 | 显示全部楼层

你好,还是会出现上面的 .s 的错误,

现在关键的是 .s 的汇编文件通不过,如果你有修改好的,能否提供一下啊 ??

出0入0汤圆

发表于 2017-5-16 21:17:09 | 显示全部楼层
hpdell 发表于 2017-5-16 21:00
你好,还是会出现上面的 .s 的错误,

现在关键的是 .s 的汇编文件通不过,如果你有修改好的,能否提供一 ...

不是提供给你了么?
删掉你原来的库,.c/.h/.s一个都不要留。
把我上传的库加入你的工程,检查一下buffer.c就行了。

出0入0汤圆

 楼主| 发表于 2017-5-16 22:16:55 | 显示全部楼层
本帖最后由 hpdell 于 2017-5-16 23:04 编辑
mowin 发表于 2017-5-16 21:17
不是提供给你了么?
删掉你原来的库,.c/.h/.s一个都不要留。
把我上传的库加入你的工程,检查一下buffer ...


你好,增加工程后,编译时提示 缺少 #include "player.h" 这个头文件   ?

另外错误主要出现在 这个函数里面

#define  USE_MALLOC  1
MP3DecInfo *AllocateBuffers(void)
{
        MP3DecInfo *mp3DecInfo;
        FrameHeader *fh;
        SideInfo *si;
        ScaleFactorInfo *sfi;
        HuffmanInfo *hi;
        DequantInfo *di;
        IMDCTInfo *mi;
        SubbandInfo *sbi;

#if USE_MALLOC
    /* 使用动态内存分配 */
    mp3DecInfo = (MP3DecInfo *)malloc(sizeof(MP3DecInfo));
    if (!mp3DecInfo) {
        return 0;
    }
    ClearBuffer(mp3DecInfo, sizeof(MP3DecInfo));

    fh =  (FrameHeader *)     malloc(sizeof(FrameHeader));
    si =  (SideInfo *)        malloc(sizeof(SideInfo));
    sfi = (ScaleFactorInfo *) malloc(sizeof(ScaleFactorInfo));
    hi =  (HuffmanInfo *)     malloc(sizeof(HuffmanInfo));
    di =  (DequantInfo *)     malloc(sizeof(DequantInfo));
    mi =  (IMDCTInfo *)       malloc(sizeof(IMDCTInfo));
    sbi = (SubbandInfo *)     malloc(sizeof(SubbandInfo));
   
        if (!fh || !si || !sfi || !hi || !di || !mi || !sbi) {
                FreeBuffers(mp3DecInfo);        /* safe to call - only frees memory that was successfully allocated */
                return 0;
        }
#endif

#if USE_STATIC
    /* MP3解码器静态内存 23816 bytes */
    /*
    * Use static buffers to make the RAM usage
    * known at compile time.
    */
    static MP3DecInfo      s_mp3DecInfo;
    ClearBuffer(mp3DecInfo, sizeof(MP3DecInfo));
   
        static FrameHeader     s_fh;
        static SideInfo        s_si;
        static ScaleFactorInfo s_sfi;
        static HuffmanInfo     s_hi;
        static DequantInfo     s_di;
        static IMDCTInfo       s_mi;
        static SubbandInfo     s_sbi;

        mp3DecInfo =    &(s_mp3DecInfo); /* player.c mowin add */
        fh =            &(s_fh);
        si =            &(s_si);
        sfi =           &(s_sfi);
        hi =            &(s_hi);
        di =            &(s_di);
        mi =            &(s_mi);
        sbi =           &(s_sbi);
#endif
   
  
  
#if 1
    // 使用全局共享内存
  
    struct player_st *pl =  get_player_data();             // 这个函数没有 及类型不对 ???
   
    mp3DecInfo =    (void *)pl->uni_24kb_buf;
    ClearBuffer(mp3DecInfo, sizeof(MP3DecInfo));
        
        fh =            (void *) ((uint8_t *)mp3DecInfo + sizeof(MP3DecInfo));
        si =            (void *) ((uint8_t *)fh + sizeof(FrameHeader));
        sfi =           (void *) ((uint8_t *)si + sizeof(SideInfo));
        hi =            (void *) ((uint8_t *)sfi + sizeof(ScaleFactorInfo));
        di =            (void *) ((uint8_t *)hi + sizeof(HuffmanInfo));
        mi =            (void *) ((uint8_t *)di + sizeof(DequantInfo));
        sbi =           (void *) ((uint8_t *)mi + sizeof(IMDCTInfo));
   
    if ((uint32_t)((uint8_t *)sbi + sizeof(SubbandInfo)) > (uint32_t)((uint8_t *)pl->uni_24kb_buf + 24*1024) - 1)
      return 0;
#endif
   
        mp3DecInfo->FrameHeaderPS =     (void *)fh;
        mp3DecInfo->SideInfoPS =        (void *)si;
        mp3DecInfo->ScaleFactorInfoPS = (void *)sfi;
        mp3DecInfo->HuffmanInfoPS =     (void *)hi;
        mp3DecInfo->DequantInfoPS =     (void *)di;
        mp3DecInfo->IMDCTInfoPS =       (void *)mi;
        mp3DecInfo->SubbandInfoPS =     (void *)sbi;

        // important to do this - DSP primitives assume a bunch of state variables are 0 on first use
        ClearBuffer(fh,  sizeof(FrameHeader));
        ClearBuffer(si,  sizeof(SideInfo));
        ClearBuffer(sfi, sizeof(ScaleFactorInfo));
        ClearBuffer(hi,  sizeof(HuffmanInfo));
        ClearBuffer(di,  sizeof(DequantInfo));
        ClearBuffer(mi,  sizeof(IMDCTInfo));
        ClearBuffer(sbi, sizeof(SubbandInfo));

        return mp3DecInfo;
}

上面的定义 #if USE_MALLOC
                #if USE_STATIC         这两个选择其一就可以了把,

另外出现的错误如下:













本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2017-5-16 23:46:48 来自手机 | 显示全部楼层
把#if  1改成#if  0,删掉#include ”player.h”

出0入0汤圆

 楼主| 发表于 2017-5-17 11:55:49 | 显示全部楼层
mowin 发表于 2017-5-16 23:46
把#if  1改成#if  0,删掉#include ”player.h”

   多谢多谢
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 17:35

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表