加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP实现基于文本的莫斯电码生成器

发布时间:2016-10-17 09:33:17 所属栏目:PHP教程 来源:站长网
导读:副标题#e# 介绍 我最近遇到一个基于输入文本生成摩斯代码音频文件的需求。几番搜索无果之后,我决定自己编写一个生成器。 下载源代码 2.63 KB 498)this.width=498;' onmousewheel = 'javascript:return big(this)' height="417" width="404" alt="codegen_s

WAVE是一种通用的音频格式。从最简单的形式来看,WAVE文件通过在头部包含一个整数序列来表示指定采样率的音频振幅。关于WAVE文件的详细信息请查看这里Audio File Format Specifications website。 对于产生莫斯代码,我们并不需要用到WAVE格式的所有参数选项,仅仅需要一个8位的单声道就可以了,所以,so easy。需要注意的是,多字节数据需要采用低位优先(little-endian)的字节顺序。WAVE文件使用一种由叫做“块(chunks)”的记 录组成的RIFF格式。

WAVE文件由一个ASCII标识符RIFF开始,紧跟着一个4字节的“块”,然后是一个包含ASCII字符WAVE的头信息,最后是定义格式的数据和声音数据。

在我们的程序中,第一个“块”包含了一个格式说明符,它由ASCII字符fmt和一个4倍字节的“块”。在这里,由于我使用的是普通脉冲编码调制 (plain vanilla PCM)格式,所以每个“块”都是16字节。然后,我们还需要这些数据:声道数、声音采样/秒、平均字节/秒、一个区块(block)对齐指示器、位 (bit)/声音采样。另外,由于我们不需要高质量立体声,我们只采用单声道,我们使用 11050采样/秒(标准的CD质量音频的采样率是 44200 采样/秒)的采样率来生成声音,并且用8位(bit)保存。

最后,真实的音频数据储存在接下来的“块”中。其中包含ASCII字符data,一个4字节的“块”,最后是由字节序列(因为我们采用的是8位(bit)/采样)组成的真实音频数据。

在程序中,由8位音频振幅序列组成的声音保存在变量$soundstr中。一旦音频数据生成完毕,就可以计算出所有的“块”大小,然后就可以把它们 合并在一起写入磁盘文件中。下面的代码展示了如何生成头信息和音频“块”。需要注意的是,$riffstr表示RIFF头,$fmtstr表示“块”格 式,$soundstr表示音频数据“块”。

  1. $riffstr = 'RIFF'.$NSizeStr.'WAVE'; 
  2. $x = SAMPLERATE; 
  3. $SampRateStr = ''; 
  4. for ($i=0; $i<4; $i++) { 
  5.   $SampRateStr .= chr($x % 256); 
  6.   $x = floor($x/256); 
  7.   } 
  8. $fmtstr = 'fmt '.chr(16).chr(0).chr(0).chr(0).chr(1).chr(0).chr(1).chr(0) 
  9.           .$SampRateStr.$SampRateStr.chr(1).chr(0).chr(8).chr(0); 
  10. $x = $n; 
  11. $NSampStr = ''; 
  12. for ($i=0; $i<4; $i++) { 
  13.   $NSampStr .= chr($x % 256); 
  14.   $x = floor($x/256); 
  15.   } 
  16. $soundstr = 'data'.$NSampStr.$soundstr; 

总结和评论

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读