/* * Copyright 2018 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef OBOE_LIVEEFFECTENGINE_H #define OBOE_LIVEEFFECTENGINE_H #include #include #include #include #include "FullDuplexPass.h" class LiveEffectEngine : public oboe::AudioStreamCallback { public: LiveEffectEngine(); void setRecordingDeviceId(int32_t deviceId); void setPlaybackDeviceId(int32_t deviceId); /** * @param isOn * @return true if it succeeds */ bool setEffectOn(bool isOn); /* * oboe::AudioStreamDataCallback interface implementation */ oboe::DataCallbackResult onAudioReady(oboe::AudioStream *oboeStream, void *audioData, int32_t numFrames) override; /* * oboe::AudioStreamErrorCallback interface implementation */ void onErrorBeforeClose(oboe::AudioStream *oboeStream, oboe::Result error) override; void onErrorAfterClose(oboe::AudioStream *oboeStream, oboe::Result error) override; bool setAudioApi(oboe::AudioApi); bool isAAudioSupported(void); private: FullDuplexPass mFullDuplexPass; bool mIsEffectOn = false; int32_t mRecordingDeviceId = oboe::kUnspecified; int32_t mPlaybackDeviceId = oboe::kUnspecified; const oboe::AudioFormat mFormat = oboe::AudioFormat::Float; // for easier processing oboe::AudioApi mAudioApi = oboe::AudioApi::AAudio; int32_t mSampleRate = oboe::kUnspecified; const int32_t mInputChannelCount = oboe::ChannelCount::Stereo; const int32_t mOutputChannelCount = oboe::ChannelCount::Stereo; std::shared_ptr mRecordingStream; std::shared_ptr mPlayStream; oboe::Result openStreams(); void closeStreams(); void closeStream(std::shared_ptr &stream); oboe::AudioStreamBuilder *setupCommonStreamParameters( oboe::AudioStreamBuilder *builder); oboe::AudioStreamBuilder *setupRecordingStreamParameters( oboe::AudioStreamBuilder *builder, int32_t sampleRate); oboe::AudioStreamBuilder *setupPlaybackStreamParameters( oboe::AudioStreamBuilder *builder); void warnIfNotLowLatency(std::shared_ptr &stream); }; #endif // OBOE_LIVEEFFECTENGINE_H