将16位wav转8位

wdy0725 2013-01-05 04:17:16
求助各位,谢谢!
现有16位,8k Hz, 单声道wav文件,想转成8位存储格式(线性就可以),其它参数不变。
我的方法是去掉16位中的低字节位,但是得到的输出噪音非常大,不能辨清原有声音。
请问该如何做才能实现我想要的结果?先谢谢各位啦!
...全文
778 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
iop_ 2014-06-14
  • 打赏
  • 举报
回复
用matlab进行A律压缩,再做量化,直接去掉低位对小信号影响太大 你可以百度A律压缩,简单的说就是小信号更精细,大信号粗糙一点
wdy0725 2013-01-06
  • 打赏
  • 举报
回复
谢谢楼上二位。 swq1982, 其实你的方法与我的相同,有很大噪音。 fdl19881 & 其他朋友们 请问哪里是比较专业论坛呢?谢谢!
fdl19881 2013-01-06
  • 打赏
  • 举报
回复
http://blog.csdn.net/mahushen/article/details/8213165 8位数据是无符号的整型数,如果不加处理绘制出来的图形是以0x80为中心上下波动的波形 16位、24位和32位数据都是有符号的整形数,这样的数据绘制的图形是以0值为中心上下波动的波形 所以直接除以是不行了.你将每个值变为 x/256 + 0x80 看看吧..注意自己的目的.更好的效果涉及到更专业的知识了.所以请结合自己的目的寻找最好的解决方法.
fdl19881 2013-01-06
  • 打赏
  • 举报
回复
不知道你要转换的目的是什么? 学习,还是项目开发的一部分,或者是只是为了转换成8位的wav文件? 学习的话,还是使用matlab方便,学习下时域,频域,傅立叶变换,滤波等等,这些我也忘的差不多了. 项目开发的一部分,因为这个要求高,不懂的情况下自己写出来的估计也没法用. 那就找个懂这个的人来做,或者看看有没有开源的音频处理软件.然后提取出来. 只是为了得到转换后的8位音频文件的话,,就用现成的音频处理软件处理下就得到8位的wav文件就行了. 这找了个matlab的简单16->8位的文章http://www.cnblogs.com/sleepy/archive/2011/09/29/2195984.html 语音处理属于专业问题,不是简单的计算机/软件知识问题了. 不同目的使用不同方法解决方法 
swq1982 2013-01-05
  • 打赏
  • 举报
回复
尝试一下如下: int sample = 0; // read 2 bytes (= 16 bits) from the 16 bit file into sample: fread (&sample, 2, 1, wav_file_16bit); sample /= 256; // (做归一化处理) // write 1 byte (= 8 bits) to the 8 bit file: fwrite (&sample, 1, 1, wav_file_8bit);
fdl19881 2013-01-05
  • 打赏
  • 举报
回复
这种问题找已经成熟的算法, 想研究就多试难吧,,最近邻插值,双线性插值等等。还有滤波,降噪算法。找个专业的地方看。

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧