Reformatted Organya.cpp

Signed-off-by: Gabriel Ravier <gabravier@gmail.com>
This commit is contained in:
Gabriel Ravier 2019-06-14 16:51:49 +02:00
parent 3a80d8f4fb
commit 473bd43ca7
No known key found for this signature in database
GPG key ID: 1E75F156884F3DCE

View file

@ -19,8 +19,8 @@
#define MAXMELODY 8 #define MAXMELODY 8
#define MAXDRAM 8 #define MAXDRAM 8
SOUNDBUFFER* lpORGANBUFFER[8][8][2] = { NULL }; SOUNDBUFFER *lpORGANBUFFER[8][8][2] = { NULL };
SOUNDBUFFER** lpDRAMBUFFER = &lpSECONDARYBUFFER[0x96]; SOUNDBUFFER **lpDRAMBUFFER = &lpSECONDARYBUFFER[0x96];
MUSICINFO info; MUSICINFO info;
@ -30,17 +30,17 @@ BOOL bFadeout = FALSE;
BOOL OrganyaNoteAlloc(unsigned short alloc) BOOL OrganyaNoteAlloc(unsigned short alloc)
{ {
for(int j = 0; j < MAXTRACK; j++) for (int j = 0; j < MAXTRACK; j++)
{ {
info.tdata[j].wave_no = 0; info.tdata[j].wave_no = 0;
info.tdata[j].note_list = NULL; info.tdata[j].note_list = NULL;
info.tdata[j].note_p = new NOTELIST[alloc]; info.tdata[j].note_p = new NOTELIST[alloc];
if(info.tdata[j].note_p == NULL) if (info.tdata[j].note_p == NULL)
{ {
for(int i = 0; i < MAXTRACK; i++) for (int i = 0; i < MAXTRACK; i++)
{ {
if(info.tdata[i].note_p != NULL) if (info.tdata[i].note_p != NULL)
{ {
delete[] info.tdata[i].note_p; delete[] info.tdata[i].note_p;
info.tdata[j].note_p = NULL; // Uses j instead of i info.tdata[j].note_p = NULL; // Uses j instead of i
@ -50,7 +50,7 @@ BOOL OrganyaNoteAlloc(unsigned short alloc)
return FALSE; return FALSE;
} }
for(int i = 0; i < alloc; i++) for (int i = 0; i < alloc; i++)
{ {
(info.tdata[j].note_p + i)->from = NULL; (info.tdata[j].note_p + i)->from = NULL;
(info.tdata[j].note_p + i)->to = NULL; (info.tdata[j].note_p + i)->to = NULL;
@ -61,7 +61,7 @@ BOOL OrganyaNoteAlloc(unsigned short alloc)
} }
} }
for(int j = 0; j < MAXMELODY; j++) for (int j = 0; j < MAXMELODY; j++)
MakeOrganyaWave(j, info.tdata[j].wave_no, info.tdata[j].pipi); MakeOrganyaWave(j, info.tdata[j].wave_no, info.tdata[j].pipi);
// for(int j = 0; j < MAXDRAM; j++) // for(int j = 0; j < MAXDRAM; j++)
// InitDramObject(j); // InitDramObject(j);
@ -73,9 +73,9 @@ BOOL OrganyaNoteAlloc(unsigned short alloc)
void OrganyaReleaseNote() void OrganyaReleaseNote()
{ {
for(int i = 0; i < MAXTRACK; i++) for (int i = 0; i < MAXTRACK; i++)
{ {
if(info.tdata[i].note_p != NULL) if (info.tdata[i].note_p != NULL)
{ {
#ifdef FIX_BUGS #ifdef FIX_BUGS
delete[] info.tdata[i].note_p; delete[] info.tdata[i].note_p;
@ -88,13 +88,15 @@ void OrganyaReleaseNote()
} }
// Wave playing and loading // Wave playing and loading
typedef struct { typedef struct
{
short wave_size; short wave_size;
short oct_par; short oct_par;
short oct_size; short oct_size;
} OCTWAVE; } OCTWAVE;
OCTWAVE oct_wave[8] = { OCTWAVE oct_wave[8] =
{
{ 256, 1, 4 }, // 0 Oct { 256, 1, 4 }, // 0 Oct
{ 256, 2, 8 }, // 1 Oct { 256, 2, 8 }, // 1 Oct
{ 128, 4, 12 }, // 2 Oct { 128, 4, 12 }, // 2 Oct
@ -102,7 +104,7 @@ OCTWAVE oct_wave[8] = {
{ 64, 16, 20 }, // 4 Oct { 64, 16, 20 }, // 4 Oct
{ 32, 32, 24 }, // 5 Oct { 32, 32, 24 }, // 5 Oct
{ 16, 64, 28 }, // 6 Oct { 16, 64, 28 }, // 6 Oct
{ 8,128, 32 }, // 7 Oct { 8, 128, 32 }, // 7 Oct
}; };
BOOL MakeSoundObject8(signed char *wavep, signed char track, signed char pipi) BOOL MakeSoundObject8(signed char *wavep, signed char track, signed char pipi)
@ -124,7 +126,7 @@ BOOL MakeSoundObject8(signed char *wavep, signed char track, signed char pipi)
for (size_t i = 0; i < data_size; i++) for (size_t i = 0; i < data_size; i++)
{ {
unsigned char work = *(wavep+wav_tp); unsigned char work = *(wavep + wav_tp);
work += 0x80; work += 0x80;
*wp_sub = work; *wp_sub = work;
@ -150,12 +152,14 @@ BOOL MakeSoundObject8(signed char *wavep, signed char track, signed char pipi)
} }
// Playing melody tracks // Playing melody tracks
short freq_tbl[12] = { 262,277,294,311,330,349,370,392,415,440,466,494 }; short freq_tbl[12] = { 262, 277, 294, 311, 330, 349, 370, 392, 415, 440, 466, 494 };
void ChangeOrganFrequency(unsigned char key, signed char track, long a) void ChangeOrganFrequency(unsigned char key, signed char track, long a)
{ {
for (int j = 0; j < 8; j++) { for (int j = 0; j < 8; j++)
for (int i = 0; i < 2; i++) { {
for (int i = 0; i < 2; i++)
{
lpORGANBUFFER[track][j][i]->SetFrequency(((oct_wave[j].wave_size * freq_tbl[key]) * oct_wave[j].oct_par) / 8 + (a - 1000)); lpORGANBUFFER[track][j][i]->SetFrequency(((oct_wave[j].wave_size * freq_tbl[key]) * oct_wave[j].oct_par) / 8 + (a - 1000));
} }
} }
@ -168,21 +172,21 @@ unsigned char key_twin[MAXTRACK] = { 0 };
void ChangeOrganPan(unsigned char key, unsigned char pan, signed char track) void ChangeOrganPan(unsigned char key, unsigned char pan, signed char track)
{ {
if(old_key[track] != PANDUMMY) if (old_key[track] != PANDUMMY)
lpORGANBUFFER[track][old_key[track]/12][key_twin[track]]->SetPan((pan_tbl[pan] - 0x100) * 10); lpORGANBUFFER[track][old_key[track] / 12][key_twin[track]]->SetPan((pan_tbl[pan] - 0x100) * 10);
} }
void ChangeOrganVolume(int no, long volume, signed char track) void ChangeOrganVolume(int no, long volume, signed char track)
{ {
if(old_key[track] != VOLDUMMY) if (old_key[track] != VOLDUMMY)
lpORGANBUFFER[track][old_key[track]/12][key_twin[track]]->SetVolume((volume - 0xFF) * 8); lpORGANBUFFER[track][old_key[track] / 12][key_twin[track]]->SetVolume((volume - 0xFF) * 8);
} }
void PlayOrganObject(unsigned char key, int mode, signed char track, long freq) void PlayOrganObject(unsigned char key, int mode, signed char track, long freq)
{ {
if (lpORGANBUFFER[track][key/12][key_twin[track]] != NULL) if (lpORGANBUFFER[track][key / 12][key_twin[track]] != NULL)
{ {
switch(mode) switch (mode)
{ {
case 0: case 0:
if (old_key[track] != 0xFF) if (old_key[track] != 0xFF)
@ -215,15 +219,15 @@ void PlayOrganObject(unsigned char key, int mode, signed char track, long freq)
{ {
lpORGANBUFFER[track][old_key[track] / 12][key_twin[track]]->Play(false); lpORGANBUFFER[track][old_key[track] / 12][key_twin[track]]->Play(false);
key_twin[track]++; key_twin[track]++;
if(key_twin[track] == 2) if (key_twin[track] == 2)
key_twin[track] = 0; key_twin[track] = 0;
lpORGANBUFFER[track][key / 12][key_twin[track]]->Play(true); lpORGANBUFFER[track][key / 12][key_twin[track]]->Play(true);
} }
else else
{ {
lpORGANBUFFER[track][old_key[track]/12][key_twin[track]]->Play(false); lpORGANBUFFER[track][old_key[track] / 12][key_twin[track]]->Play(false);
key_twin[track]++; key_twin[track]++;
if(key_twin[track] == 2) if (key_twin[track] == 2)
key_twin[track] = 0; key_twin[track] = 0;
ChangeOrganFrequency(key % 12, track, freq); ChangeOrganFrequency(key % 12, track, freq);
lpORGANBUFFER[track][key / 12][key_twin[track]]->Play(true); lpORGANBUFFER[track][key / 12][key_twin[track]]->Play(true);
@ -237,14 +241,14 @@ void PlayOrganObject(unsigned char key, int mode, signed char track, long freq)
// Release tracks // Release tracks
void ReleaseOrganyaObject(signed char track) void ReleaseOrganyaObject(signed char track)
{ {
for(int i = 0; i < 8; i++) for (int i = 0; i < 8; i++)
{ {
if(lpORGANBUFFER[track][i][0] != NULL) if (lpORGANBUFFER[track][i][0] != NULL)
{ {
lpORGANBUFFER[track][i][0]->Release(); lpORGANBUFFER[track][i][0]->Release();
lpORGANBUFFER[track][i][0] = NULL; lpORGANBUFFER[track][i][0] = NULL;
} }
if(lpORGANBUFFER[track][i][1] != NULL) if (lpORGANBUFFER[track][i][1] != NULL)
{ {
lpORGANBUFFER[track][i][1]->Release(); lpORGANBUFFER[track][i][1]->Release();
lpORGANBUFFER[track][i][1] = NULL; lpORGANBUFFER[track][i][1] = NULL;
@ -270,7 +274,7 @@ BOOL InitWaveData100()
// Create org wave // Create org wave
BOOL MakeOrganyaWave(signed char track, signed char wave_no, signed char pipi) BOOL MakeOrganyaWave(signed char track, signed char wave_no, signed char pipi)
{ {
if(wave_no > 99) if (wave_no > 99)
{ {
printf("WARNING: track %d has out-of-range wave_no %d\n", track, wave_no); printf("WARNING: track %d has out-of-range wave_no %d\n", track, wave_no);
return FALSE; return FALSE;
@ -299,7 +303,7 @@ void ChangeDramVolume(long volume, signed char track)
void PlayDramObject(unsigned char key, int mode, signed char track) void PlayDramObject(unsigned char key, int mode, signed char track)
{ {
switch(mode) switch (mode)
{ {
case 0: case 0:
lpDRAMBUFFER[track]->Stop(); lpDRAMBUFFER[track]->Stop();
@ -335,19 +339,19 @@ void OrganyaPlayData()
gOrgVolume = 0; gOrgVolume = 0;
// Play melody // Play melody
for(int i = 0; i < MAXMELODY; i++) for (int i = 0; i < MAXMELODY; i++)
{ {
if (play_np[i] != NULL && play_p == play_np[i]->x) if (play_np[i] != NULL && play_p == play_np[i]->x)
{ {
if(play_np[i]->y != KEYDUMMY) if (play_np[i]->y != KEYDUMMY)
{ {
PlayOrganObject(play_np[i]->y, -1, i, info.tdata[i].freq); PlayOrganObject(play_np[i]->y, -1, i, info.tdata[i].freq);
now_leng[i] = play_np[i]->length; now_leng[i] = play_np[i]->length;
} }
if(play_np[i]->pan != PANDUMMY) if (play_np[i]->pan != PANDUMMY)
ChangeOrganPan(play_np[i]->y, play_np[i]->pan, i); ChangeOrganPan(play_np[i]->y, play_np[i]->pan, i);
if(play_np[i]->volume != VOLDUMMY) if (play_np[i]->volume != VOLDUMMY)
gTrackVol[i] = play_np[i]->volume; gTrackVol[i] = play_np[i]->volume;
play_np[i] = play_np[i]->to; play_np[i] = play_np[i]->to;
@ -363,16 +367,16 @@ void OrganyaPlayData()
ChangeOrganVolume(play_np[i]->y, gOrgVolume * gTrackVol[i] / 0x7F, i); ChangeOrganVolume(play_np[i]->y, gOrgVolume * gTrackVol[i] / 0x7F, i);
} }
for(int i = MAXMELODY; i < MAXTRACK; i++) for (int i = MAXMELODY; i < MAXTRACK; i++)
{ {
if (play_np[i] != NULL && play_p == play_np[i]->x) if (play_np[i] != NULL && play_p == play_np[i]->x)
{ {
if (play_np[i]->y != KEYDUMMY) if (play_np[i]->y != KEYDUMMY)
PlayDramObject(play_np[i]->y, 1, i - MAXMELODY); PlayDramObject(play_np[i]->y, 1, i - MAXMELODY);
if(play_np[i]->pan != PANDUMMY) if (play_np[i]->pan != PANDUMMY)
ChangeDramPan(play_np[i]->pan, i - MAXMELODY); ChangeDramPan(play_np[i]->pan, i - MAXMELODY);
if(play_np[i]->volume != VOLDUMMY) if (play_np[i]->volume != VOLDUMMY)
gTrackVol[i] = play_np[i]->volume; gTrackVol[i] = play_np[i]->volume;
play_np[i] = play_np[i]->to; play_np[i] = play_np[i]->to;
@ -384,7 +388,7 @@ void OrganyaPlayData()
// Looping // Looping
play_p++; play_p++;
if(play_p >= info.end_x) if (play_p >= info.end_x)
{ {
play_p = info.repeat_x; play_p = info.repeat_x;
SetPlayPointer(play_p); SetPlayPointer(play_p);
@ -454,7 +458,8 @@ void LoadOrganya(const char *name)
info.repeat_x = READ_LE32(p); info.repeat_x = READ_LE32(p);
info.end_x = READ_LE32(p); info.end_x = READ_LE32(p);
for (int i = 0; i < 16; i++) { for (int i = 0; i < 16; i++)
{
info.tdata[i].freq = READ_LE16(p); info.tdata[i].freq = READ_LE16(p);
info.tdata[i].wave_no = *p++; info.tdata[i].wave_no = *p++;
const signed char pipi = *p++; const signed char pipi = *p++;
@ -494,31 +499,36 @@ void LoadOrganya(const char *name)
// Set note properties // Set note properties
np = info.tdata[j].note_p; // X position np = info.tdata[j].note_p; // X position
for (int i = 0; i < info.tdata[j].note_num; i++) { for (int i = 0; i < info.tdata[j].note_num; i++)
{
np->x = READ_LE32(p); np->x = READ_LE32(p);
np++; np++;
} }
np = info.tdata[j].note_p; // Y position np = info.tdata[j].note_p; // Y position
for (int i = 0; i < info.tdata[j].note_num; i++) { for (int i = 0; i < info.tdata[j].note_num; i++)
{
np->y = *p++; np->y = *p++;
np++; np++;
} }
np = info.tdata[j].note_p; // Length np = info.tdata[j].note_p; // Length
for (int i = 0; i < info.tdata[j].note_num; i++) { for (int i = 0; i < info.tdata[j].note_num; i++)
{
np->length = *p++; np->length = *p++;
np++; np++;
} }
np = info.tdata[j].note_p; // Volume np = info.tdata[j].note_p; // Volume
for (int i = 0; i < info.tdata[j].note_num; i++) { for (int i = 0; i < info.tdata[j].note_num; i++)
{
np->volume = *p++; np->volume = *p++;
np++; np++;
} }
np = info.tdata[j].note_p; // Pan np = info.tdata[j].note_p; // Pan
for (int i = 0; i < info.tdata[j].note_num; i++) { for (int i = 0; i < info.tdata[j].note_num; i++)
{
np->pan = *p++; np->pan = *p++;
np++; np++;
} }