870920 Menu

AudioFormatWriter类详解

AudioFormatWriter可将音频数据写入磁盘文件。该类是一个独立的抽象基类,无父类亦无子类。如同无需也无法创建对象的AudioFormatReader,本类指针也是通过其他类的成员函数来返回,比如AudioFormat的某个派生类的createWriterFor()函数,该函数一并提供输出流对象,本类将把音频数据写入此对象。

AudioFormatWriter的成员函数:
 getFormatName () 返回所代表的音频数据的格式描述
 write () 纯虚函数,将音频数据写入1参
 writeFromAudioReader () 读取AudioFormatReader,将其数据写入本类所持有的输出流对象中
 writeFromAudioSource () 读取AudioSource,将其数据写入本类所持有的输出流对象中
 writeFromSampleBuffer () 读取AudioSampleBuffer中的采样,写入输出流对象中
 getSampleRate () 返回所使用的采样率
 getNumChannels () 返回要写入的通道数
 getBitsPerSample () 返回要写入的采样精度
 isFloatingPoint () 如果是浮点格式, 则返回true

实际编程时,将音频数据写入磁盘文件往往需动用后台线程,以免阻碍主线程。此时可使用AudioFormatWriter的嵌套类:AudioFormatWriter::ThreadedWriter。该类的构造函数为:
 AudioFormatWriter::ThreadedWriter (
AudioFormatWriter* writer, // AudioFormatWriter指针
TimeSliceThread &backgroundThread, // 时间片线程对象
int numSamplesToBuffer) // 缓冲大小

AudioFormatWriter::ThreadedWriter写入音频数据的核心函数同样为write()。实时录音的代码模块,可在音频设备回调类AudioIODeviceCallback的核心函数audioDeviceIOCallback()中不停地调用此函数,从而在后台线程上将音频流数据写入磁盘文件。综合示例: