int PortAudioLayer::paInputCallback(const void *inputBuffer, void *outputBuffer, unsigned long framesPerBuffer, const PaStreamCallbackTimeInfo* timeInfo, PaStreamCallbackFlags statusFlags, void *userData) { (void) outputBuffer; (void) timeInfo; (void) statusFlags; auto ref = (PortAudioLayer*)userData; auto in = (AudioSample*)inputBuffer; if (framesPerBuffer == 0) { RING_WARN("No frames for input."); return paContinue; } const auto mainBufferFormat = Manager::instance().getRingBufferPool().getInternalAudioFormat(); bool resample = ref->audioInputFormat_.sample_rate != mainBufferFormat.sample_rate; AudioBuffer inBuff(framesPerBuffer, ref->audioInputFormat_); inBuff.deinterleave(in, framesPerBuffer, ref->audioInputFormat_.nb_channels); inBuff.applyGain(ref->isCaptureMuted_ ? 0.0 : ref->captureGain_); if (resample) { auto outSamples = framesPerBuffer / (static_cast<double>(ref->audioInputFormat_.sample_rate) / mainBufferFormat.sample_rate); AudioBuffer out(outSamples, mainBufferFormat); ref->inputResampler_->resample(inBuff, out); ref->dcblocker_.process(out); ref->mainRingBuffer_->put(out); } else { ref->dcblocker_.process(inBuff); ref->mainRingBuffer_->put(inBuff); } return paContinue; }
Status Carver::carve(const boost::filesystem::path& path) { PlatformFile src(path.string(), PF_OPEN_EXISTING | PF_READ); PlatformFile dst((carveDir_ / path.leaf()).string(), PF_CREATE_NEW | PF_WRITE); if (!dst.isValid()) { return Status(1, "Destination tmp FS is not valid."); } auto blkCount = ceil(static_cast<double>(src.size()) / static_cast<double>(FLAGS_carver_block_size)); std::vector<char> inBuff(FLAGS_carver_block_size, 0); for (size_t i = 0; i < blkCount; i++) { inBuff.clear(); auto bytesRead = src.read(inBuff.data(), FLAGS_carver_block_size); auto bytesWritten = dst.write(inBuff.data(), bytesRead); if (bytesWritten < 0) { return Status(1, "Error writing bytes to tmp fs"); } } return Status(0, "Ok"); };
void reassembleTmpMat(vector<string> inF, vector< string > rowNames, vector< string > colNames, string outF){ // takes the vectors from printSimpleMap and constrcust a mat from them // first open all inF streams // iterate through and write line for line if(inF.size() == 0){ #ifdef notRpackage std::exit(99); #endif } vector<std::ifstream*> inFs(inF.size()); for(uint i = 0; i < inFs.size(); i++){ std::ifstream* f = new std::ifstream(inF[i].c_str(), std::ios::in | std::ios::binary); // create in free store inFs[i] = f; inFs[i]->close(); } ofstream out(outF.c_str()); if (!out){ #ifdef notRpackage cerr << "Couldn't open tmpvec file " << outF << endl; std::exit(99); #endif } out << "Rarefied"; for(uint i = 0; i < colNames.size(); i++){ out << '\t' << colNames[i]; } out << '\n'; string a; uint j = 0; // bufer for 1000 rows uint bj = 0; const uint bn = 1000; std::vector<vector< uint > > inBuff(bn, std::vector<uint>(inFs.size() ) ); while(j < rowNames.size()){ // fill buffer: for(uint i = 0; i < inFs.size(); i++){ uint value; inFs[i]->open(inF[i].c_str(), std::ios::in | std::ios::binary); long int offset = j * sizeof(value); inFs[i]->seekg(offset, ios_base::beg ); bj = 0; while((*inFs[i]) && bj < bn ){ inFs[i]->read(reinterpret_cast<char*>(&value), sizeof(value)); inBuff[bj][i] = value; bj++; } inFs[i]->close(); } // write buffers to file for(uint ij = 0; ij < bj && j+ij < rowNames.size(); ij++){ out << rowNames[j + ij]; for(uint i = 0; i < inFs.size(); i++){ out << '\t' << inBuff[ij][i]; } out << '\n'; } j = j + bj; } out.close(); }