Exemplo n.º 1
0
 Renderer(Model::Ptr data, StateIterator::Ptr iterator, Sound::Receiver::Ptr target, Parameters::Accessor::Ptr params)
   : Tune(std::move(data))
   , Iterator(std::move(iterator))
   , State(Iterator->GetStateObserver())
   , Analyzer(Module::CreateSoundAnalyzer())
   , SoundParams(Sound::RenderParameters::Create(std::move(params)))
   , Target(std::move(target))
   , Looped()
 {
   ApplyParameters();
 }
Exemplo n.º 2
0
 Renderer(SPC::Ptr tune, StateIterator::Ptr iterator, Sound::Receiver::Ptr target, Parameters::Accessor::Ptr params)
   : Tune(std::move(tune))
   , Iterator(std::move(iterator))
   , State(Iterator->GetStateObserver())
   , SoundParams(Sound::RenderParameters::Create(std::move(params)))
   , Target(std::move(target))
   , Looped()
   , SamplesPerFrame()
 {
   ApplyParameters();
 }
Exemplo n.º 3
0
    bool RenderFrame() override
    {
      try
      {
        ApplyParameters();

        Sound::ChunkBuilder builder;
        builder.Reserve(SamplesPerFrame);
        Tune->Render(SamplesPerFrame, builder);
        Resampler->ApplyData(builder.CaptureResult());
        Iterator->NextFrame(Looped);
        return Iterator->IsValid();
      }
      catch (const std::exception&)
      {
        return false;
      }
    }
Exemplo n.º 4
0
    bool RenderFrame() override
    {
      static_assert(Sound::Sample::BITS == 16, "Incompatible sound bits count");

      try
      {
        ApplyParameters();

        Sound::ChunkBuilder builder;
        builder.Reserve(SamplesPerFrame);
        Engine->play(safe_ptr_cast<short*>(builder.Allocate(SamplesPerFrame)), SamplesPerFrame * Sound::Sample::CHANNELS);
        Target->ApplyData(builder.CaptureResult());
        Iterator->NextFrame(Looped);
        return Iterator->IsValid();
      }
      catch (const std::exception&)
      {
        return false;
      }
    }
Exemplo n.º 5
0
    bool RenderFrame() override
    {
      try
      {
        ApplyParameters();

        auto frame = Tune.RenderFrame();
        Analyzer->AddSoundData(frame);
        Resampler->ApplyData(std::move(frame));
        Iterator->NextFrame(Looped);
        if (0 == State->Frame())
        {
          Tune.Seek(0);
        }
        return Iterator->IsValid();
      }
      catch (const std::exception&)
      {
        return false;
      }
    }
Exemplo n.º 6
0
 Renderer(TunePtr tune, StateIterator::Ptr iterator, Sound::Receiver::Ptr target, Parameters::Accessor::Ptr params)
   : Tune(std::move(tune))
   , Engine(std::make_shared<sidplayfp>())
   , Builder("resid")
   , Iterator(std::move(iterator))
   , State(Iterator->GetStateObserver())
   , Analysis(MakePtr<Analyzer>(Engine))
   , Target(std::move(target))
   , Params(params)
   , SoundParams(Sound::RenderParameters::Create(params))
   , Config(Engine->config())
   , UseFilter()
   , Looped()
   , SamplesPerFrame()
 {
   LoadRoms(*params);
   const uint_t chipsCount = Engine->info().maxsids();
   Builder.create(chipsCount);
   Config.frequency = 0;
   ApplyParameters();
   CheckSidplayError(Engine->load(Tune.get()));
 }