1*05767d91SRobert Wu /* 2*05767d91SRobert Wu * Copyright 2018 The Android Open Source Project 3*05767d91SRobert Wu * 4*05767d91SRobert Wu * Licensed under the Apache License, Version 2.0 (the "License"); 5*05767d91SRobert Wu * you may not use this file except in compliance with the License. 6*05767d91SRobert Wu * You may obtain a copy of the License at 7*05767d91SRobert Wu * 8*05767d91SRobert Wu * http://www.apache.org/licenses/LICENSE-2.0 9*05767d91SRobert Wu * 10*05767d91SRobert Wu * Unless required by applicable law or agreed to in writing, software 11*05767d91SRobert Wu * distributed under the License is distributed on an "AS IS" BASIS, 12*05767d91SRobert Wu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*05767d91SRobert Wu * See the License for the specific language governing permissions and 14*05767d91SRobert Wu * limitations under the License. 15*05767d91SRobert Wu */ 16*05767d91SRobert Wu 17*05767d91SRobert Wu #ifndef SHARED_MONOTOSTEREO_H 18*05767d91SRobert Wu #define SHARED_MONOTOSTEREO_H 19*05767d91SRobert Wu 20*05767d91SRobert Wu #include "IRenderableAudio.h" 21*05767d91SRobert Wu 22*05767d91SRobert Wu 23*05767d91SRobert Wu class MonoToStereo : public IRenderableAudio { 24*05767d91SRobert Wu 25*05767d91SRobert Wu public: 26*05767d91SRobert Wu MonoToStereo(IRenderableAudio * input)27*05767d91SRobert Wu MonoToStereo(IRenderableAudio *input) : mInput(input){}; 28*05767d91SRobert Wu renderAudio(float * audioData,int32_t numFrames)29*05767d91SRobert Wu void renderAudio(float *audioData, int32_t numFrames) override { 30*05767d91SRobert Wu 31*05767d91SRobert Wu constexpr int kChannelCountStereo = 2; 32*05767d91SRobert Wu 33*05767d91SRobert Wu mInput->renderAudio(audioData, numFrames); 34*05767d91SRobert Wu 35*05767d91SRobert Wu // We assume that audioData has sufficient frames to hold the stereo output, so copy each 36*05767d91SRobert Wu // frame in the input to the output twice, working our way backwards through the input array 37*05767d91SRobert Wu // e.g. 123 => 112233 38*05767d91SRobert Wu for (int i = numFrames - 1; i >= 0; --i) { 39*05767d91SRobert Wu 40*05767d91SRobert Wu audioData[i * kChannelCountStereo] = audioData[i]; 41*05767d91SRobert Wu audioData[i * kChannelCountStereo + 1] = audioData[i]; 42*05767d91SRobert Wu } 43*05767d91SRobert Wu } 44*05767d91SRobert Wu 45*05767d91SRobert Wu IRenderableAudio *mInput; 46*05767d91SRobert Wu }; 47*05767d91SRobert Wu 48*05767d91SRobert Wu 49*05767d91SRobert Wu #endif //SHARED_MONOTOSTEREO_H 50