mirror of
https://github.com/libretro/scummvm.git
synced 2025-03-06 18:27:26 +00:00
FM-TOWNS AUDIO: Some renaming in the euphony driver code
This commit is contained in:
parent
bd2c84be89
commit
d9772ff88f
@ -27,7 +27,7 @@
|
||||
|
||||
TownsEuphonyDriver::TownsEuphonyDriver(Audio::Mixer *mixer) : _activeChannels(0), _sustainChannels(0),
|
||||
_assignedChannels(0), _paraCount(0), _command(0), _tEnable(0), _tMode(0), _tOrdr(0), _tLevel(0),
|
||||
_tTranspose(0), _musicPos(0), _musicStart(0), _playing(false), _eventBuffer(0), _bufferedEventsCount(0),
|
||||
_tDetune(0), _musicPos(0), _musicStart(0), _playing(false), _eventBuffer(0), _bufferedEventsCount(0),
|
||||
_tempoControlMode(0) {
|
||||
_para[0] = _para[1] = 0;
|
||||
_intf = new TownsAudioInterface(mixer, this);
|
||||
@ -44,7 +44,7 @@ TownsEuphonyDriver::~TownsEuphonyDriver() {
|
||||
delete[] _tMode;
|
||||
delete[] _tOrdr;
|
||||
delete[] _tLevel;
|
||||
delete[] _tTranspose;
|
||||
delete[] _tDetune;
|
||||
}
|
||||
|
||||
bool TownsEuphonyDriver::init() {
|
||||
@ -59,7 +59,7 @@ bool TownsEuphonyDriver::init() {
|
||||
delete[] _tMode;
|
||||
delete[] _tOrdr;
|
||||
delete[] _tLevel;
|
||||
delete[] _tTranspose;
|
||||
delete[] _tDetune;
|
||||
|
||||
_activeChannels = new int8[16];
|
||||
_sustainChannels = new int8[16];
|
||||
@ -70,7 +70,7 @@ bool TownsEuphonyDriver::init() {
|
||||
_tMode = new uint8[32];
|
||||
_tOrdr = new uint8[32];
|
||||
_tLevel = new int8[32];
|
||||
_tTranspose = new int8[32];
|
||||
_tDetune = new int8[32];
|
||||
|
||||
reset();
|
||||
|
||||
@ -220,21 +220,21 @@ void TownsEuphonyDriver::setOutputVolume(int mode, int volLeft, int volRight) {
|
||||
_intf->callback(67, mode, volLeft, volRight);
|
||||
}
|
||||
|
||||
int TownsEuphonyDriver::chanEnable(int tableEntry, int val) {
|
||||
int TownsEuphonyDriver::configChan_enable(int tableEntry, int val) {
|
||||
if (tableEntry > 31)
|
||||
return 3;
|
||||
_tEnable[tableEntry] = val;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int TownsEuphonyDriver::chanMode(int tableEntry, int val) {
|
||||
int TownsEuphonyDriver::configChan_setMode(int tableEntry, int val) {
|
||||
if (tableEntry > 31)
|
||||
return 3;
|
||||
_tMode[tableEntry] = val;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int TownsEuphonyDriver::chanOrdr(int tableEntry, int val) {
|
||||
int TownsEuphonyDriver::configChan_remap(int tableEntry, int val) {
|
||||
if (tableEntry > 31)
|
||||
return 3;
|
||||
if (val < 16)
|
||||
@ -242,7 +242,7 @@ int TownsEuphonyDriver::chanOrdr(int tableEntry, int val) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int TownsEuphonyDriver::chanVolumeShift(int tableEntry, int val) {
|
||||
int TownsEuphonyDriver::configChan_adjustVolume(int tableEntry, int val) {
|
||||
if (tableEntry > 31)
|
||||
return 3;
|
||||
if (val <= 40)
|
||||
@ -250,11 +250,11 @@ int TownsEuphonyDriver::chanVolumeShift(int tableEntry, int val) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int TownsEuphonyDriver::chanNoteShift(int tableEntry, int val) {
|
||||
int TownsEuphonyDriver::configChan_setDetune(int tableEntry, int val) {
|
||||
if (tableEntry > 31)
|
||||
return 3;
|
||||
if (val <= 40)
|
||||
_tTranspose[tableEntry] = (int8)(val & 0xff);
|
||||
_tDetune[tableEntry] = (int8)(val & 0xff);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -325,7 +325,7 @@ void TownsEuphonyDriver::resetTables() {
|
||||
for (int i = 0; i < 32; i++)
|
||||
_tOrdr[i] = i & 0x0f;
|
||||
memset(_tLevel, 0, 32);
|
||||
memset(_tTranspose, 0, 32);
|
||||
memset(_tDetune, 0, 32);
|
||||
}
|
||||
|
||||
void TownsEuphonyDriver::resetTempo() {
|
||||
@ -672,8 +672,8 @@ bool TownsEuphonyDriver::evtSetupNote() {
|
||||
uint8 velo = _musicPos[5];
|
||||
|
||||
sendEvent(mode, evt);
|
||||
sendEvent(mode, applyNoteShift(note));
|
||||
sendEvent(mode, applyVolumeShift(velo));
|
||||
sendEvent(mode, applyDetune(note));
|
||||
sendEvent(mode, applyVolumeAdjust(velo));
|
||||
|
||||
jumpNextLoop();
|
||||
if (_musicPos[0] == 0xfe || _musicPos[0] == 0xfd)
|
||||
@ -712,7 +712,7 @@ bool TownsEuphonyDriver::evtPolyphonicAftertouch() {
|
||||
uint8 mode = _tMode[_musicPos[1]];
|
||||
|
||||
sendEvent(mode, evt);
|
||||
sendEvent(mode, applyNoteShift(_musicPos[4]));
|
||||
sendEvent(mode, applyDetune(_musicPos[4]));
|
||||
sendEvent(mode, _musicPos[5]);
|
||||
|
||||
return false;
|
||||
@ -780,8 +780,8 @@ bool TownsEuphonyDriver::evtModeOrdrChange() {
|
||||
return false;
|
||||
}
|
||||
|
||||
uint8 TownsEuphonyDriver::applyNoteShift(uint8 in) {
|
||||
int out = _tTranspose[_musicPos[1]];
|
||||
uint8 TownsEuphonyDriver::applyDetune(uint8 in) {
|
||||
int out = _tDetune[_musicPos[1]];
|
||||
if (!out)
|
||||
return in;
|
||||
out += (in & 0x7f);
|
||||
@ -795,7 +795,7 @@ uint8 TownsEuphonyDriver::applyNoteShift(uint8 in) {
|
||||
return out & 0xff;
|
||||
}
|
||||
|
||||
uint8 TownsEuphonyDriver::applyVolumeShift(uint8 in) {
|
||||
uint8 TownsEuphonyDriver::applyVolumeAdjust(uint8 in) {
|
||||
int out = _tLevel[_musicPos[1]];
|
||||
out += (in & 0x7f);
|
||||
out = CLIP(out, 1, 127);
|
||||
|
@ -55,11 +55,11 @@ public:
|
||||
|
||||
void setOutputVolume(int chanType, int volLeft, int volRight);
|
||||
|
||||
int chanEnable(int tableEntry, int val);
|
||||
int chanMode(int tableEntry, int val);
|
||||
int chanOrdr(int tableEntry, int val);
|
||||
int chanVolumeShift(int tableEntry, int val);
|
||||
int chanNoteShift(int tableEntry, int val);
|
||||
int configChan_enable(int tableEntry, int val);
|
||||
int configChan_setMode(int tableEntry, int val);
|
||||
int configChan_remap(int tableEntry, int val);
|
||||
int configChan_adjustVolume(int tableEntry, int val);
|
||||
int configChan_setDetune(int tableEntry, int val);
|
||||
|
||||
int assignChannel(int chan, int tableEntry);
|
||||
|
||||
@ -111,8 +111,8 @@ private:
|
||||
return false;
|
||||
}
|
||||
|
||||
uint8 applyNoteShift(uint8 in);
|
||||
uint8 applyVolumeShift(uint8 in);
|
||||
uint8 applyDetune(uint8 in);
|
||||
uint8 applyVolumeAdjust(uint8 in);
|
||||
|
||||
void sendNoteOff();
|
||||
void sendNoteOn();
|
||||
@ -136,7 +136,7 @@ private:
|
||||
uint8 *_tMode;
|
||||
uint8 *_tOrdr;
|
||||
int8 *_tLevel;
|
||||
int8 *_tTranspose;
|
||||
int8 *_tDetune;
|
||||
|
||||
struct DlEvent {
|
||||
uint8 evt;
|
||||
|
@ -25,38 +25,6 @@
|
||||
#include "audio/softsynth/fmtowns_pc98/towns_midi.h"
|
||||
#include "common/textconsole.h"
|
||||
|
||||
struct ChanState {
|
||||
uint8 get(uint8 type) {
|
||||
switch (type) {
|
||||
case 0:
|
||||
return unk1;
|
||||
case 1:
|
||||
return mulAmsFms;
|
||||
case 2:
|
||||
return tl;
|
||||
case 3:
|
||||
return attDec;
|
||||
case 4:
|
||||
return sus;
|
||||
case 5:
|
||||
return fgAlg;
|
||||
case 6:
|
||||
return unk2;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint8 unk1;
|
||||
uint8 mulAmsFms;
|
||||
uint8 tl;
|
||||
uint8 attDec;
|
||||
uint8 sus;
|
||||
uint8 fgAlg;
|
||||
uint8 unk2;
|
||||
};
|
||||
|
||||
class TownsMidiOutputChannel {
|
||||
friend class TownsMidiInputChannel;
|
||||
public:
|
||||
@ -119,7 +87,7 @@ private:
|
||||
|
||||
void keyOn();
|
||||
void keyOff();
|
||||
void internKeySetFreq(uint16 frq);
|
||||
void keyOnSetFreq(uint16 frq);
|
||||
void out(uint8 reg, uint8 val);
|
||||
|
||||
TownsMidiInputChannel *_midi;
|
||||
@ -205,6 +173,47 @@ private:
|
||||
static const uint8 _programAdjustLevel[];
|
||||
};
|
||||
|
||||
class TownsMidiChanState {
|
||||
public:
|
||||
TownsMidiChanState();
|
||||
~TownsMidiChanState() {}
|
||||
uint8 get(uint8 type);
|
||||
|
||||
uint8 unk1;
|
||||
uint8 mulAmsFms;
|
||||
uint8 tl;
|
||||
uint8 attDec;
|
||||
uint8 sus;
|
||||
uint8 fgAlg;
|
||||
uint8 unk2;
|
||||
};
|
||||
|
||||
TownsMidiChanState::TownsMidiChanState() {
|
||||
unk1 = mulAmsFms = tl = attDec = sus = fgAlg = unk2 = 0;
|
||||
}
|
||||
|
||||
uint8 TownsMidiChanState::get(uint8 type) {
|
||||
switch (type) {
|
||||
case 0:
|
||||
return unk1;
|
||||
case 1:
|
||||
return mulAmsFms;
|
||||
case 2:
|
||||
return tl;
|
||||
case 3:
|
||||
return attDec;
|
||||
case 4:
|
||||
return sus;
|
||||
case 5:
|
||||
return fgAlg;
|
||||
case 6:
|
||||
return unk2;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
TownsMidiOutputChannel::TownsMidiOutputChannel(MidiDriver_TOWNS *driver, int chanIndex) : _driver(driver), _chan(chanIndex),
|
||||
_midi(0), _prev(0), _next(0), _fld_c(0), _carrierTl(0), _note(0), _modulatorTl(0), _sustainNoteOff(0), _duration(0), _fld_13(0), _prg(0), _freq(0), _freqAdjust(0) {
|
||||
_stateA = new StateA[2];
|
||||
@ -221,12 +230,12 @@ TownsMidiOutputChannel::~TownsMidiOutputChannel() {
|
||||
void TownsMidiOutputChannel::noteOn(uint8 msb, uint16 lsb) {
|
||||
_freq = (msb << 7) + lsb;
|
||||
_freqAdjust = 0;
|
||||
internKeySetFreq(_freq);
|
||||
keyOnSetFreq(_freq);
|
||||
}
|
||||
|
||||
void TownsMidiOutputChannel::noteOnPitchBend(uint8 msb, uint16 lsb) {
|
||||
_freq = (msb << 7) + lsb;
|
||||
internKeySetFreq(_freq + _freqAdjust);
|
||||
keyOnSetFreq(_freq + _freqAdjust);
|
||||
}
|
||||
|
||||
void TownsMidiOutputChannel::setupProgram(const uint8 *data, uint8 vol1, uint8 vol2) {
|
||||
@ -401,7 +410,7 @@ void TownsMidiOutputChannel::keyOff() {
|
||||
out(0x28, 0);
|
||||
}
|
||||
|
||||
void TownsMidiOutputChannel::internKeySetFreq(uint16 frq) {
|
||||
void TownsMidiOutputChannel::keyOnSetFreq(uint16 frq) {
|
||||
uint8 t = (frq << 1) >> 8;
|
||||
frq = (_freqMSB[t] << 11) | _freqLSB[t] ;
|
||||
out(0xa4, frq >> 8);
|
||||
@ -556,7 +565,7 @@ void TownsMidiInputChannel::noteOn(byte note, byte velocity) {
|
||||
}
|
||||
|
||||
void TownsMidiInputChannel::programChange(byte program) {
|
||||
// Dysfunctional since this is all done inside the imuse code
|
||||
// Dysfunctional since this is all done inside the imuse code
|
||||
}
|
||||
|
||||
void TownsMidiInputChannel::pitchBend(int16 bend) {
|
||||
@ -663,8 +672,7 @@ MidiDriver_TOWNS::MidiDriver_TOWNS(Audio::Mixer *mixer) : _timerBproc(0), _timer
|
||||
for (int i = 0; i < 6; i++)
|
||||
_out[i] = new TownsMidiOutputChannel(this, i);
|
||||
|
||||
_chanState = new ChanState[32];
|
||||
memset(_chanState, 0, 32 * sizeof(ChanState));
|
||||
_chanState = new TownsMidiChanState[32];
|
||||
|
||||
_chanOutputLevel = new uint8[2048];
|
||||
for (int i = 0; i < 64; i++) {
|
||||
|
@ -31,7 +31,7 @@
|
||||
|
||||
class TownsMidiOutputChannel;
|
||||
class TownsMidiInputChannel;
|
||||
struct ChanState;
|
||||
class TownsMidiChanState;
|
||||
|
||||
class MidiDriver_TOWNS : public MidiDriver, public TownsAudioInterfacePluginDriver {
|
||||
friend class TownsMidiInputChannel;
|
||||
@ -61,9 +61,8 @@ private:
|
||||
TownsMidiOutputChannel *allocateOutputChannel(int pri);
|
||||
|
||||
TownsMidiInputChannel **_channels;
|
||||
TownsMidiOutputChannel **_out;
|
||||
|
||||
ChanState *_chanState;
|
||||
TownsMidiOutputChannel **_out;
|
||||
TownsMidiChanState *_chanState;
|
||||
|
||||
Common::TimerManager::TimerProc _timerBproc;
|
||||
void *_timerBpara;
|
||||
|
@ -113,7 +113,7 @@ void SoundTowns::haltTrack() {
|
||||
for (int i = 0x40; i < 0x46; i++)
|
||||
_driver->chanVolume(i, 0);
|
||||
for (int i = 0; i < 32; i++)
|
||||
_driver->chanEnable(i, 0);
|
||||
_driver->configChan_enable(i, 0);
|
||||
_driver->stopParser();
|
||||
}
|
||||
|
||||
@ -330,15 +330,15 @@ void SoundTowns::playEuphonyTrack(uint32 offset, int loop) {
|
||||
|
||||
const uint8 *src = _musicTrackData + 852;
|
||||
for (int i = 0; i < 32; i++)
|
||||
_driver->chanEnable(i, *src++);
|
||||
_driver->configChan_enable(i, *src++);
|
||||
for (int i = 0; i < 32; i++)
|
||||
_driver->chanMode(i, *src++);
|
||||
_driver->configChan_setMode(i, *src++);
|
||||
for (int i = 0; i < 32; i++)
|
||||
_driver->chanOrdr(i, *src++);
|
||||
_driver->configChan_remap(i, *src++);
|
||||
for (int i = 0; i < 32; i++)
|
||||
_driver->chanVolumeShift(i, *src++);
|
||||
_driver->configChan_adjustVolume(i, *src++);
|
||||
for (int i = 0; i < 32; i++)
|
||||
_driver->chanNoteShift(i, *src++);
|
||||
_driver->configChan_setDetune(i, *src++);
|
||||
|
||||
src = _musicTrackData + 1748;
|
||||
for (int i = 0; i < 6; i++)
|
||||
|
@ -500,15 +500,15 @@ void Player_Towns_v1::playEuphonyTrack(int sound, const uint8 *data) {
|
||||
const uint8 *trackData = src + 150;
|
||||
|
||||
for (int i = 0; i < 32; i++)
|
||||
_driver->chanEnable(i, *src++);
|
||||
_driver->configChan_enable(i, *src++);
|
||||
for (int i = 0; i < 32; i++)
|
||||
_driver->chanMode(i, 0xff);
|
||||
_driver->configChan_setMode(i, 0xff);
|
||||
for (int i = 0; i < 32; i++)
|
||||
_driver->chanOrdr(i, *src++);
|
||||
_driver->configChan_remap(i, *src++);
|
||||
for (int i = 0; i < 32; i++)
|
||||
_driver->chanVolumeShift(i, *src++);
|
||||
_driver->configChan_adjustVolume(i, *src++);
|
||||
for (int i = 0; i < 32; i++)
|
||||
_driver->chanNoteShift(i, *src++);
|
||||
_driver->configChan_setDetune(i, *src++);
|
||||
|
||||
src += 8;
|
||||
for (int i = 0; i < 6; i++)
|
||||
|
Loading…
x
Reference in New Issue
Block a user