标签归档:音频

Synthesiser类群详解 3-3

事实上,开发采样器程序时,很少直接操作SynthesiserSound和SynthesiserVoice这两个类,大多数时候,使用Synthesiser合成器类添加它们的对象即可完成任务。

Synthesiser相当于多个SynthesiserVoice和多个SynthesiserSound的容器,即:本类持有两个数组,一个用来保存SynthesiserVoice类的指针(堆对象),一个用来保存SynthesiserSound类的指针(堆对象)。内部使这两个类协同配合,产生本类所需的音频数据和相关信息。

继续阅读Synthesiser类群详解 3-3

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详解