AudioSource之IIRFilterAudioSource

IIRFilterAudioSource可对另一个AudioSource所产生的音频流进行IIR滤波处理(IIR:Infinite Impulse Response,无限脉冲响应。递归型结构,带有反馈环路。非线性相位,幅频精度较高)。即:它修改另一个AudioSource所产生的数据,修改后的数据由本类直接输出。这一点遵循上面归纳的第3种情况。

IIRFilterAudioSource的构造函数
 IIRFilterAudioSource (AudioSource来源, 1参是否由本类托管)

该类只新增了一个成员函数:
 setFilterParameters (const IIRFilter& newSettings) 设置滤波器参数。可多次调用此函数,设置不同的滤波参数

继续阅读AudioSource之IIRFilterAudioSource

ChannelRemappingAudioSource

整个AudioSource类系的本质是产生新的音频流,所产生的音频流数据保存到getNextAudioBlock()的引用型参数中。这些类所产生的音频流有两个来源:一是从无到有,凭空产生。比如ToneGeneratorAudioSource,不依赖任何外部数据,自己创建出全新的正弦波音频流。二是基于另一个或另一些AudioSource所产生的音频流,进一步加工处理,而后产生新的音频流。比如MixerAudioSource,另一些AudioSource添加给该类后,该类进行混合,而后产生混合后的全新音频流。

继续阅读ChannelRemappingAudioSource

AudioSource之MixerAudioSource(混音)

MixerAudioSource可将其他一或多个AudioSource合而为一,混合后作为一个单独的AudioSource集中输出,即:本类所产生的音频流为其他一或多个AudioSource的混合数据。成员函数有:

  • addInputSource () 将某个AudioSource添加到本类,可设置是否托管之
  • removeInputSource () 移除已经添加的某个AudioSource
  • removeAllInputs () 移除所有已经添加的AudioSource
  • prepareToPlay () 准备混合,内部调用所有输入源的prepareToPlay()
  • releaseResources () 结束混合,内部调用所有输入源的releaseResources()
  • getNextAudioBlock () 混合所有输入源,生成混合型音频流,设置采样率

继续阅读AudioSource之MixerAudioSource(混音)

AudioSource之ToneGeneratorAudioSource

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

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

继续阅读AudioSource之ToneGeneratorAudioSource

JUCE音频核心— AudioSource类系

AudioSource是一个抽象基类,其派生类构成了JUCE音频系统“两大支柱”中的其一(另一支柱为AudioProcessor类群)。AudioSource类的派生层次为:

  • ChannelRemappingAudioSource 通道重映射
  • IIRFilterAudioSource IIR滤波处理
  • MixerAudioSource 音频混合
  • ResamplingAudioSource 重采样处理
  • ReverbAudioSource 混响处理
  • ToneGeneratorAudioSource 生成有音高的正弦波(音调)
  • PositionableAudioSource 可定位的音频来源
    • AudioFormatReaderSource 音频格式读取器
    • AudioTransportSource 音频传输(中转)
    • BufferingAudioSource 可缓冲的AudioSource
表 3 9 AudioSource类系层次图

继续阅读JUCE音频核心— AudioSource类系

JUCE音频之基—其他重要的底层核心

在对音频数据进行读写和处理时,还有一个底层环节非常重要:对不同音频格式的采样数据进行转换。通常,程序员无需动用这些底层的“低级类”。但是,如果把JUCE作为第三方库添加到已有的音视频项目中,或对第三方音视频库进行改写,或将第三方音视频库嵌入JUCE项目中,这些类的作用就至关重要,不可或缺。

实现这一功能依赖于下面几个类模板和嵌套类。

继续阅读JUCE音频之基—其他重要的底层核心

JUCE音频之基—AudioSampleBuffer类

音频功能是JUCE的立库之本,也是其最核心的部分。其中,核心中的核心,非AudioSampleBuffer类莫属。该类是一个临时存放音频采样的缓冲区,音频数据的进出读写、操纵处理皆在此区中完成。它的本质是一个二维数组,float**类型。换个角度理解,缓冲区作为一种临时性的数据容器,相当于一个不断刷新、先进先出的“队列”。

继续阅读JUCE音频之基—AudioSampleBuffer类