Christopher SnowhillUpdated credits with my legal name.74414b99 years agoHistory
174 lines · 5.1 KB · C
RawDownload
/*  _______         ____    __         ___    ___ * \    _  \       \    /  \  /       \   \  /   /       '   '  ' *  |  | \  \       |  |    ||         |   \/   |         .      . *  |  |  |  |      |  |    ||         ||\  /|  | *  |  |  |  |      |  |    ||         || \/ |  |         '  '  ' *  |  |  |  |      |  |    ||         ||    |  |         .      . *  |  |_/  /        \  \__//          ||    |  | * /_______/ynamic    \____/niversal  /__\  /____\usic   /|  .  . ibliotheque *                                                      /  \ *                                                     / .  \ * ptmeffect.c - Code for converting PTM              / / \  \ *               effects to IT effects.              | <  /   \_ *                                                   |  \/ /\   / * By Christopher Snowhill. Based on xmeffect.c       \_  /  > / * by Julien Cugniere.                                  | \ / / *                                                      |  ' / *                                                       \__/ */ #include <stdlib.h>#include <string.h> #include "dumb.h"#include "internal/it.h" void _dumb_it_ptm_convert_effect(int effect, int value, IT_ENTRY *entry) {    if (effect >= PTM_N_EFFECTS)        return;     /* Linearisation of the effect number... */    if (effect == PTM_E) {        effect = PTM_EBASE + HIGH(value);        value = LOW(value);    }     /* convert effect */    entry->mask |= IT_ENTRY_EFFECT;    switch (effect) {     case PTM_APPREGIO:        effect = IT_ARPEGGIO;        break;    case PTM_PORTAMENTO_UP:        effect = IT_PORTAMENTO_UP;        break;    case PTM_PORTAMENTO_DOWN:        effect = IT_PORTAMENTO_DOWN;        break;    case PTM_TONE_PORTAMENTO:        effect = IT_TONE_PORTAMENTO;        break;    case PTM_VIBRATO:        effect = IT_VIBRATO;        break;    case PTM_VOLSLIDE_TONEPORTA:        effect = IT_VOLSLIDE_TONEPORTA;        break;    case PTM_VOLSLIDE_VIBRATO:        effect = IT_VOLSLIDE_VIBRATO;        break;    case PTM_TREMOLO:        effect = IT_TREMOLO;        break;    case PTM_SAMPLE_OFFSET:        effect = IT_SET_SAMPLE_OFFSET;        break;    case PTM_VOLUME_SLIDE:        effect = IT_VOLUME_SLIDE;        break;    case PTM_POSITION_JUMP:        effect = IT_JUMP_TO_ORDER;        break;    case PTM_SET_CHANNEL_VOLUME:        effect = IT_SET_CHANNEL_VOLUME;        break;    case PTM_PATTERN_BREAK:        effect = IT_BREAK_TO_ROW;        break;    case PTM_SET_GLOBAL_VOLUME:        effect = IT_SET_GLOBAL_VOLUME;        break;    case PTM_RETRIGGER:        effect = IT_RETRIGGER_NOTE;        break;    case PTM_FINE_VIBRATO:        effect = IT_FINE_VIBRATO;        break;     /* TODO properly */    case PTM_NOTE_SLIDE_UP:        effect = IT_PTM_NOTE_SLIDE_UP;        break;    case PTM_NOTE_SLIDE_DOWN:        effect = IT_PTM_NOTE_SLIDE_DOWN;        break;    case PTM_NOTE_SLIDE_UP_RETRIG:        effect = IT_PTM_NOTE_SLIDE_UP_RETRIG;        break;    case PTM_NOTE_SLIDE_DOWN_RETRIG:        effect = IT_PTM_NOTE_SLIDE_DOWN_RETRIG;        break;     case PTM_SET_TEMPO_BPM:        effect = (value < 0x20) ? (IT_SET_SPEED) : (IT_SET_SONG_TEMPO);        break;     case PTM_EBASE + PTM_E_SET_FINETUNE:        effect = SBASE + IT_S_FINETUNE;        break; /** TODO */    case PTM_EBASE + PTM_E_SET_LOOP:        effect = SBASE + IT_S_PATTERN_LOOP;        break;    case PTM_EBASE + PTM_E_NOTE_CUT:        effect = SBASE + IT_S_DELAYED_NOTE_CUT;        break;    case PTM_EBASE + PTM_E_NOTE_DELAY:        effect = SBASE + IT_S_NOTE_DELAY;        break;    case PTM_EBASE + PTM_E_PATTERN_DELAY:        effect = SBASE + IT_S_PATTERN_DELAY;        break;    case PTM_EBASE + PTM_E_SET_PANNING:        effect = SBASE + IT_S_SET_PAN;        break;     case PTM_EBASE + PTM_E_FINE_VOLSLIDE_UP:        effect = IT_VOLUME_SLIDE;        value = EFFECT_VALUE(value, 0xF);        break;     case PTM_EBASE + PTM_E_FINE_VOLSLIDE_DOWN:        effect = IT_VOLUME_SLIDE;        value = EFFECT_VALUE(0xF, value);        break;     case PTM_EBASE + PTM_E_FINE_PORTA_UP:        effect = IT_PORTAMENTO_UP;        value = EFFECT_VALUE(0xF, value);        break;     case PTM_EBASE + PTM_E_FINE_PORTA_DOWN:        effect = IT_PORTAMENTO_DOWN;        value = EFFECT_VALUE(0xF, value);        break;     case PTM_EBASE + PTM_E_RETRIG_NOTE:        effect = IT_XM_RETRIGGER_NOTE;        value = EFFECT_VALUE(0, value);        break;     case PTM_EBASE + PTM_E_SET_VIBRATO_CONTROL:        effect = SBASE + IT_S_SET_VIBRATO_WAVEFORM;        value &= ~4; /** TODO: value&4 -> don't retrig wave */        break;     case PTM_EBASE + PTM_E_SET_TREMOLO_CONTROL:        effect = SBASE + IT_S_SET_TREMOLO_WAVEFORM;        value &= ~4; /** TODO: value&4 -> don't retrig wave */        break;     default:        /* user effect (often used in demos for synchronisation) */        entry->mask &= ~IT_ENTRY_EFFECT;    }     /* Inverse linearisation... */    if (effect >= SBASE && effect < SBASE + 16) {        value = EFFECT_VALUE(effect - SBASE, value);        effect = IT_S;    }     entry->effect = effect;    entry->effectvalue = value;}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t