搜索
bottom↓
回复: 14

STA013解码芯片如何获得MP3的帧头信息

[复制链接]

出0入0汤圆

发表于 2006-6-17 20:44:51 | 显示全部楼层 |阅读模式
我现在用STA013+M16L+SED1335+SD做MP3播放,遇到MP3文件的码率>128K时,声音就不正常,声音有点卡(这个词可能不能正确表述,反正就是不正常),我试过几种情况:

1、故意增加程序时间,目的让128K时不能正常,但128K还是正常,这说明可能与时间无关,也就是STA013的数据寄存器不存在中途为空。

2、优化程序让它跑得更快,

3、更改PLL

请问STA013解码芯片如何获得MP3的帧头信息,为什么128K以上码率不能正常播放?

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2006-6-17 22:19:53 | 显示全部楼层
这里有很多高手在做MP3,请帮忙分析分析?

PLL confign采用AVR LIB 的STA013.如下:

        // Soft reset

        sta013WriteReg(STA_REG_SOFT_RESET,                        0x01);

        sta013WriteReg(STA_REG_SOFT_RESET,                        0x00);



        // Mute and configure DAC output

        sta013WriteReg(STA_REG_MUTE,                                0x01);

        sta013WriteReg(STA_REG_PCMDIVIDER,                        0x01);        // 32-bit mode, O_FAC = 256

        sta013WriteReg(STA_REG_PCMCONF,                                0x31);        // 18-bit mode & more



        // Configure PLL for MP3 rates

        sta013WriteReg(STA_REG_PLLFRAC_441_H,                0x67);

        sta013WriteReg(STA_REG_PLLFRAC_441_L,                0x77);

        sta013WriteReg(STA_REG_PLLFRAC_H,                        0xbb);

        sta013WriteReg(STA_REG_PLLFRAC_L,                        0x3a);

        sta013WriteReg(STA_REG_MFSDF_441,                        0x10);

        sta013WriteReg(STA_REG_MFSDF,                                0x0F);



        // Configure interface polarities, etc

        sta013WriteReg(STA_REG_PLLCTL_M,                        0x0C);

        sta013WriteReg(STA_REG_PLLCTL_N,                        0x00);

        sta013WriteReg(STA_REG_PLLCTL_1,                        0xA1);

        sta013WriteReg(STA_REG_SCLK_POL,                        0x00);        // data sampled on rising edge

        sta013WriteReg(STA_REG_REQ_POL,                                0x01);        // REQ line active high

        sta013WriteReg(STA_REG_DATA_REQ_ENABLE,                0x04);

        sta013WriteReg(STA_REG_PLLCTL_1,                        0xA1);

出0入0汤圆

发表于 2006-6-18 02:45:19 | 显示全部楼层
LS配置没问题. 可能还是你的数据速度不够. frame信息在STA013的FRAME_HEADER里面,自己去看看.

出0入0汤圆

 楼主| 发表于 2006-6-19 12:44:31 | 显示全部楼层
我今天把板子带到公司,用示波器观查,确实是数据速度问题

另外如果MP3文件没有ID3V2信息时frame信息是文件的头4个字节,那么把发数据给STA时,它是否就把第一次发的4bytes作为frame。如果是那么MP3文件有ID3V2信息时,头4个字节并不是frame,送数据时我并没有跳过ID3,送给STA的头4个字节也就不是正确的frame,但它能正常播放,所以我还是不理解STA如何获得frame信息。请高手指点

出0入0汤圆

发表于 2006-6-19 15:37:57 | 显示全部楼层
STA013内部包含高速DSP,会自动寻找有效的frame 去解码,这个你可以不管.

出0入0汤圆

发表于 2006-6-19 16:53:27 | 显示全部楼层
MP3中每个帧都包含帧的码率、采样率、帧长、压缩方式等信息。0xfff是MP3的帧同步信号,STA013找到这个后读出下面的字节获取帧信息,如果是正确的,则解码该帧,否则跳过并寻找下一个0xfff。

出0入0汤圆

发表于 2006-6-19 19:28:28 | 显示全部楼层
我的测试结果:在8MHz使用硬件SPI读SD卡,播放256kbps的文件完全没问题.在16MHZ晶体下,任何文件都没问题.但是STA013支持格式只有MP3,MP2都没办法播放,所以拷贝文件时候要小心(MP2文件后缀还是mp3).



PS: SD卡文件系统: fat16 or fat32

出0入0汤圆

 楼主| 发表于 2006-6-19 19:53:01 | 显示全部楼层
我用是M16L的内部振荡,设为8M,今天用示波器看了,与STA013连接的CLK做得不是很好脉宽有小的是1us,长的十几us。晚上修正一下,看192K能否正常



PS:SD卡文件系统是FAT12

出0入0汤圆

 楼主| 发表于 2006-6-19 21:15:36 | 显示全部楼层
最高码率见下可以播放了

(图片不知如何贴)

MPEG-1 Layer 3

44100 Hz

16 Bits

247 Kbps (VBR)



主要更改sta013.c

void sta013SendToDecode(uint8 data)

{

        int8 i;

       

        for(i=7; i>=0; i--)

        {

                cbi(sta_SCLKR_port, sta_SCLKR_bit);

               

                if(data & (1 << 7))

                //if((data >> i) & 1) 改成上一句

                     sbi(sta_SDI_port, sta_SDI_bit);

                else

                     cbi(sta_SDI_port, sta_SDI_bit);

                data <<= 1;   //增加这一句

                sbi(sta_SCLKR_port, sta_SCLKR_bit);

                

        }

}

出0入0汤圆

 楼主| 发表于 2006-6-19 21:26:01 | 显示全部楼层
解译一下上面说的“最高码率”是指电脑里的music,那位提供高点的,让我试试

各位高手还有什么建议?同时谢谢elefan and qwernet

出0入0汤圆

发表于 2006-6-19 22:45:18 | 显示全部楼层
晕,MP3自己可以做个啊! 要什么样的速度都可以.

出0入0汤圆

 楼主| 发表于 2006-6-21 10:23:59 | 显示全部楼层
MP3自己可以做个啊! 要什么样的速度都可以.  

elefan能否说明白,我对MP3仅仅刚入门,怎么做?

出0入0汤圆

发表于 2006-6-21 13:38:26 | 显示全部楼层
用EAC(Exact Audio Copy: 专用CD音频抓轨软件,很专业)抓一个CD音频文件,格式为WAV.最后用专用MP3音频编码器: lame 进行MP3编码,编码采样率和比特率可以自己定义了.



另外解释:



比特率: 指MP3数据流的位速,MP3有CBR和VBR之分



采样率: 指编码的时候对音频文件采样的速率,采样率越高,对文件还原越有好处了.最常见的是44Khz和48Khz

出0入0汤圆

 楼主| 发表于 2006-6-22 12:38:11 | 显示全部楼层
不好意思,你说的是MP3文件,我理解错了

出0入0汤圆

发表于 2006-9-24 14:22:15 | 显示全部楼层
MP3文件是按什么方式存储的,它的最小数据单元是多少,比如说头文件中的同步位是12个bit,是单独按两个字节来存呢还是说在两个字节中存够12个bit然后剩下的接着存后面的诸如ID 比特和layer 比特等等,如果读取的话应该怎么读。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-28 05:42

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

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