添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

这里就不再一一赘述,反正就是 高性能,低延迟

2. Oboe 播放音频

与AudioTrack 一样,Oboe只支持PCM文件。需将各种音频文件解码后,再写入Oboe,才能播放声音。

有点微妙的是,相比AudioTrack,Oboe显得更加主动。

AudioTrack实现音频播放时,它不会跟你沟通,有什么要播放的,你扔给它就是。

Oboe实现音频播放时,它会一直在问你,有什么要播放的,有,你就给我,没有,等下再来问你。

OnAudioReady是 Oboe 提供的音频播放回调方法,正如上文说的,想要播放什么内容,就往 audioData 里填充,然后 Oboe 就会播出相应的声音。

正是这样,Oboe才显得更加的灵活,比如,播放到中途,静音一段时间。

将 *audioData 填满0,就表示静音了。

DataCallbackResult
AudioEngine::onAudioReady(AudioStream *oboeStream, void *audioData, int32_t numFrames) {
    if() {
        //正常播放,从pcm文件获取numFrames大小的数据塞进*audioData,即可播放音频。
    } else {
        memset(audioData, 0, sizeof(float) * numFrames * mChannelCount);
    return DataCallbackResult::Continue;

基于项目需求,再综合这点点微妙的感觉,Oboe 音频播放的方案如图

1. DataSource

主要功能是解码各种音频文件,解码成PCM文件并存储在FileTrack里
AAssetDataSource 表示数据来源于 Android Assect文件目录
StorageDataSource 表示数据来源 文件系统

2. IRenderableAudio

这里只看FileTrack,其他的先按下不表。它持有pcm,随时可以读写。

3. AudioStreamCallback

AudioStreamCallback类是Oboe提供的,需要继承并实现其 onAudioReady 方法。如前面静音的例子那般,实现后往 audioData 填pcm数据后即可播放声音。
AudioEngline就是实现各种音频操作的关键。诸如音效,音量,混音,静音等等。

那么,接下来就是真正的混音介绍了。卖个关子,下回分解。

分类:
Android
标签: