Example #1
0
void AudioEngine::mixAudio(Uint8 *pDestBuffer, int destBufferLen)
{
    int numFrames = destBufferLen/(2*getChannels()); // 16 bit samples.

    if (m_AudioSources.size() == 0) {
        return;
    }
    if (!m_pTempBuffer || m_pTempBuffer->getNumFrames() < numFrames) {
        if (m_pTempBuffer) {
            delete[] m_pMixBuffer;
        }
        m_pTempBuffer = AudioBufferPtr(new AudioBuffer(numFrames, m_AP));
        m_pMixBuffer = new float[getChannels()*numFrames];
    }

    for (int i = 0; i < getChannels()*numFrames; ++i) {
        m_pMixBuffer[i]=0;
    }
    {
        lock_guard lock(m_Mutex);
        AudioSourceMap::iterator it;
        for (it = m_AudioSources.begin(); it != m_AudioSources.end(); it++) {
            m_pTempBuffer->clear();
            it->second->fillAudioBuffer(m_pTempBuffer);
            addBuffers(m_pMixBuffer, m_pTempBuffer);
        }
    }
    calcVolume(m_pMixBuffer, numFrames*getChannels(), getVolume());
    for (int i = 0; i < numFrames; ++i) {
        m_pLimiter->process(m_pMixBuffer+i*getChannels());
        for (int j = 0; j < getChannels(); ++j) {
            ((short*)pDestBuffer)[i*2+j]=short(m_pMixBuffer[i*2+j]*32768);
        }
    }
}
Example #2
0
int USBRequest::request(libusb_context* ctx, USBDevice *device, unsigned char endpoint, size_t request_bytes) {
	std::cout << "Request start" << std::endl;
	bytes = request_bytes;
	mDevice = device;
	err = 0;
	done = 0;
	ep = endpoint;
	addBuffers();
	while(!done) {
		libusb_handle_events_completed(ctx, &done);
	}
	std::cout << "Remaining: " << bytes << std::endl;
	if(err != 0) {
		std::cout << "Erreur" << std::endl;
	}
	return err;
}
Example #3
0
void USBRequest::receive(USBBuffer *buffer) {
	std::unique_lock<std::mutex> lock(mMutex);
	bytes += buffer->getLength();
	if(buffer->getStatus() == LIBUSB_TRANSFER_COMPLETED) {
		//std::cout << "Receive " << buffer->getActualLength() << std::endl;
		bytes -= buffer->getActualLength();
		/*int tt = buffer->getActualLength();
		unsigned char * bb = buffer->getBuffer();
		std::cout << *((unsigned short*)bb) << " " << (int)bb[tt-3] << 
		" " << *((unsigned short*)(bb + tt - 2)) << std::endl; */
	} else {
		std::cout << "Error " << buffer->getStatus() << " with buffer 0x" << buffer << std::endl;
	}
	processing_buffers.remove(buffer);
	idle_buffers.push_back(buffer);
	addBuffers();
	//mCond.notify_all();
}