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(); }
AbstractAudioDataOutput::AbstractAudioDataOutput() : MediaNode(*new AbstractAudioDataOutputPrivate) { K_D(AbstractAudioDataOutput); d->isRunning = false; d->allowedFormats << AudioFormat(); }
void ResamplerTest::performDownsampling(Resampler &resampler) { AudioBuffer tmpInputBuffer(TMP_HIGHSMPLR_BUFFER_LENGTH, AudioFormat(16000, 1)); AudioBuffer tmpOutputBuffer(TMP_LOWSMPLR_BUFFER_LENGTH, AudioFormat::MONO()); for (size_t i = 0, j = 0; i < inputBuffer.frames(); i += tmpInputBuffer.frames(), j += tmpOutputBuffer.frames()) { tmpInputBuffer.copy(inputBuffer, i); resampler.resample(tmpInputBuffer, tmpOutputBuffer); outputBuffer.copy(tmpOutputBuffer, -1, 0, j); } }
void sAudioFormat::BuildRecordingFormat() { WAVEFORMATEX& rFormat = AudioFormat(); rFormat.wFormatTag = WAVE_FORMAT_PCM; rFormat.wBitsPerSample = static_cast<WORD>(m_iBitsPerSample); rFormat.nSamplesPerSec = m_iSamplesPerSeconds; rFormat.nChannels = static_cast<WORD>(m_iNumChannels); rFormat.nBlockAlign = rFormat.nChannels * (rFormat.wBitsPerSample/8); rFormat.nAvgBytesPerSec = rFormat.nSamplesPerSec * rFormat.nBlockAlign; rFormat.cbSize = 0; }
FlacDecoder::FlacDecoder(IDataSourceRef ds_) : IDecoder(AudioFormat()) , ds(ds_) { dcerr("New Flac Decoder"); try_decode = true; FLAC__StreamDecoderInitStatus stat = init(); //FIXME: If !stat etc... bufptr = NULL; process_single(); if (bufptr == NULL) throw Exception("Invalid flac stream"); try_decode = false; eos = false; }
void AudioCaptureDevice::SetPalDevice (MoonCaptureDevice *device) { CaptureDevice::SetPalDevice (device); MoonAudioCaptureDevice *audio_device = (MoonAudioCaptureDevice*)device; AudioFormatCollection *col = MoonUnmanagedFactory::CreateAudioFormatCollection (); int num_formats; MoonAudioFormat **formats = audio_device->GetSupportedFormats (&num_formats); for (int i = 0; i < num_formats; i ++) col->Add (Value (AudioFormat (formats[i]))); SetSupportedFormats (col); col->unref (); SetFriendlyName (audio_device->GetFriendlyName()); }
void ResamplerTest::testUpsamplingTriangle() { generateTriangularSignal(); std::cout << "Test Upsampling Triangle" << std::endl; Resampler resampler(44100); performUpsampling(resampler); AudioBuffer tmpInputBuffer(TMP_LOWSMPLR_BUFFER_LENGTH, AudioFormat::MONO()); AudioBuffer tmpOutputBuffer(TMP_HIGHSMPLR_BUFFER_LENGTH, AudioFormat(16000, 1)); tmpInputBuffer.copy(inputBuffer); std::cout << "Input Buffer" << std::endl; print_buffer(*tmpInputBuffer.getChannel(0)); tmpOutputBuffer.copy(outputBuffer); std::cout << "Output Buffer" << std::endl; print_buffer(*tmpOutputBuffer.getChannel(0)); }
void ResamplerTest::testUpsamplingRamp() { // generate input samples and store them in inputBuffer generateRamp(); std::cout << "Test Upsampling Ramp" << std::endl; Resampler resampler(44100); performUpsampling(resampler); AudioBuffer tmpInputBuffer(TMP_LOWSMPLR_BUFFER_LENGTH, AudioFormat::MONO()); AudioBuffer tmpOutputBuffer(TMP_HIGHSMPLR_BUFFER_LENGTH, AudioFormat(16000, 1)); tmpInputBuffer.copy(inputBuffer); std::cout << "Input Buffer" << std::endl; print_buffer(*tmpInputBuffer.getChannel(0)); tmpOutputBuffer.copy(outputBuffer); std::cout << "Output Buffer" << std::endl; print_buffer(*tmpOutputBuffer.getChannel(0)); }
bool convertTo(const AudioFormat& other) { if (format == other) return true; if (!conv) { qWarning("must call AudioFrame::setAudioResampler"); return false; } conv->setInAudioFormat(format); conv->setOutAudioFormat(other); conv->setInSampesPerChannel(samples_per_ch); //TODO if (!conv->convert((const quint8**)planes.data())) { format = AudioFormat(); //invalid format return false; } format = other; data = conv->outData(); samples_per_ch = conv->outSamplesPerChannel(); // TODO: setBytesPerLine(), setBits() compute here or from resampler? line_sizes.resize(format.planeCount()); planes.resize(format.planeCount()); }
/** * 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_); }
AudioFormat AbstractAudioDevice::getAudioFormat() const { if(m_impl) return m_impl->getAudioFormat(); return AudioFormat(); }