Mercurial > hg > dmlib
view minijss/jssplr.h @ 2576:812b16ee49db
I had been living under apparent false impression that "realfft.c"
on which the FFT implementation in DMLIB was basically copied from
was released in public domain at some point, but it could very well
be that it never was. Correct license is (or seems to be) GNU GPL.
Thus I removing the code from DMLIB, and profusely apologize to the
author, Philip Van Baren.
It was never my intention to distribute code based on his original
work under a more liberal license than originally intended.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Fri, 11 Mar 2022 16:32:50 +0200 |
parents | ffa540ec354d |
children | 9807ae37ad69 |
line wrap: on
line source
/* * miniJSS - Module playing routines * Programmed and designed by Matti 'ccr' Hamalainen * (C) Copyright 2006-2015 Tecnic Software productions (TNSP) */ #ifndef JSSPLR_H #define JSSPLR_H #include "jss.h" #include "jssmod.h" #include "jssmix.h" #ifdef __cplusplus extern "C" { #endif // Player general constants #define mpMinVol (0) #define mpMaxVol (64) #define mpPanCenter (0) //#define mpMaxFadeoutVol (65535) #define mpMaxFadeoutVol (32767) // Channel New-Data flags #define cdfNONE (0x000) // Set nothing #define cdfNewInstr (0x001) // Set a new instrument #define cdfNewPitch (0x002) // Set a new pitch #define cdfNewPos (0x004) // Set a new position #define cdfNewVolume (0x008) // Set a new volume #define cdfNewPanPos (0x010) // Set a new panning position #define cdfNewGlobalVol (0x020) // Set a new global volume #define cdfNewFreq (0x040) // New frequency #define cdfPlay (0x100) // Start or restart playing sample #define cdfStop (0x200) // Stop channel playing // Player envelope data typedef struct { int frame, value; BOOL exec; } JSSPlayerEnvelope; typedef struct { int pos, speed, depth, wc; } JSSPlayerVData; // Player channel structure typedef struct { JSSPlayerEnvelope volumeEnv, panningEnv; JSSPlayerVData vibrato, tremolo; BOOL keyOff; JSSInstrument *instrument; // Instrument JSSExtInstrument *extInstrument; // ExtInstrument int ninstrument, nextInstrument, note, // Current note pitch, // Pitch (NOT actual frequency!) freq, cfreq, oldPitch, oldNote, position, // Sample position volume, cvolume, // Volume panning, // Panning position newDataFlags, // New data flags fadeOutVol, iCAutoVib_Frame, iCLastFineVolumeslideUpParam, iCLastFineVolumeslideDownParam, iCLastExtraFinePortamentoUpParam, iCLastExtraFinePortamentoDownParam, iCLastFinePortamentoUpParam, iCLastFinePortamentoDownParam, iPatLoopRow, // Pattern loop start row iPatLoopCount, // Pattern loop count iLastPortaParam, // Last portamento effect parameter iLastPortaToNoteParam, // Last porta-to-note parameter iLastPortaToNotePitch, // Last porta-to-note pitch lastPortaToNoteNote, iLastTremorParam, iTremorCount, iLastSampleOffset, iLastVolSlideParam, lastMultiRetrigParamX, lastMultiRetrigParamY, lastSampleOffsetParam, iSaveNDFlags; // For notedelay-effect } JSSPlayerChannel; // Struct holding all player related information typedef struct _JSSPlayer { // General variables int tempo, // Current values speed, tick, order, npattern, row, globalVol, options; // Playing option flags BOOL isPlaying; // Are we playing? int newOrder, // NEW order number newRow; // NEW row number BOOL newOrderSet, // TRUE if new order has been set newRowSet; // TRUE if new row has been set int patternDelay, // Pattern delay tick-counter lastPatLoopRow; // Latest set pattern loop row (any channel) BOOL jumpFlag, // Pattern jump flag breakFlag; // Pattern break flag // All channels for this player // int nchannels; JSSPlayerChannel channels[jsetNChannels]; // Module and sounddevice specific JSSModule *module; // Current module in this player JSSPattern *pattern; // Current pattern JSSMixer *device; // Pointer to mixing device structure #ifdef JSS_SUP_THREADS DMMutex *mutex; #endif } JSSPlayer; /* External functions for end users */ int jmpPlayOrder(JSSPlayer *plr, int order); int jmpChangeOrder(JSSPlayer *plr, int order); int jmpPlayPattern(JSSPlayer *plr, int pattern); void jmpStop(JSSPlayer *plr); void jmpResume(JSSPlayer *plr); void jmpSetModule(JSSPlayer *plr, JSSModule *module); JSSPlayer * jmpInit(JSSMixer *mixer); int jmpClose(JSSPlayer *plr); void jmpExec(void *dev, void *plr); /* Helper macros */ #define JMPMAKEPARAM(AIVAL, AVALX, AVALY) { AVALX = (((AIVAL) >> 4) & 0x0f); AVALY = ((AIVAL) & 0x0f); } #define JMPSETNDFLAGS(IVAL) chn->newDataFlags |= IVAL #define JMPUNSETNDFLAGS(IVAL) chn->newDataFlags &= (~(IVAL)) #define JMPGETNOTE(MNOTE, MROW, MCHAN) assert(mp); assert(mp->pattern); assert((MROW) >= 0); assert((MROW) < mp->pattern->nrows); MNOTE = &mp->pattern->data[(mp->pattern->nchannels * MROW) + (MCHAN)] #define JMPGETEFFECT(MEFF, MIEFF) if ((MIEFF >= 0) && (MIEFF < jmpNMODEffectTable)) MEFF = jmpMODEffectTable[MIEFF]; else MEFF = 0 #define JMPGETMODFLAGS(Q, Z) ((Q->module->defFlags & (Z)) == (Z)) /* Debugging macros */ #if !defined(JSS_LIGHT) && defined(JSS_DEBUG) # define JMPDEBUG(QQ) { fprintf(stderr, "[o=%03d:p=%03d:r=%03d] (%c/%x:%x) %s\n", mp->order, mp->npattern, mp->row, effect, currNote->effect, currNote->param, QQ ); } #else # define JMPDEBUG(QQ) // stub #endif #ifdef __cplusplus } #endif #endif // JSSPLR_H