Example #1
0
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();
}
Example #3
0
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);
    }
}
Example #4
0
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;
}
Example #5
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;

}
Example #6
0
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());
}
Example #7
0
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));
}
Example #8
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));
}
Example #9
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());
 }
Example #10
0
/**
 * 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_);
}
Example #11
0
 AudioFormat AbstractAudioDevice::getAudioFormat() const
 {
     if(m_impl)
         return m_impl->getAudioFormat();
     return AudioFormat();
 }