3786|7

19

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

请问大侠们S3C44b0x 音频代码中wav文件下载的问题 [复制链接]

各位好!
在S3C44b0x中IIS音频代码模块中下载wav文件源码中有几个语句小弟我不明白怎么回事,请帮忙解答,谢谢!

如下:
//中断入口内容不可确定,不要用中断
void LoadFromUart(void)
{
int i, size;
unsigned short dnCS, CheckSum;
unsigned char *buf;
unsigned char RxTmp[8];
void (*fun)();

download_addr = DFT_DOWNLOAD_ADDR;

buf = (unsigned char *)download_addr;

printf("Now download file from uart0 to 0x%x...\n", download_addr);

i = 0;
while(i<4)
  RxTmp[i++] = getch();                                // 这里得到的是RIFF?  
                                                                     //我查看wav文件格式,前4字节为RIFF,后4字节才是文件长度,是怎么回事呢?
i = 0;
    size = *(unsigned long *)RxTmp - 4;         //这里我没搞明白怎么回事,是想得到文件大小吗,跟下面的download_len区别在哪里呢?
while(i<size)
  buf[i++] = getch();                                      //我的问题出在这里,size值非常大(1179011406),i++循环总不能大于它,所以一直死在这

//里了.....

download_len = size-2;                                //为什么size-2呢?

dnCS = (buf[size-1]<<8)|buf[size-2];
CheckSum = 0;
for(size -= 3; size>=0; size--)
  CheckSum += buf[size];
if(dnCS!=CheckSum) {
  puts("\nCheckSum error!\n");
  download_len = 0;
} else {
  printf("\nReceived %x bytes success\n", download_len);
  puts("Do you want to run it?");
  if(getyorn()) {
   fun = (void(*)(void))download_addr;  
   CacheDisable();
   CacheFlush();
   (*fun)();
  }
}

return;
}
此帖出自ARM技术论坛

最新回复

给你下载了点资料参考一下 [attach]75236[/attach]  你可以先看看协议,然后在调试  详情 回复 发表于 2011-10-30 10:19
点赞 关注
 

回复
举报

19

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
各位帮帮忙,帮我看看。。。谢谢大家啦!
此帖出自ARM技术论坛
 
 
 

回复

2131

帖子

0

TA的资源

至上芯片

板凳
 
问题你知道在 size = *(unsigned long *)RxTmp - 4;  这里为什么 不修改一下呢?
这个肯定 有问题
此帖出自ARM技术论坛
 
个人签名处处留心皆学问!
 
 

回复

19

帖子

0

TA的资源

一粒金砂(中级)

4
 

回复 板凳 daicheng 的帖子

谢谢您的提示,是不是修改成:
size = *(unsigned char*)RxTmp - 4;
可是我的疑问是,RxTmp数组前四元素总是RIFF,表示一种格式,不是文件的长度,这里为什么要这么用呢?而且这样子的话,不管文件大小,size 的值总是固定的,即使RxTmp数组的首元素R值(82-4),还是我的理解有误呢?
此帖出自ARM技术论坛
 
 
 

回复

2131

帖子

0

TA的资源

至上芯片

5
 

给你下载了点资料参考一下

wav.pdf (540.24 KB, 下载次数: 23)

 你可以先看看协议,然后在调试

此帖出自ARM技术论坛
 
个人签名处处留心皆学问!
 
 

回复

19

帖子

0

TA的资源

一粒金砂(中级)

6
 
恩,谢谢,我看了资料,同时也在百度百科上搜了下,关于wav中有这么说道,“以'RIFF'作为标示,然后紧跟着为size字段,该size是整个wav文件大小减去ID 和Size所占用的字节数,即FileLen - 8 = Size。然后是Type字段,为'WAVE' ”。按照这样子的解释,那么size = *(unsigned long *)RxTmp - 4; 是不是要改成:size = (*(unsiged long *)RxTmp+4)+(*(unsiged long *)RxTmp+5)+(*(unsiged long *)RxTmp+6)+(*(unsiged long *)RxTmp+7)-8呢,即是接收到第5、6、7、8字节文件长度-ID和Size占字节数8?
此帖出自ARM技术论坛
 
 
 

回复

19

帖子

0

TA的资源

一粒金砂(中级)

7
 
鏌ョ湅鏈笘鍏ㄩ儴璁ㄨ锛岃鐧诲綍鎴栬€�娉ㄥ唽
此帖出自ARM技术论坛
 
 
 

回复

19

帖子

0

TA的资源

一粒金砂(中级)

8
 
鏌ョ湅鏈笘鍏ㄩ儴璁ㄨ锛岃鐧诲綍鎴栬€�娉ㄥ唽
此帖出自ARM技术论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
有奖直播 | AI之眼——安森美图像传感器 报名中
直播时间:2025年4月25日(周五)上午10:00-11:30
直播主题:AI之眼——安森美图像传感器
报名观看直播、直播间提问、填写问卷均有机会获得精美礼品!

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 11

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表