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); } } }
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; }
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(); }