LMMS
Loading...
Searching...
No Matches
rol.h
Go to the documentation of this file.
1/*
2 * Adplug - Replayer for many OPL2/OPL3 audio file formats.
3 * Copyright (C) 1999 - 2008 Simon Peter, <dn.tlp@gmx.net>, et al.
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18 *
19 * rol.h - ROL Player by OPLx <oplx@yahoo.com>
20 *
21 * Source references ADLIB.C from Adlib MSC SDK.
22 */
23#ifndef H_ROLPLAYER
24#define H_ROLPLAYER
25
26#include <vector>
27#include <string>
28
29#include "player.h"
30
31// These are here since Visual C 6 doesn't support statics declared and defined in class.
32#define ROL_COMMENT_SIZE 40U
33#define ROL_UNUSED1_SIZE 1U
34#define ROL_UNUSED2_SIZE 90U
35#define ROL_FILLER0_SIZE 38U
36#define ROL_FILLER1_SIZE 15U
37#define ROL_FILLER_SIZE 15U
38#define ROL_MAX_NAME_SIZE 9U
39#define ROL_INSTRUMENT_EVENT_FILLER_SIZE 3U // 1 for filler, 2 for unused
40#define ROL_BNK_SIGNATURE_SIZE 6U
41
42class CrolPlayer: public CPlayer
43{
44public:
45 static CPlayer *factory(Copl * pNewOpl);
46
47 explicit CrolPlayer(Copl * const pNewOpl);
48
49 virtual ~CrolPlayer();
50
51 virtual bool load (const std::string &filename, const CFileProvider &fp);
52 virtual bool update ();
53 virtual void rewind (int subsong); // rewinds to specified subsong
54 virtual float getrefresh(); // returns needed timer refresh rate
55
56 virtual std::string gettype() { return std::string("AdLib Visual Composer"); }
57 virtual unsigned int getinstruments()
58 {
59 return usedInstruments.size();
60 };
61 virtual std::string getinstrument(unsigned int n)
62 {
63 return usedInstruments[n];
64 };
65 virtual std::string getdesc()
66 {
67 return std::string(mpROLHeader->comment);
68 };
69
70private:
71
72#if !defined(UINT8_MAX)
73 typedef signed char int8_t;
74 typedef short int16_t;
75 typedef int int32_t;
76 typedef unsigned char uint8_t;
77 typedef unsigned short uint16_t;
78 typedef unsigned int uint32_t;
79#endif
80
81#ifdef __x86_64__
82 typedef signed int int32;
83#else
84 typedef signed long int int32;
85#endif
86
103
104 typedef struct
105 {
108 } STempoEvent;
109
110 typedef struct
111 {
114 } SNoteEvent;
115
122
123 typedef struct
124 {
127 } SVolumeEvent;
128
129 typedef struct
130 {
133 } SPitchEvent;
134
135 typedef std::vector<SNoteEvent> TNoteEvents;
136 typedef std::vector<SInstrumentEvent> TInstrumentEvents;
137 typedef std::vector<SVolumeEvent> TVolumeEvents;
138 typedef std::vector<SPitchEvent> TPitchEvents;
139
140#define BIT_POS(pos) (1<<pos)
141
192
199
200 typedef std::vector<SInstrumentName> TInstrumentNames;
201
214
231
241
249
250 typedef struct
251 {
252 std::string name;
254 } SInstrument;
255
256 void load_tempo_events (binistream *f);
257 bool load_voice_data (binistream *f, std::string const & bnk_filename, CFileProvider const & fp);
258 void load_note_events (binistream *f, CVoiceData & voice);
259 void load_instrument_events(binistream *f, CVoiceData & voice,
260 binistream *bnk_file, SBnkHeader const & bnk_header);
261 void load_volume_events (binistream *f, CVoiceData & voice);
262 void load_pitch_events (binistream *f, CVoiceData & voice);
263
264 bool load_bnk_info (binistream *f, SBnkHeader & header);
265 int load_rol_instrument (binistream *f, SBnkHeader const & header, std::string const & name);
266 void read_rol_instrument (binistream *f, SRolInstrument & ins);
267 void read_fm_operator (binistream *f, SOPL2Op & opl2_op);
268 int get_ins_index (std::string const & name) const;
269
270 void UpdateVoice(int const voice, CVoiceData & voiceData);
271 void SetNote(int const voice, int const note);
272 void SetNoteMelodic(int const voice, int const note);
273 void SetNotePercussive(int const voice, int const note);
274 void SetFreq (int const voice, int const note, bool const keyOn=false);
275 void ChangePitch(int voice, uint16_t const pitchBend);
276 void SetPitch (int const voice, float const variation);
277 void SetVolume (int const voice, uint8_t const volume);
278 void SetRefresh(float const multiplier);
279 uint8_t GetKSLTL(int const voice) const;
280 void send_ins_data_to_chip(int const voice, int const ins_index);
281 void send_operator(int const voice, SOPL2Op const & modulator, SOPL2Op const & carrier);
282
284 {
285 public:
286 bool operator()(SInstrumentName const & lhs, SInstrumentName const & rhs) const
287 {
288 return keyLess(lhs.name, rhs.name);
289 }
290
291 bool operator()(SInstrumentName const & lhs, std::string const &rhs) const
292 {
293 return keyLess(lhs.name, rhs.c_str());
294 }
295
296 bool operator()(std::string const & lhs, SInstrumentName const & rhs) const
297 {
298 return keyLess(lhs.c_str(), rhs.name);
299 }
300 private:
301 bool keyLess(char const * const lhs, char const * const rhs) const
302 {
303 return stricmp(lhs, rhs) < 0;
304 }
305 };
306
307 typedef uint16_t const * TUint16ConstPtr;
308 typedef std::vector<STempoEvent> TTempoEvents;
309 typedef std::vector<CVoiceData> TVoiceData;
310 typedef std::vector<SInstrument> TInstrumentList;
311 typedef std::vector<TUint16ConstPtr> TUint16PtrVector;
312 typedef std::vector<int16_t> TInt16Vector;
313 typedef std::vector<uint8_t> TUInt8Vector;
314 typedef std::vector<bool> TBoolVector;
315 typedef std::vector<std::string> TStringVector;
316
329 float mRefresh;
338
339 static int const kSizeofDataRecord;
340 static int const kMaxTickBeat;
341 static int const kSilenceNote;
342 static int const kNumMelodicVoices;
343 static int const kNumPercussiveVoices;
344 static int const kBassDrumChannel;
345 static int const kSnareDrumChannel;
346 static int const kTomtomChannel;
347 static int const kTomTomNote;
348 static int const kTomTomToSnare;
349 static int const kSnareNote;
350 static float const kDefaultUpdateTme;
351};
352
353#endif
Definition fprovide.h:29
CPlayer(Copl *newopl)
Definition player.cpp:34
Definition opl.h:26
Definition rol.h:143
int mEventStatus
Definition rol.h:183
TVolumeEvents volume_events
Definition rol.h:181
TPitchEvents pitch_events
Definition rol.h:182
TInstrumentEvents instrument_events
Definition rol.h:180
void Reset()
Definition rol.h:167
uint16_t current_note
Definition rol.h:186
CVoiceData()
Definition rol.h:155
uint16_t next_instrument_event
Definition rol.h:187
bool mForceNote
Definition rol.h:190
EEventStatus
Definition rol.h:146
@ kES_VolumeEnd
Definition rol.h:150
@ kES_None
Definition rol.h:152
@ kES_NoteEnd
Definition rol.h:147
@ kES_InstrEnd
Definition rol.h:149
@ kES_PitchEnd
Definition rol.h:148
int16_t mNoteDuration
Definition rol.h:184
TNoteEvents note_events
Definition rol.h:179
int16_t current_note_duration
Definition rol.h:185
uint16_t next_pitch_event
Definition rol.h:189
uint16_t next_volume_event
Definition rol.h:188
Definition rol.h:284
bool keyLess(char const *const lhs, char const *const rhs) const
Definition rol.h:301
bool operator()(SInstrumentName const &lhs, SInstrumentName const &rhs) const
Definition rol.h:286
bool operator()(std::string const &lhs, SInstrumentName const &rhs) const
Definition rol.h:296
bool operator()(SInstrumentName const &lhs, std::string const &rhs) const
Definition rol.h:291
std::vector< TUint16ConstPtr > TUint16PtrVector
Definition rol.h:311
signed char int8_t
Definition rol.h:73
virtual bool update()
Definition rol.cpp:263
virtual void rewind(int subsong)
Definition rol.cpp:293
std::vector< uint8_t > TUInt8Vector
Definition rol.h:313
static int const kNumPercussiveVoices
Definition rol.h:343
void SetPitch(int const voice, float const variation)
Definition rol.cpp:526
static int const kSnareNote
Definition rol.h:349
TTempoEvents mTempoEvents
Definition rol.h:319
SRolHeader * mpROLHeader
Definition rol.h:317
void UpdateVoice(int const voice, CVoiceData &voiceData)
Definition rol.cpp:344
short int16_t
Definition rol.h:74
uint8_t mAMVibRhythmCache
Definition rol.h:336
std::vector< CVoiceData > TVoiceData
Definition rol.h:309
int load_rol_instrument(binistream *f, SBnkHeader const &header, std::string const &name)
Definition rol.cpp:795
void SetNoteMelodic(int const voice, int const note)
Definition rol.cpp:480
std::vector< bool > TBoolVector
Definition rol.h:314
std::vector< std::string > TStringVector
Definition rol.h:315
void send_operator(int const voice, SOPL2Op const &modulator, SOPL2Op const &carrier)
Definition rol.cpp:581
bool load_voice_data(binistream *f, std::string const &bnk_filename, CFileProvider const &fp)
Definition rol.cpp:632
bool load_bnk_info(binistream *f, SBnkHeader &header)
Definition rol.cpp:764
static float const kDefaultUpdateTme
Definition rol.h:350
TUint16PtrVector mFNumFreqPtrList
Definition rol.h:322
void SetNotePercussive(int const voice, int const note)
Definition rol.cpp:449
void read_fm_operator(binistream *f, SOPL2Op &opl2_op)
Definition rol.cpp:860
static CPlayer * factory(Copl *pNewOpl)
Definition rol.cpp:146
static int const kBassDrumChannel
Definition rol.h:344
int16_t mOldHalfToneOffset
Definition rol.h:335
static int const kSnareDrumChannel
Definition rol.h:345
std::vector< SPitchEvent > TPitchEvents
Definition rol.h:138
TUInt8Vector mKSLTLCache
Definition rol.h:325
void SetFreq(int const voice, int const note, bool const keyOn=false)
Definition rol.cpp:537
std::vector< SInstrumentName > TInstrumentNames
Definition rol.h:200
std::vector< SNoteEvent > TNoteEvents
Definition rol.h:135
TBoolVector mKeyOnCache
Definition rol.h:328
TUInt8Vector mKOnOctFNumCache
Definition rol.h:327
virtual std::string gettype()
Definition rol.h:56
void SetVolume(int const voice, uint8_t const volume)
Definition rol.cpp:565
signed long int int32
Definition rol.h:84
TUInt8Vector mVolumeCache
Definition rol.h:324
virtual ~CrolPlayer()
Definition rol.cpp:176
virtual float getrefresh()
Definition rol.cpp:339
int get_ins_index(std::string const &name) const
Definition rol.cpp:835
std::vector< SInstrument > TInstrumentList
Definition rol.h:310
uint8_t GetKSLTL(int const voice) const
Definition rol.cpp:552
unsigned char uint8_t
Definition rol.h:76
static int const kTomtomChannel
Definition rol.h:346
void SetNote(int const voice, int const note)
Definition rol.cpp:437
uint16_t mPitchRangeStep
Definition rol.h:331
static int const kMaxTickBeat
Definition rol.h:340
void SetRefresh(float const multiplier)
Definition rol.cpp:332
static int const kTomTomNote
Definition rol.h:347
virtual bool load(const std::string &filename, const CFileProvider &fp)
Definition rol.cpp:185
unsigned int uint32_t
Definition rol.h:78
std::vector< int16_t > TInt16Vector
Definition rol.h:312
std::vector< SInstrumentEvent > TInstrumentEvents
Definition rol.h:136
static int const kSilenceNote
Definition rol.h:341
virtual unsigned int getinstruments()
Definition rol.h:57
void load_note_events(binistream *f, CVoiceData &voice)
Definition rol.cpp:664
void load_instrument_events(binistream *f, CVoiceData &voice, binistream *bnk_file, SBnkHeader const &bnk_header)
Definition rol.cpp:698
unsigned short uint16_t
Definition rol.h:77
int int32_t
Definition rol.h:75
int16_t mTimeOfLastNote
Definition rol.h:334
void ChangePitch(int voice, uint16_t const pitchBend)
Definition rol.cpp:492
TUInt8Vector mNoteCache
Definition rol.h:326
static int const kTomTomToSnare
Definition rol.h:348
CrolPlayer(Copl *const pNewOpl)
Definition rol.cpp:151
TInstrumentList mInstrumentList
Definition rol.h:321
uint16_t const * TUint16ConstPtr
Definition rol.h:307
void send_ins_data_to_chip(int const voice, int const ins_index)
Definition rol.cpp:574
virtual std::string getdesc()
Definition rol.h:65
void read_rol_instrument(binistream *f, SRolInstrument &ins)
Definition rol.cpp:848
uint16_t mNextTempoEvent
Definition rol.h:332
static int const kNumMelodicVoices
Definition rol.h:342
std::vector< SVolumeEvent > TVolumeEvents
Definition rol.h:137
TStringVector usedInstruments
Definition rol.h:337
void load_tempo_events(binistream *f)
Definition rol.cpp:616
void load_pitch_events(binistream *f, CVoiceData &voice)
Definition rol.cpp:746
int16_t mCurrTick
Definition rol.h:333
static int const kSizeofDataRecord
Definition rol.h:339
TInt16Vector mHalfToneOffset
Definition rol.h:323
int32_t mOldPitchBendLength
Definition rol.h:330
virtual std::string getinstrument(unsigned int n)
Definition rol.h:61
std::vector< STempoEvent > TTempoEvents
Definition rol.h:308
float mRefresh
Definition rol.h:329
void load_volume_events(binistream *f, CVoiceData &voice)
Definition rol.cpp:726
TVoiceData mVoiceData
Definition rol.h:320
TUint16ConstPtr mpOldFNumFreqPtr
Definition rol.h:318
unsigned f
Definition inflate.c:1572
static char filename[]
Definition features.c:5
static const char * name
Definition pugl.h:1582
static float volume(float level)
Definition nekobee_voice_render.c:99
#define true
Definition ordinals.h:82
#define BIT_POS(pos)
Definition rol.h:140
#define ROL_UNUSED2_SIZE
Definition rol.h:34
#define ROL_BNK_SIGNATURE_SIZE
Definition rol.h:40
#define ROL_COMMENT_SIZE
Definition rol.h:32
#define ROL_FILLER0_SIZE
Definition rol.h:35
#define ROL_MAX_NAME_SIZE
Definition rol.h:38
#define ROL_FILLER1_SIZE
Definition rol.h:36
Definition rol.h:203
uint8_t version_minor
Definition rol.h:205
int32 abs_offset_of_name_list
Definition rol.h:209
char signature[ROL_BNK_SIGNATURE_SIZE]
Definition rol.h:206
TInstrumentNames ins_name_list
Definition rol.h:212
uint16_t total_number_of_list_entries
Definition rol.h:208
int32 abs_offset_of_data
Definition rol.h:210
uint8_t version_major
Definition rol.h:204
uint16_t number_of_list_entries_used
Definition rol.h:207
Definition rol.h:216
uint8_t feed_back
Definition rol.h:219
uint8_t envelope_scaling
Definition rol.h:228
uint8_t release_rate
Definition rol.h:224
uint8_t key_scale_level
Definition rol.h:217
uint8_t fm_type
Definition rol.h:229
uint8_t decay_rate
Definition rol.h:223
uint8_t sustain_level
Definition rol.h:221
uint8_t frequency_vibrato
Definition rol.h:227
uint8_t output_level
Definition rol.h:225
uint8_t freq_multiplier
Definition rol.h:218
uint8_t amplitude_vibrato
Definition rol.h:226
uint8_t sustaining_sound
Definition rol.h:222
uint8_t attack_rate
Definition rol.h:220
Definition rol.h:117
int16_t time
Definition rol.h:118
int16_t ins_index
Definition rol.h:120
char name[ROL_MAX_NAME_SIZE]
Definition rol.h:119
Definition rol.h:251
SRolInstrument instrument
Definition rol.h:253
std::string name
Definition rol.h:252
Definition rol.h:194
char name[ROL_MAX_NAME_SIZE]
Definition rol.h:197
uint8_t record_used
Definition rol.h:196
uint16_t index
Definition rol.h:195
Definition rol.h:111
int16_t duration
Definition rol.h:113
int16_t number
Definition rol.h:112
Definition rol.h:233
uint8_t ardr
Definition rol.h:236
uint8_t ksltl
Definition rol.h:235
uint8_t ammulti
Definition rol.h:234
uint8_t waveform
Definition rol.h:239
uint8_t fbc
Definition rol.h:238
uint8_t slrr
Definition rol.h:237
Definition rol.h:130
int16_t time
Definition rol.h:131
float variation
Definition rol.h:132
Definition rol.h:88
uint16_t version_minor
Definition rol.h:90
uint16_t edit_scale_y
Definition rol.h:94
uint16_t version_major
Definition rol.h:89
float basic_tempo
Definition rol.h:101
uint16_t edit_scale_x
Definition rol.h:95
uint16_t beats_per_measure
Definition rol.h:93
char comment[ROL_COMMENT_SIZE]
Definition rol.h:91
char unused1
Definition rol.h:96
char filler0[ROL_FILLER0_SIZE]
Definition rol.h:99
char filler1[ROL_FILLER1_SIZE]
Definition rol.h:100
char unused2[ROL_UNUSED2_SIZE]
Definition rol.h:98
char mode
Definition rol.h:97
uint16_t ticks_per_beat
Definition rol.h:92
Definition rol.h:243
SOPL2Op modulator
Definition rol.h:246
SOPL2Op carrier
Definition rol.h:247
uint8_t mode
Definition rol.h:244
uint8_t voice_number
Definition rol.h:245
Definition rol.h:105
float multiplier
Definition rol.h:107
int16_t time
Definition rol.h:106
Definition rol.h:124
int16_t time
Definition rol.h:125
float multiplier
Definition rol.h:126
#define stricmp(x, y)
Definition swell-types.h:68
int n
Definition crypt.c:458