简单语音报时钟简介
电路:
1.jpg (13.39 KB, 下载次数: 22)
下载附件
2013-9-14 11:19 上传
功能:
启动后从00:00开始每分钟报时一次
(没有调节时间功能)
注意:
音频文件为16K8位采样,采用1位增量调制方式压缩,增量为5
改变DLT可调节音量
通过PWM输出,P1.3接喇叭再接1000uF电容到GND即可
晶振为12MHz
简单增量调制算法简介
压缩:
For i = Pstart To Pend
If FileBin(i) > vol Then
b1 = 1
vol = vol + dlt
Else
b1 = 0
vol = vol - dlt
End If
d = ((d * 2) And &HFF) Or b1 '得数据
If vol > 255 Then vol = 255
If vol < 0 Then vol = 0
bn = bn + 1
If bn >= 8 Then '达到8位,记录数据
bn = 0
'SFlash = SFlash & "0x" & Num2Str(d, 2) & ","
Mid(SFlash, Flen + 1, 5) = "0x" & Num2Str(d, 2) & "," '数字转为C语言16进制
......
解压:
if(wav_sw)
{
CCAP0H=(v0+vol)/2;//PWM赋值(上次与本次的平均值)
v0=vol;//记录上次的值
if(wd&BIT(7))//增量调制解码
vol+=dlt;
else
vol-=dlt;
if(vol<0)vol=0;
if(vol>255)vol=255;
wd<<=1;
bn++;
if(bn>=8)//一个字节完成
{
bn=0;
dn++;
wd=wavn[wav_ld[wav_ldp]][dn];//取WAV文件的下一字节
if(dn>=wavsize[wav_ld[wav_ldp]])//一个WAV文件完了
{
dn=0;
wav_ldp++;
if(wav_ld[wav_ldp]==0)//播放队列完了
{
wav_ldp=0;
wav_sw=0;//播放结束
}
}
}
}
这个 关于声音质量和走时精度的问题,请问懒洋洋同志照着电路试过了吗?
其实,这个例子也只是仅供娱乐,虽然音质不高,但能听懂意思;走时精度我试了几个小时也没差到1秒。
由于功耗问题,这个不适合电池供电。
若想用电池供电,那最好是用低功耗单片机(如M88),接手表晶振保证走时精度;外接SPIFLASH存储WAV文件,不需要压缩,可以保证音质。
一周热门 更多>