开头的话
最近打算用c++重写开源项目SinVoice,但是对于一些细节还是把握得不大好,因此我正在好好学习相关的内容,这里把学习过程中的一些心得体会分享出来,希望对关注声波通信的朋友们带来帮助。
本科在校学生,如果过程中有错误希望大家能绅士的指出,谢谢
如何产生给定频率的声音
这一篇我主要想说明在sinvoice里面声音是如何产生的,暂时没有关注整个系统的工作流程。
首先我们要了解一些背景知识
采样率:不多讲,对于本次内容来说,简单说来就是一秒钟系统发出多少次声音
我们需要明白声音的其实就是正弦波,我们用软件生成给定频率的声音,实际上就是生成一个给定频率的正弦波,既然是正弦波,那么肯定要让它先变高,再变低,给定的一系列数值在坐标轴上画出来的话肯定是跟正弦波的样子类似的。
熟悉这个项目的朋友肯定知道,要知道如何产生给定频率的声音,我们应该关注的类是 SinGenerator 这个类,而在这个类中的,我们应该关注的方法则是 public void gen(int genRate, int duration)这个方法。下面给出代码。
注意:为了更好的着眼于局部而非整个系统的流程,我删除并且修改了一些与本文无关的代码,这些代码是跟整个系统流程相关的,对于声音如何产生则无关紧要。
public static void gen()
{
int mGenRate = 1500;//声音的频率,单位Hz
int mDuration = 50;//这个频率的声音持续时间,单位ms
int n=