Path: blob/master/RSDKv5/RSDK/Audio/Oboe/OboeAudioDevice.cpp
1177 views
uint8 AudioDevice::contextInitialized;1oboe::Result AudioDevice::status = oboe::Result::OK;2oboe::AudioStream *AudioDevice::stream;3pthread_mutex_t AudioDevice::mutex;45// REAL LINE I WROTE6AudioDevice *AudioDevice::audioDevice;78bool AudioDevice::createStream() {9oboe::AudioStreamBuilder builder;1011builder.setSampleRate(AUDIO_FREQUENCY)12->setFormat(oboe::AudioFormat::Float)13->setChannelCount(AUDIO_CHANNELS)14->setBufferCapacityInFrames(MIX_BUFFER_SIZE)15->setPerformanceMode(oboe::PerformanceMode::LowLatency)16->setDataCallback(audioDevice)17->setErrorCallback(audioDevice);1819oboe::Result result = builder.openStream(&stream);20if (result != oboe::Result::OK) {21PrintLog(PRINT_NORMAL, "Oboe: Failed to open stream: (%s)", convertToText(result));22return false;23}24return true;25}2627bool AudioDevice::shutdownStream() {28if (stream->getState() != oboe::StreamState::Closed) {29stream->stop();30oboe::Result result = stream->close();31if (result != oboe::Result::OK) {32PrintLog(PRINT_NORMAL, "Oboe: Failed to shutdown stream: (%s)", convertToText(result));33return false;34}35}36return true;37}3839bool32 AudioDevice::Init()40{41if (!contextInitialized) {42contextInitialized = true;43InitAudioChannels();44audioDevice = new AudioDevice();45}4647if (!createStream())48return false;4950stream->requestStart();51return true;52}5354void AudioDevice::InitAudioChannels()55{56pthread_mutex_init(&mutex, NULL);5758AudioDeviceBase::InitAudioChannels();59}6061oboe::DataCallbackResult AudioDevice::onAudioReady(oboe::AudioStream *s, void *data, int32 len)62{63if (s != stream)64return oboe::DataCallbackResult::Stop;6566LockAudioDevice();67AudioDevice::ProcessAudioMixing(data, len * AUDIO_CHANNELS);68UnlockAudioDevice();6970return oboe::DataCallbackResult::Continue;71}7273void AudioDevice::onErrorAfterClose(oboe::AudioStream *s, oboe::Result error) {74LockAudioDevice();75if (error == oboe::Result::ErrorDisconnected) {76// Clean up and create a new audio stream77shutdownStream();78createStream();79stream->requestStart();80}81UnlockAudioDevice();82}8384void AudioDevice::Release()85{86LockAudioDevice();87shutdownStream();88UnlockAudioDevice();89AudioDeviceBase::Release();90pthread_mutex_destroy(&mutex);91delete audioDevice;92};9394void AudioDevice::FrameInit()95{96if (status != oboe::Result::OK) {97stream->requestStop();98stream->close();99Init();100}101};102103void AudioDevice::HandleStreamLoad(ChannelInfo *channel, bool32 async)104{105if (async) {106pthread_t loadThread;107pthread_create(&loadThread, NULL, LoadStreamASync, channel);108}109else110LoadStream(channel);111};112113