AudioProcessor类群详解 5-3

AudioProcessorGraph是AudioProcessor的直接派生类之一,可添加并连接一到多个AudioProcessor(甚至可以添加本类的另一个对象),而后集中产生最终的音频流。所添加的每个AudioProcessor,可以是程序内部的音频处理模块(AudioProcessor的派生类的对象),也可以是外部的音频插件或MIDI音源。也就是说,本类相当于一个元素为AudioProcessor的数据容器。

继续阅读AudioProcessor类群详解 5-3

AsyncUpdater(异步更新)

AsyncUpdater(异步更新)是一个抽象基类,用于触发一个异步回调。本类可将多个触发信号集中到一起,在适当的时机进行统一回调。即:触发异步更新后,所回调的代码并不一定立即执行,而是由主线程根据实际情况在稍后的某个空闲时间里进行回调。使用本类可避免同步更新时有可能出现的消息阻塞等问题。

JUCE类库中的一大批重要的类均继承自AsyncUpdater,比如Desktop、ComboBox、MenubarModel、AudioProcessorGraph等等。

继续阅读AsyncUpdater(异步更新)

AudioProcessor类群详解 5-1

本小节所涉及的类可用于(但不限于)开发音频(DSP)插件、软件滤波器(效果器)、音频及语音信号处理、MIDI软音源、软件合成器、软采样器、程序内部的音频和MIDI处理模块(内部效果器),等等。并可使应用程序具有插件宿主、插件管理、信号路由等功能。主要涉及到以下类(结构体):

继续阅读AudioProcessor类群详解 5-1

AudioDeviceManager详解

AudioDeviceManager可称为JUCE音频系统中最重要的功能类。该类用来管理音频驱动和MIDI接口(二者通称为音频设备),实现播放、录音、MIDI进出等重要功能。

通常,应创建本类的全局实例,并通过手工代码或AudioDeviceSelectorComponent设置当前所用的音频驱动、音频进出端口、采样率、缓冲大小和MIDI进出端口。当所选择的设备发生变化时,本类的实例可自动关联所选的新设备,并且不会中断有关回调函数的持续执行。当前所有设置可保存为XmlElement对象,并基于所保存的XML数据重新加载先前的设置,这一点非常实用。

继续阅读AudioDeviceManager详解

AudioIODeviceCallback详解

抽象基类,本类被AudioIODevice类的start()函数内部调用,可将程序内部的音频数据连续不断的发送到AudioIODevice,并可获取AudioIODevice输入端口的录音数据。该类是实现音频播放和录制的最核心环节。播放方面通常利用AudioDeviceManager类的有关函数和本类的派生类来实现。AudioIODeviceCallback有三个派生类:

AudioIODeviceCallback

图 3 13 AudioIODeviceCallback及其派生类

而音频录音,则需自定义AudioIODeviceCallback的派生类,实现其3个纯虚函数。其中最核心的函数为:

继续阅读AudioIODeviceCallback详解

AudioIODevice详解

AudioIODevice是一个抽象基类,代表某个具体的音频驱动(音频设备),可视之为最终实现音频播放的声卡输出端口和用于录音的声卡输入端口 。通常不直接使用本类,而是用AudioDeviceManager类来管理和设置当前可用的本类对象,或者使用AudioIODeviceType类来创建本类对象。

继续阅读AudioIODevice详解

AudioIODeviceType详解

抽象基类,代表音频驱动的具体类型,比如:DirectSound、ASIO、CoreAudio等等。可使用AudioDeviceManager::createAudioDeviceTypes()获取本机可用的所有音频驱动的类型。还可直接创建基于某个驱动类型的AudioIODevice,或者创建本机所有可用的音频驱动类型所对应的AudioIODevice音频设备。这么说起来太绕,直接上代码:
继续阅读AudioIODeviceType详解