示例#1
0
文件: Talk.cpp 项目: Amos-zq/marsyas
void Talk::cmd_play(mrs_natural start, mrs_natural end, mrs_natural lineSize)
{
  communicator_->send_message("From Server: Play command received\n");



  src_->updControl("mrs_natural/pos", (mrs_natural)start * lineSize);
  src_->updControl("mrs_natural/inSamples", lineSize);



  Series *series = new Series("playbacknet");
  series->addMarSystem(src_);
  series->addMarSystem(dest_);


  series->updControl("AudioSink/dest/mrs_natural/nChannels",
                     series->getctrl("SoundFileSource/src/mrs_natural/nChannels")->to<mrs_natural>());
  for (int i=0; i < end-start; ++i)
  {
    series->tick();
    // communicator_->send_message("tick\n");
  }

}
示例#2
0
文件: Talk.cpp 项目: Amos-zq/marsyas
void
Talk::cmd_load(mrs_string fname, mrs_natural lineSize)
{
  cout << "cmd_load called" << endl;

  src_ = new SoundFileSource("src");
  src_->updControl("mrs_string/filename", fname);
  fname_ = fname;
  src_->updControl("mrs_natural/inSamples", lineSize);
  AbsMax* absmax = new AbsMax("absmax");

  Series *series = new Series("plot");
  series->addMarSystem(src_);
  series->addMarSystem(absmax);


  mrs_natural hops = src_->getctrl("mrs_natural/size")->to<mrs_natural>() * src_->getctrl("mrs_natural/nChannels")->to<mrs_natural>() / src_->getctrl("mrs_natural/inSamples")->to<mrs_natural>() + 1;


  Accumulator* acc = new Accumulator("acc");
  acc->updControl("mrs_natural/nTimes", hops);
  acc->addMarSystem(series);



  realvec in(acc->getctrl("mrs_natural/inObservations")->to<mrs_natural>(),
             acc->getctrl("mrs_natural/inSamples")->to<mrs_natural>());

  realvec out(acc->getctrl("mrs_natural/onObservations")->to<mrs_natural>(),
              acc->getctrl("mrs_natural/onSamples")->to<mrs_natural>());



  acc->process(in,out);

  out.send(communicator_);



//   Util util;
//   fname_ = fname;
//   src_ = util.sfopen(fname, MRS_SF_READ);
//   if (src_ == NULL)
//     cout << "src_ = NULL" << endl;

//   if (src_ != NULL)			// File exists
//     {
//       src_->initWindow(lineSize, lineSize, 0, 0);
//       PlotExtractor pextractor(src_, src_->winSize());
//       fvec res(src_->iterations());
//       pextractor.extract(0, src_->iterations(), res);
//       res.send(communicator_);
//     }
//   else
//     {
//       fvec res(0);
//       res.send(communicator_);
//     }
}
示例#3
0
文件: ERB.cpp 项目: Amos-zq/marsyas
void
ERB::myUpdate(MarControlPtr sender)
{
  (void) sender;  //suppress warning of unused parameter(s)
  MRSDIAG("ERB.cpp - ERB:myUpdate");

  //FilterBank creation
  if (numChannels != getctrl("mrs_natural/numChannels")->to<mrs_natural>()) {
    numChannels = getctrl("mrs_natural/numChannels")->to<mrs_natural>();
    if (filterBank) delete filterBank;
    filterBank = new Fanout("filterBank");
    stringstream name;
    for(mrs_natural i = 0; i < numChannels; ++i) {
      name << "channel_" << i;
      Series* channel = new Series(name.str());
      name.str("");
      name << "filter_" << i << "_" << 0;
      Filter* filter_0 = new Filter(name.str());
      name.str("");
      name << "filter_" << i << "_" << 1;
      Filter* filter_1 = new Filter(name.str());
      name.str("");
      name << "filter_" << i << "_" << 2;
      Filter* filter_2 = new Filter(name.str());
      name.str("");
      name << "filter_" << i << "_" << 3;
      Filter* filter_3 = new Filter(name.str());
      name.str("");
      channel->addMarSystem(filter_0);
      channel->addMarSystem(filter_1);
      channel->addMarSystem(filter_2);
      channel->addMarSystem(filter_3);
      filterBank->addMarSystem(channel);
    }
    centerFreqs.create(numChannels);
    fcoefs.create(numChannels, 10);
  }

  setctrl("mrs_natural/onSamples", getctrl("mrs_natural/inSamples"));
  setctrl("mrs_natural/onObservations", numChannels*getctrl("mrs_natural/inObservations")->to<mrs_natural>());
  setctrl("mrs_real/osrate", getctrl("mrs_real/israte"));

  //Coefficients computation
  lowFreq = getctrl("mrs_real/lowFreq")->to<mrs_real>();
  fs = getctrl("mrs_real/israte")->to<mrs_real>();
  highFreq = fs/2;
  EarQ = 9.26449f;
  minBW = 24.7f;
  order = 1;

  for (mrs_natural i = 0; i < numChannels; ++i) {
    centerFreqs(i) = - (EarQ*minBW) + exp((i+1)*(-log(highFreq+EarQ*minBW) + log(lowFreq+EarQ*minBW))/numChannels)*(highFreq + EarQ*minBW);
  }

  A0 = 1/fs;
  A2 = 0.0f;
  B0 = 1.0f;

  for (mrs_natural i = 0; i < numChannels; ++i) {
    fcoefs(i,0) = A0;
    fcoefs(i,1) = A11(centerFreqs(i), B(E(centerFreqs(i))));
    fcoefs(i,2) = A12(centerFreqs(i), B(E(centerFreqs(i))));
    fcoefs(i,3) = A13(centerFreqs(i), B(E(centerFreqs(i))));
    fcoefs(i,4) = A14(centerFreqs(i), B(E(centerFreqs(i))));
    fcoefs(i,5) = A2;
    fcoefs(i,6) = B0;
    fcoefs(i,7) = B1(centerFreqs(i), B(E(centerFreqs(i))));
    fcoefs(i,8) = B2( B(E(centerFreqs(i))));
    fcoefs(i,9) = gain(centerFreqs(i), B(E(centerFreqs(i))));
  }

  //Controls update
  stringstream channel,filter,ctrl;
  realvec b(1,3),a(1,3);
  channel << "Series/channel_0/";
  ctrl << channel.str() << "mrs_natural/inSamples";
  filterBank->setctrl(ctrl.str(), getctrl("mrs_natural/inSamples"));
  ctrl.str("");
  ctrl << channel.str() << "mrs_natural/inObservations";
  filterBank->setctrl(ctrl.str(), getctrl("mrs_natural/inObservations"));
  ctrl.str("");
  ctrl << channel.str() << "mrs_natural/onObservations";
  filterBank->setctrl(ctrl.str(), getctrl("mrs_natural/inObservations"));
  ctrl.str("");
  ctrl << channel.str() << "mrs_real/israte";
  filterBank->setctrl(ctrl.str(), getctrl("mrs_real/israte"));
  for(mrs_natural i = 0; i < numChannels; ++i) {
    //filter 0
    channel.str("");
    channel << "Series/channel_" << i << "/";
    filter.str("");
    filter << channel.str() << "Filter/filter_" << i << "_" << 0 << "/";
    ctrl.str("");
    ctrl << filter.str() << "mrs_natural/inSamples";
    filterBank->setctrl(ctrl.str(), getctrl("mrs_natural/inSamples"));
    ctrl.str("");
    ctrl << filter.str() << "mrs_natural/inObservations";
    filterBank->setctrl(ctrl.str(), getctrl("mrs_natural/inObservations"));
    ctrl.str("");
    ctrl << filter.str() << "mrs_natural/onObservations";
    filterBank->setctrl(ctrl.str(), getctrl("mrs_natural/inObservations"));
    ctrl.str("");
    ctrl << filter.str() << "mrs_real/israte";
    filterBank->setctrl(ctrl.str(), getctrl("mrs_real/israte"));
    a(0) = fcoefs(i,6);
    a(1) = fcoefs(i,7);
    a(2) = fcoefs(i,8);
    b(0) = fcoefs(i,0)/fcoefs(i,9);
    b(1) = fcoefs(i,1)/fcoefs(i,9);
    b(2) = fcoefs(i,5)/fcoefs(i,9);
    ctrl.str("");
    ctrl << filter.str() << "mrs_realvec/ncoeffs";
    filterBank->setctrl(ctrl.str(), b);
    ctrl.str("");
    ctrl << filter.str() << "mrs_realvec/dcoeffs";
    filterBank->setctrl(ctrl.str(), a);
    //filter 1
    filter.str("");
    filter << channel.str() << "Filter/filter_" << i << "_" << 1 << "/";
    a(0) = fcoefs(i,6);
    a(1) = fcoefs(i,7);
    a(2) = fcoefs(i,8);
    b(0) = fcoefs(i,0);
    b(1) = fcoefs(i,2);
    b(2) = fcoefs(i,5);
    ctrl.str("");
    ctrl << filter.str() << "mrs_realvec/ncoeffs";
    filterBank->setctrl(ctrl.str(), b);
    ctrl.str("");
    ctrl << filter.str() << "mrs_realvec/dcoeffs";
    filterBank->setctrl(ctrl.str(), a);
    //filter 2
    filter.str("");
    filter << channel.str() << "Filter/filter_" << i << "_" << 2 << "/";
    a(0) = fcoefs(i,6);
    a(1) = fcoefs(i,7);
    a(2) = fcoefs(i,8);
    b(0) = fcoefs(i,0);
    b(1) = fcoefs(i,3);
    b(2) = fcoefs(i,5);
    ctrl.str("");
    ctrl << filter.str() << "mrs_realvec/ncoeffs";
    filterBank->setctrl(ctrl.str(), b);
    ctrl.str("");
    ctrl << filter.str() << "mrs_realvec/dcoeffs";
    filterBank->setctrl(ctrl.str(), a);
    //filter 3
    filter.str("");
    filter << channel.str() << "Filter/filter_" << i << "_" << 3 << "/";
    a(0) = fcoefs(i,6);
    a(1) = fcoefs(i,7);
    a(2) = fcoefs(i,8);
    b(0) = fcoefs(i,0);
    b(1) = fcoefs(i,4);
    b(2) = fcoefs(i,5);
    ctrl.str("");
    ctrl << filter.str() << "mrs_realvec/ncoeffs";
    filterBank->setctrl(ctrl.str(), b);
    ctrl.str("");
    ctrl << filter.str() << "mrs_realvec/dcoeffs";
    filterBank->setctrl(ctrl.str(), a);
  }
  //update the whole filter bank
  filterBank->update();
}