声波通信(SinVoice)代码解读(一) 如何产生给定频率的声音

本文介绍了开源项目SinVoice中如何利用C++生成特定频率的声音。通过解析SinGenerator类的gen方法,重点讨论了采样率、频率生成原理,以及声音持续时间的计算。通过对sin()函数的应用,解释了如何调整参数per来控制声音频率,并通过采样率计算每个频率声音的持续时间。
摘要由CSDN通过智能技术生成

开头的话

最近打算用c++重写开源项目SinVoice,但是对于一些细节还是把握得不大好,因此我正在好好学习相关的内容,这里把学习过程中的一些心得体会分享出来,希望对关注声波通信的朋友们带来帮助。

点击进入SinVoice项目主页

本科在校学生,如果过程中有错误希望大家能绅士的指出,谢谢

如何产生给定频率的声音

这一篇我主要想说明在sinvoice里面声音是如何产生的,暂时没有关注整个系统的工作流程。

首先我们要了解一些背景知识
采样率:不多讲,对于本次内容来说,简单说来就是一秒钟系统发出多少次声音
我们需要明白声音的其实就是正弦波,我们用软件生成给定频率的声音,实际上就是生成一个给定频率的正弦波,既然是正弦波,那么肯定要让它先变高,再变低,给定的一系列数值在坐标轴上画出来的话肯定是跟正弦波的样子类似的。

熟悉这个项目的朋友肯定知道,要知道如何产生给定频率的声音,我们应该关注的类是 SinGenerator 这个类,而在这个类中的,我们应该关注的方法则是 public void gen(int genRate, int duration)这个方法。下面给出代码。

注意:为了更好的着眼于局部而非整个系统的流程,我删除并且修改了一些与本文无关的代码,这些代码是跟整个系统流程相关的,对于声音如何产生则无关紧要。

public static void gen()
    {
        int mGenRate = 1500;//声音的频率,单位Hz
        int mDuration = 50;//这个频率的声音持续时间,单位ms
        int n=
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值