do_effects.c 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. #include "do_effects.h"
  2. #include <furi.h>
  3. void do_command(uint16_t opcode, TrackerEngine *tracker_engine, uint8_t channel)
  4. {
  5. TrackerEngineChannel *te_channel = &tracker_engine->channel[channel];
  6. SoundEngineChannel *se_channel = &tracker_engine->sound_engine->channel[channel];
  7. UNUSED(se_channel);
  8. switch (opcode & 0x7f00)
  9. {
  10. case TE_EFFECT_PORTAMENTO_UP:
  11. {
  12. uint32_t prev = te_channel->note;
  13. te_channel->note += ((opcode & 0xff) << 2);
  14. if (prev > te_channel->note)
  15. te_channel->note = 0xffff;
  16. te_channel->target_note = te_channel->note;
  17. break;
  18. }
  19. case TE_EFFECT_PORTAMENTO_DOWN:
  20. {
  21. int32_t prev = te_channel->note;
  22. te_channel->note -= ((opcode & 0xff) << 2);
  23. if (prev < te_channel->note)
  24. te_channel->note = 0;
  25. te_channel->target_note = te_channel->note;
  26. break;
  27. }
  28. default:
  29. break;
  30. }
  31. }