870920 Menu

AudioSource之ToneGeneratorAudioSource

AudioSource的各个派生类实现了基类的3个纯虚函数。这3个函数在不同的派生类中有不同的实际意义,但处理逻辑与流程完全一致。日常使用,可参照这些本质一致但表现迥然不同、功能五花八门的派生类定制自己的派生类,甚至派生类的子类。从某种意义上说,JUCE原生的这几个AudioSource派生类,除本身的实用价值外,更具有示范和启发的作用。藉此,可彻底打开程序员的思路,在DSP、音频编程等方面变得更加灵活柔韧,花样百出。由此也可看出,AudioSource这个抽象基类及其派生出的整个类系,架构、设计的非常精巧高明。这一点,值得所有C++程序员学习、揣摩。

AudioSource原生的各个派生类根据自身的职责,新增了一些功能性成员函数。有些派生类,需组合其他AudioSource对象,即:AudioSource的各个派生类之间,充满了交互与协同,使AudioSource的灵活性和功能倍增。

ToneGeneratorAudioSource
ToneGeneratorAudioSource可生成不同振幅和振动频率的正弦波信号(音调),其成员函数为:
 setAmplitude () 设置信号的振幅
 setFrequency () 设置信号的频率
 prepareToPlay () 准备生成正弦波(设置所生成的音频数据的采样率)
 releaseResources () 停止生成正弦波
 getNextAudioBlock () 基于频率和振幅,生成正弦波信号

默认情况下,ToneGeneratorAudioSource所生成的正弦波信号的频率为1KHz,采样率44100Hz,相位0°,振幅50%。在其继承的prepareToPlay()函数中可设置采样率。看一下该类继承并实现的getNextAudioBlock()函数(生成正弦波信号。还记得学DSP时做的第一个基础练习吗?看看这个经典的正弦波生成算法,与课本上的有何不同):