OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4787|回复: 4

如何将采集到的麦克风信号保存为wav的文件啊

[复制链接]

15

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2015-2-17
在线时间
3 小时
发表于 2015-12-30 08:10:14 来自手机 | 显示全部楼层 |阅读模式
如何将采集到的麦克风信号保存为wav的文件啊

如何播放任何格式的音频文件   求指导
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2015-12-30 09:22:33 | 显示全部楼层
WAV有文件格式的,文件头+数据区,把数据按照WAV的文件格式要求写入存储器即可。播放音乐需要了解相应音乐的文件储存格式,同时需要相应的解码器,将音乐解码成为PCM或DSD类的相应数据流,通过相应的传输接口给DAC芯片进行播放。MP3,WAV,FLAC,APE应该都是开源的。
回复 支持 反对

使用道具 举报

15

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2015-2-17
在线时间
3 小时
 楼主| 发表于 2016-1-14 10:08:00 | 显示全部楼层
ricefat 发表于 2015-12-30 09:22
WAV有文件格式的,文件头+数据区,把数据按照WAV的文件格式要求写入存储器即可。播放音乐需要了解相应音乐 ...

我现在是这么写的  在单片机上能够播放 在windows上  提示我的文件损坏
回复 支持 反对

使用道具 举报

15

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2015-2-17
在线时间
3 小时
 楼主| 发表于 2016-1-14 10:09:45 | 显示全部楼层
[mw_shl_code=c,true]//初始化WAV头.
void recoder_wav_init( WaveHeader* wavhead) //初始化WAV头                          
{
        wavhead->ChunkID = 0X46464952;                                        //"RIFF"
        wavhead->ChunkSize = 0;                                                        //还未确定,最后需要计算
        wavhead->Format = 0X45564157;                                         //"WAVE"
        wavhead->SubChunk1ID = 0X20746D66;                                 //"fmt "
        wavhead->SubChunk1Size = 16;                                         //大小为16个字节
        wavhead->AudioFormat = 0X01;                                         //0X01,表示PCM;0X01,表示IMA ADPCM
        wavhead->NumChannels = 2;                                                //单声道
        wavhead->SampleRate =  44100;                                        //8Khz采样率 采样速率
        wavhead->ByteRate = wavhead->SampleRate*2*wavhead->NumChannels;                //字节速率=采样率*通道数*(ADC位数/8)
        wavhead->BlockAlign = 4;                                                //块大小=通道数*(ADC位数/8)
        wavhead->BitsPerSample = 16;                                        //16位PCM
           wavhead->SubChunk2ID = 0X61746164;                                //"data"
        wavhead->SubChunk1Size = 0;                                                //数据大小,还需要计算  
} [/mw_shl_code]

在最后对
Wavhead->ChunkSize = wavize+36;
        Wavhead->SubChunk1Size = wavize;
        Wavhead->SubChunk2Size = wavize; 进行了修改  可是在电脑上依然报错 这是为什么呢
回复 支持 反对

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2016-1-14 10:54:36 | 显示全部楼层
叶念西风 发表于 2016-1-14 10:09
[mw_shl_code=c,true]//初始化WAV头.
void recoder_wav_init( WaveHeader* wavhead) //初始化WAV头                          
...

用ultraedit或是其他工具打开windows可以正常播放的wav文件比对下文件头
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-14 19:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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