void OpenSLLayer::startStream() { dcblocker_.reset(); if (isStarted_) return; DEBUG("Start OpenSL audio layer"); std::vector<int32_t> hw_infos = Manager::instance().getClient()->getConfigurationManager()->getHardwareAudioFormat(); hardwareFormat_ = AudioFormat(hw_infos[0], 1); // Mono on Android hardwareBuffSize_ = hw_infos[1]; for(auto& buf : playbackBufferStack_) buf.resize(hardwareBuffSize_); for(auto& buf : recordBufferStack_) buf.resize(hardwareBuffSize_); hardwareFormatAvailable(hardwareFormat_); std::thread launcher([this](){ init(); startAudioPlayback(); startAudioCapture(); isStarted_ = true; }); launcher.detach(); }
void PortAudioLayer::init() { RING_DBG("Init PortAudioLayer"); const auto err = Pa_Initialize(); if (err != paNoError) { this->handleError(err); this->terminate(); } indexOut_ = indexRing_ = Pa_GetDefaultOutputDevice(); indexIn_ = Pa_GetDefaultInputDevice(); if (indexOut_ != paNoDevice) { const auto outputDeviceInfo = Pa_GetDeviceInfo(indexOut_); audioFormat_.nb_channels = outputDeviceInfo->maxOutputChannels; audioFormat_.sample_rate = outputDeviceInfo->defaultSampleRate; hardwareFormatAvailable(audioFormat_); } if (indexIn_ != paNoDevice) { const auto inputDeviceInfo = Pa_GetDeviceInfo(indexIn_); audioInputFormat_.nb_channels = inputDeviceInfo->maxInputChannels; audioInputFormat_.sample_rate = inputDeviceInfo->defaultSampleRate; hardwareInputFormatAvailable(audioInputFormat_); } }
/** * Start the capture and playback. */ void JackLayer::startStream() { { std::lock_guard<std::mutex> lock(mutex_); if (status_ != Status::Idle) return; status_ = Status::Started; } dcblocker_.reset(); const auto hardwareFormat = AudioFormat(playbackBuffer_.getSampleRate(), out_ports_.size()); hardwareFormatAvailable(hardwareFormat); if (jack_activate(playbackClient_) or jack_activate(captureClient_)) { RING_ERR("Could not activate JACK client"); return; } ringbuffer_thread_ = std::thread(&JackLayer::ringbuffer_worker, this); connectPorts(playbackClient_, JackPortIsInput, out_ports_); connectPorts(captureClient_, JackPortIsOutput, in_ports_); }