Beispiel #1
0
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;
}
Beispiel #2
0
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");
};
Beispiel #3
0
Datei: IO.cpp Projekt: cran/rtk
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();

}