Module::Holder::Ptr CreateModule(const Parameters::Accessor& params, const Binary::Container& rawData, Parameters::Container::Ptr properties) const override { try { PropertiesHelper props(*properties); DataBuilder dataBuilder(props); if (const Formats::Chiptune::Container::Ptr container = Formats::Chiptune::SPC::Parse(rawData, dataBuilder)) { const SPC::Ptr tune = MakePtr<SPC>(rawData); props.SetSource(*container); props.SetFramesFrequency(50); const Time::Milliseconds duration = dataBuilder.GetDuration(params); const Time::Milliseconds period = Time::Milliseconds(20); const uint_t frames = duration.Get() / period.Get(); const Information::Ptr info = CreateStreamInfo(frames); return MakePtr<Holder>(tune, info, properties); } } catch (const std::exception& e) { Dbg("Failed to create SPC: %s", e.what()); } return Module::Holder::Ptr(); }
Holder(Model::Ptr data, Parameters::Accessor::Ptr props) : Data(std::move(data)) , Info(CreateStreamInfo(Data->FramesCount)) , Properties(std::move(props)) { }