From: <pst...@us...> - 2008-05-24 19:03:35
|
Revision: 562 http://jazzplusplus.svn.sourceforge.net/jazzplusplus/?rev=562&view=rev Author: pstieber Date: 2008-05-24 12:03:32 -0700 (Sat, 24 May 2008) Log Message: ----------- 1. Changed tMetaEvent::pData to tMetaEvent::mpData and tMetaEvent::Length to tMetaEvent::mLength. 2. Encapsulated the mLength and mpData data members in tMetaEvent by making them protected and adding GetData, and GetDataLength. 3. Added FixCheckSum to tMetaEvent, and called it from 4. Added some class comment headers. 5. Changed tEventArray::mName to tEventArray::mpName. 6. Changed tSynthSysex::GetValPtr and tSynthSysex::GetChaPtr to return constant pointers. This *will break the Linux build*, but I will fix this soon. Modified Paths: -------------- trunk/jazz/src/AlsaPlayer.cpp trunk/jazz/src/Dialogs.cpp trunk/jazz/src/Events.cpp trunk/jazz/src/Events.h trunk/jazz/src/Synth.cpp trunk/jazz/src/Synth.h trunk/jazz/src/Track.cpp trunk/jazz/src/Track.h trunk/jazz/src/mswin/WindowsPlayer.cpp Modified: trunk/jazz/src/AlsaPlayer.cpp =================================================================== --- trunk/jazz/src/AlsaPlayer.cpp 2008-05-24 18:53:41 UTC (rev 561) +++ trunk/jazz/src/AlsaPlayer.cpp 2008-05-24 19:03:32 UTC (rev 562) @@ -495,14 +495,18 @@ case StatSysEx: { - tSysEx *s = pEvent->IsSysEx(); + tSysEx* pSysEx = pEvent->IsSysEx(); // prepend 0xf0 - char *buf = new char[s->Length + 1]; - buf[0] = 0xF0; - memcpy(buf + 1, s->mpData, s->Length); - set_event_header(&ev, pEvent->GetClock(), s->Length + 1, buf); + char* pBuffer = new char[pSysEx->GetDataLength() + 1]; + pBuffer[0] = 0xF0; + memcpy(pBuffer + 1, pSysEx->GetData(), pSysEx->GetDataLength()); + set_event_header( + &ev, + pEvent->GetClock(), + pSysEx->GetDataLength() + 1, + pBuffer); rc = write(&ev, now); - delete [] buf; + delete [] pBuffer; } break; Modified: trunk/jazz/src/Dialogs.cpp =================================================================== --- trunk/jazz/src/Dialogs.cpp 2008-05-24 18:53:41 UTC (rev 561) +++ trunk/jazz/src/Dialogs.cpp 2008-05-24 19:03:32 UTC (rev 562) @@ -1140,21 +1140,24 @@ }; -tSysexDlg::tSysexDlg(tSysEx *s, JZPianoWindow* w, JZTrack *t) - : tEventDlg(s, w, t) +tSysexDlg::tSysexDlg(tSysEx* pSysEx, JZPianoWindow* w, JZTrack *t) + : tEventDlg(pSysEx, w, t) { - Event = s; + Event = pSysEx; char hexbyte[10]; str = new char[256]; str[0] = 0; - if (s->Length) - strcat( str, "f0 " ); + if (pSysEx->GetDataLength()) + { + strcat(str, "f0 "); + } - for (int i = 0; i < s->Length; i++) + const unsigned char* pData = pSysEx->GetData(); + for (int i = 0; i < pSysEx->GetDataLength(); i++) { - sprintf(hexbyte, "%02x ", s->mpData[i]); + sprintf(hexbyte, "%02x ", pData[i]); strcat(str, hexbyte); } } @@ -1223,9 +1226,8 @@ void tSysexDlg::AddProperties() { // char label1[100]; - unsigned char* uptr; - if (Event->IsSysEx()->Length) + if (Event->IsSysEx()->GetDataLength()) { // sprintf( // label1, @@ -1240,16 +1242,16 @@ Event->IsSysEx()))), "string"));//r/o - uptr = gpSynth->GetSysexValPtr(Event->IsSysEx()); + const unsigned char* pData = gpSynth->GetSysexValPtr(Event->IsSysEx()); - if (uptr) + if (pData) { ostringstream Oss; Oss << "First data byte is at offset " - << uptr - Event->IsSysEx()->mpData + 1 << ", value " - << setw(2) << hex << static_cast<int>(*uptr) - << dec << " (" << static_cast<int>(*uptr) << " decimal)"; + << pData - Event->IsSysEx()->GetData() + 1 << ", value " + << setw(2) << hex << static_cast<int>(*pData) + << dec << " (" << static_cast<int>(*pData) << " decimal)"; sheet->AddProperty(new wxProperty( Oss.str().c_str(), wxPropertyValue((char*)""), Modified: trunk/jazz/src/Events.cpp =================================================================== --- trunk/jazz/src/Events.cpp 2008-05-24 18:53:41 UTC (rev 561) +++ trunk/jazz/src/Events.cpp 2008-05-24 19:03:32 UTC (rev 562) @@ -185,9 +185,30 @@ } //***************************************************************************** +// Description: +// This is the meta event class definition. //***************************************************************************** //----------------------------------------------------------------------------- +// Description: +// This function fixed the checksum bytes at the end of the data stream. //----------------------------------------------------------------------------- +void tMetaEvent::FixCheckSum() +{ + unsigned char Sum = 0x00; + for (unsigned short i = 4; i < (mLength - 2); ++i) + { + Sum += mpData[i]; + } + mpData[mLength - 2] = (0x80 - (Sum & 0x7f)) & 0x7f; + mpData[mLength - 1] = 0xf7; +} + +//***************************************************************************** +// Description: +// This is the System Exclusive (SysEx) event class definition. +//***************************************************************************** +//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- int tSysEx::GetPitch() const { edb(); Modified: trunk/jazz/src/Events.h =================================================================== --- trunk/jazz/src/Events.h 2008-05-24 18:53:41 UTC (rev 561) +++ trunk/jazz/src/Events.h 2008-05-24 19:03:32 UTC (rev 562) @@ -898,7 +898,8 @@ unsigned char mValue; }; - +//***************************************************************************** +//***************************************************************************** class tProgram : public tChannelEvent { public: @@ -969,27 +970,27 @@ unsigned char mProgram; }; - - +//***************************************************************************** +//***************************************************************************** class tMetaEvent : public JZEvent { public: - unsigned char* mpData; - unsigned short Length; - tMetaEvent( int Clock, unsigned char sta, - unsigned char* dat, - unsigned short len) - : JZEvent(Clock, sta) + unsigned char* pData, + unsigned short Length) + : JZEvent(Clock, sta), + mpData(0), + mLength(Length) { - Length = len; - mpData = new unsigned char [len + 1]; - if (dat) - memcpy(mpData, dat, len); - mpData[len] = 0; + mpData = new unsigned char [Length + 1]; + if (pData) + { + memcpy(mpData, pData, Length); + } + mpData[Length] = 0; } virtual ~tMetaEvent() @@ -1000,7 +1001,7 @@ virtual int Write(JZWriteBase &io) { edb(); - return io.Write(this, mpData, Length); + return io.Write(this, mpData, mLength); } virtual tMetaEvent* IsMetaEvent() @@ -1012,23 +1013,47 @@ virtual JZEvent* Copy() const { edb(); - return new tMetaEvent(mClock, mStat, mpData, Length); + return new tMetaEvent(mClock, mStat, mpData, mLength); } -}; + const unsigned char* GetData() const + { + return mpData; + } + unsigned short GetDataLength() const + { + return mLength; + } + virtual void FixCheckSum(); + + protected: + + unsigned char* mpData; + unsigned short mLength; +}; + +//***************************************************************************** +// Description: +// This event contains proprietary information for Jazz++. This event +// should should not go into a track itself but is read/written from/to +// the file. +//***************************************************************************** class tJazzMeta : public tMetaEvent { - // proprietary information of jazz stored to a track. This event - // should not go into a track itself but is read/written from/to - // the file. public: - enum { DATALEN = 20 }; - tJazzMeta(int Clock, unsigned char *dat, unsigned short len) - : tMetaEvent(Clock, StatJazzMeta, dat, len) + + enum { + DATALEN = 20 + }; + + tJazzMeta(int Clock, unsigned char* pData, unsigned short Length) + : tMetaEvent(Clock, StatJazzMeta, pData, Length) + { } + tJazzMeta() : tMetaEvent(0, StatJazzMeta, 0, DATALEN) { @@ -1036,18 +1061,22 @@ memcpy(mpData, "JAZ2", 4); mpData[4] = 1; // version or so } + char GetAudioMode() const { return mpData[5]; } + void SetAudioMode(char c) { mpData[5] = c; } + char GetTrackState() const { return mpData[6]; } + void SetTrackState(char c) { mpData[6] = c; @@ -1084,17 +1113,18 @@ virtual JZEvent* Copy() const { edb(); - return new tJazzMeta(mClock, mpData, Length); + return new tJazzMeta(mClock, mpData, mLength); } }; - +//***************************************************************************** +//***************************************************************************** class tSysEx : public tMetaEvent { public: - tSysEx(int Clock, unsigned char *dat, unsigned short len) - : tMetaEvent(Clock, StatSysEx, dat, len) + tSysEx(int Clock, unsigned char* pData, unsigned short Length) + : tMetaEvent(Clock, StatSysEx, pData, Length) { } @@ -1107,19 +1137,21 @@ virtual JZEvent* Copy() const { edb(); - return new tSysEx(mClock, mpData, Length); + return new tSysEx(mClock, mpData, mLength); } // todo virtual int GetPitch() const; }; +//***************************************************************************** +//***************************************************************************** class tSongPtr : public tMetaEvent { public: - tSongPtr(int Clock, unsigned char *dat, unsigned short len) - : tMetaEvent(Clock, StatSongPtr, dat, len) + tSongPtr(int Clock, unsigned char* pData, unsigned short Length) + : tMetaEvent(Clock, StatSongPtr, pData, Length) { } @@ -1132,15 +1164,17 @@ virtual JZEvent* Copy() const { edb(); - return new tSongPtr(mClock, mpData, Length); + return new tSongPtr(mClock, mpData, mLength); } }; +//***************************************************************************** +//***************************************************************************** class tMidiClock : public tMetaEvent { public: - tMidiClock(int Clock, unsigned char *dat, unsigned short len) - : tMetaEvent(Clock, StatMidiClock, dat, len) + tMidiClock(int Clock, unsigned char* pData, unsigned short Length) + : tMetaEvent(Clock, StatMidiClock, pData, Length) { } @@ -1158,16 +1192,18 @@ virtual JZEvent* Copy() const { edb(); - return new tMidiClock(mClock, mpData, Length); + return new tMidiClock(mClock, mpData, mLength); } }; +//***************************************************************************** +//***************************************************************************** class tStartPlay : public tMetaEvent { public: - tStartPlay(int Clock, unsigned char *dat, unsigned short len) - : tMetaEvent(Clock, StatStartPlay, dat, len) + tStartPlay(int Clock, unsigned char* pData, unsigned short Length) + : tMetaEvent(Clock, StatStartPlay, pData, Length) { } @@ -1185,16 +1221,18 @@ virtual JZEvent* Copy() const { edb(); - return new tStartPlay(mClock, mpData, Length); + return new tStartPlay(mClock, mpData, mLength); } }; +//***************************************************************************** +//***************************************************************************** class tContPlay : public tMetaEvent { public: - tContPlay(int Clock, unsigned char *dat, unsigned short len) - : tMetaEvent(Clock, StatContPlay, dat, len) + tContPlay(int Clock, unsigned char* pData, unsigned short Length) + : tMetaEvent(Clock, StatContPlay, pData, Length) { } @@ -1212,16 +1250,18 @@ virtual JZEvent* Copy() const { edb(); - return new tContPlay(mClock, mpData, Length); + return new tContPlay(mClock, mpData, mLength); } }; +//***************************************************************************** +//***************************************************************************** class tStopPlay : public tMetaEvent { public: - tStopPlay(int Clock, unsigned char *dat, unsigned short len) - : tMetaEvent(Clock, StatStopPlay, dat, len) + tStopPlay(int Clock, unsigned char* pData, unsigned short Length) + : tMetaEvent(Clock, StatStopPlay, pData, Length) { } @@ -1239,21 +1279,23 @@ virtual JZEvent* Copy() const { edb(); - return new tStopPlay(mClock, mpData, Length); + return new tStopPlay(mClock, mpData, mLength); } }; +//***************************************************************************** +//***************************************************************************** class tText : public tMetaEvent { public: - tText(int Clock, unsigned char *dat, unsigned short len) - : tMetaEvent(Clock, StatText, dat, len) + tText(int Clock, unsigned char* pData, unsigned short Length) + : tMetaEvent(Clock, StatText, pData, Length) { } - tText(int Clock, unsigned char *dat) - : tMetaEvent(Clock, StatText, dat, strlen((const char*)dat)) + tText(int Clock, unsigned char* pData) + : tMetaEvent(Clock, StatText, pData, strlen((const char*)pData)) { } @@ -1266,7 +1308,7 @@ virtual JZEvent* Copy() const { edb(); - return new tText(mClock, mpData, Length); + return new tText(mClock, mpData, mLength); } virtual unsigned char* GetText() @@ -1275,14 +1317,14 @@ } }; - - +//***************************************************************************** +//***************************************************************************** class tCopyright : public tMetaEvent { public: - tCopyright(int Clock, unsigned char *dat, unsigned short len) - : tMetaEvent(Clock, StatCopyright, dat, len) + tCopyright(int Clock, unsigned char* pData, unsigned short Length) + : tMetaEvent(Clock, StatCopyright, pData, Length) { } @@ -1295,23 +1337,25 @@ virtual JZEvent* Copy() const { edb(); - return new tCopyright(mClock, mpData, Length); + return new tCopyright(mClock, mpData, mLength); } }; +//***************************************************************************** +//***************************************************************************** class tTrackName : public tMetaEvent { public: - tTrackName(int Clock, unsigned char *dat, unsigned short len) - : tMetaEvent(Clock, StatTrackName, dat, len) + tTrackName(int Clock, unsigned char* pData, unsigned short Length) + : tMetaEvent(Clock, StatTrackName, pData, Length) { // SN++ Diese Restriktion ist viel zu hart. Es genuegt, den Namen im Mixerdialog // zu begrenzen!!! /* #ifdef wx_motif // clip to 16 chars - if (len > 16) + if (Length > 16) { mpData[16] = 0; Length = 16; @@ -1329,18 +1373,18 @@ virtual JZEvent* Copy() const { edb(); - return new tTrackName(mClock, mpData, Length); + return new tTrackName(mClock, mpData, mLength); } }; - - +//***************************************************************************** +//***************************************************************************** class tMarker : public tMetaEvent { public: - tMarker(int Clock, unsigned char *dat, unsigned short len) - : tMetaEvent(Clock, StatMarker, dat, len) + tMarker(int Clock, unsigned char* pData, unsigned short Length) + : tMetaEvent(Clock, StatMarker, pData, Length) { } @@ -1353,16 +1397,18 @@ virtual JZEvent* Copy() const { edb(); - return new tMarker(mClock, mpData, Length); + return new tMarker(mClock, mpData, mLength); } }; +//***************************************************************************** // the meaning of this event is to be able to reference a track and have that // play the instant the event is executed. You can also transpose the // referenced track and loop it for the duration of the playtrack event. This // makes it possible to compose in a structured fashion. // // Execution of the events takes place in song.cpp. +//***************************************************************************** class tPlayTrack : public tMetaEvent { public: @@ -1377,20 +1423,20 @@ // that seems to be for serialization. int eventlength; - tPlayTrack(int Clock, unsigned char *chardat, unsigned short len) - : tMetaEvent(Clock, StatPlayTrack, chardat, len) + tPlayTrack(int Clock, unsigned char *chardat, unsigned short Length) + : tMetaEvent(Clock, StatPlayTrack, chardat, Length) { - int *dat = (int *)chardat; + int* pData = (int *)chardat; // Fill in the fields from the data. track = 0; transpose = 0; eventlength = 0; - if (dat!=0) + if (pData != 0) { - track = dat[0]; - transpose = dat[1]; - eventlength = dat[2]; + track = pData[0]; + transpose = pData[1]; + eventlength = pData[2]; } } @@ -1410,16 +1456,16 @@ virtual int Write(JZWriteBase &io) { - mpData = new unsigned char [Length + 1]; - int* dat = (int *)mpData; - dat[0] = track; - dat[1] = transpose; - dat[2] = eventlength; - Length = sizeof(int) * 3; + mpData = new unsigned char [mLength + 1]; + int* pData = (int *)mpData; + pData[0] = track; + pData[1] = transpose; + pData[2] = eventlength; + mLength = sizeof(int) * 3; edb(); - mpData[Length] = 0; - return io.Write(this, mpData, Length); + mpData[mLength] = 0; + return io.Write(this, mpData, mLength); } virtual tPlayTrack* IsPlayTrack() @@ -1442,8 +1488,8 @@ } }; - - +//***************************************************************************** +//***************************************************************************** class tSetTempo : public JZEvent { public: @@ -1504,13 +1550,16 @@ } }; +//***************************************************************************** +//***************************************************************************** class tMtcOffset : public tMetaEvent { public: - tMtcOffset(int Clock, unsigned char *dat, unsigned short len) - : tMetaEvent(Clock, StatMtcOffset, dat, len) + tMtcOffset(int Clock, unsigned char* pData, unsigned short Length) + : tMetaEvent(Clock, StatMtcOffset, pData, Length) { } + virtual tMtcOffset* IsMtcOffset() { edb(); @@ -1520,11 +1569,12 @@ virtual JZEvent* Copy() const { edb(); - return new tMtcOffset(mClock, mpData, Length); + return new tMtcOffset(mClock, mpData, mLength); } }; - +//***************************************************************************** +//***************************************************************************** class tTimeSignat : public JZEvent { public: @@ -1573,8 +1623,9 @@ } }; -// End of track JAVE new event(it is a standard type, i want -// it to define track loop points, as defined by the midi standard) +//***************************************************************************** +// This is the end-of-track event. +//***************************************************************************** class tEndOfTrack : public JZEvent { public: @@ -1602,8 +1653,8 @@ } }; - - +//***************************************************************************** +//***************************************************************************** class tKeySignat : public JZEvent { public: @@ -1635,7 +1686,9 @@ } }; -// SN++ Aftertouch +//***************************************************************************** +// Aftertouch +//***************************************************************************** class tKeyPressure: public tChannelEvent { public: @@ -1689,7 +1742,9 @@ } }; -// SN++ Channel Pressure +//***************************************************************************** +// Channel Pressure +//***************************************************************************** class tChnPressure : public tChannelEvent { public: Modified: trunk/jazz/src/Synth.cpp =================================================================== --- trunk/jazz/src/Synth.cpp 2008-05-24 18:53:41 UTC (rev 561) +++ trunk/jazz/src/Synth.cpp 2008-05-24 19:03:32 UTC (rev 562) @@ -487,148 +487,176 @@ } } -int tSynthSysex::GetId(const tSysEx* s) const +int tSynthSysex::GetId(const tSysEx* pSysEx) const { - if (!s) - return SX_NONE; + if (!pSysEx) + { + return SX_NONE; + } - switch (s->mpData[0]) - { + const unsigned char* pData = pSysEx->GetData(); + switch (pData[0]) + { case 0x7e: - // GM ON ? - if (!memcmp(sxdata[SX_GM_ON], s->mpData, s->Length)) - { - return SX_GM_ON; - } - else - { - return SX_UNIV_NON_REALTIME; - } - break; + // GM ON ? + if (!memcmp(sxdata[SX_GM_ON], pData, pSysEx->GetDataLength())) + { + return SX_GM_ON; + } + else + { + return SX_UNIV_NON_REALTIME; + } + break; case 0x7f: - // GM MasterVol ? - if (!memcmp(sxdata[SX_GM_MasterVol], s->mpData, 4)) - { - return SX_GM_MasterVol; - } - else - { - return SX_UNIV_REALTIME; - } - break; + // GM MasterVol ? + if (!memcmp(sxdata[SX_GM_MasterVol], pData, 4)) + { + return SX_GM_MasterVol; + } + else + { + return SX_UNIV_REALTIME; + } + break; case 0x41: - // Roland! + //------- + // Roland + //------- - // GS DT1? - if ((s->mpData[2] == 0x42) && (s->mpData[3] == 0x12)) - { - register unsigned char a1 = s->mpData[4]; - register unsigned char a2 = s->mpData[5]; - register unsigned char a3 = s->mpData[6]; + // GS DT1? + if (pData[2] == 0x42 && pData[3] == 0x12) + { + register unsigned char a1 = pData[4]; + register unsigned char a2 = pData[5]; + register unsigned char a3 = pData[6]; - if (a1 == 0x40) - { - // MSB address 0x40: - if (a2 == 0x00) - { - // 0x40 0x00 0x?? - switch (a3) - { - case 0x7f: - return SX_GS_ON; - case 0x04: - return SX_GS_MasterVol; - case 0x06: - return SX_GS_MasterPan; - default: - break; - } - } - else if (a2 == 0x01) - { - // 0x40 0x01 0x?? - if ((a3 >= 0x30) && (a3 <= 0x36)) - // reverb settings - return SX_GS_ReverbMacro + (a3 - 0x30); - else if ((a3 >= 0x38) && (a3 <= 0x3f)) - // chorus settings - return SX_GS_ChorusMacro + (a3 - 0x38); - else if (a3 == 0x10) - return SX_GS_PartialReserve; - } - else if ((a2 & 0xf0) == 0x10) - { - // 0x40 0x1n 0x?? - switch (a3) - { - case 0x02: - return SX_GS_RxChannel; + if (a1 == 0x40) + { + // MSB address 0x40: + if (a2 == 0x00) + { + // 0x40 0x00 0x?? + switch (a3) + { + case 0x7f: + return SX_GS_ON; + case 0x04: + return SX_GS_MasterVol; + case 0x06: + return SX_GS_MasterPan; + default: + break; + } + } + else if (a2 == 0x01) + { + // 0x40 0x01 0x?? + if (a3 >= 0x30 && a3 <= 0x36) + { + // These are reverb settings. + return SX_GS_ReverbMacro + (a3 - 0x30); + } + else if (a3 >= 0x38 && a3 <= 0x3f) + { + // These are chorus settings. + return SX_GS_ChorusMacro + (a3 - 0x38); + } + else if (a3 == 0x10) + { + return SX_GS_PartialReserve; + } + } + else if ((a2 & 0xf0) == 0x10) + { + // 0x40 0x1n 0x?? + switch (a3) + { + case 0x02: + return SX_GS_RxChannel; - case 0x15: - return SX_GS_UseForRhythm; + case 0x15: + return SX_GS_UseForRhythm; - case 0x1f: - return SX_GS_CC1CtrlNo; + case 0x1f: + return SX_GS_CC1CtrlNo; - case 0x20: - return SX_GS_CC2CtrlNo; - default: - break; - } - } - else if ((a2 & 0xf0) == 0x20) - { - // 0x40 0x2n 0x?? - if (a3 <= 0x0a) - return SX_GS_ModPitch + (a3 - 0x00); - else if ((a3 >= 0x10) && (a3 <= 0x1a)) - return SX_GS_BendPitch + (a3 - 0x10); - else if ((a3 >= 0x20) && (a3 <= 0x2a)) - return SX_GS_CafPitch + (a3 - 0x20); - else if ((a3 >= 0x30) && (a3 <= 0x3a)) - return SX_GS_PafPitch + (a3 - 0x30); - else if ((a3 >= 0x40) && (a3 <= 0x4a)) - return SX_GS_CC1Pitch + (a3 - 0x40); - else if ((a3 >= 0x50) && (a3 <= 0x5a)) - return SX_GS_CC2Pitch + (a3 - 0x50); - } - } // end a1 == 0x40 - } // end GS DT1 + case 0x20: + return SX_GS_CC2CtrlNo; - if ((s->mpData[3] == 0x12) && (s->Length >= 10)) - { - return SX_ROLAND_DT1; - } - else if ((s->mpData[3] == 0x11) && (s->Length >= 12)) - { - return SX_ROLAND_RQ1; - } - else - { - return SX_ROLAND_UNKNOWN; - } + default: + break; + } + } + else if ((a2 & 0xf0) == 0x20) + { + // 0x40 0x2n 0x?? + if (a3 <= 0x0a) + { + return SX_GS_ModPitch + (a3 - 0x00); + } + else if (a3 >= 0x10 && a3 <= 0x1a) + { + return SX_GS_BendPitch + (a3 - 0x10); + } + else if (a3 >= 0x20 && a3 <= 0x2a) + { + return SX_GS_CafPitch + (a3 - 0x20); + } + else if (a3 >= 0x30 && a3 <= 0x3a) + { + return SX_GS_PafPitch + (a3 - 0x30); + } + else if (a3 >= 0x40 && a3 <= 0x4a) + { + return SX_GS_CC1Pitch + (a3 - 0x40); + } + else if (a3 >= 0x50 && a3 <= 0x5a) + { + return SX_GS_CC2Pitch + (a3 - 0x50); + } + } + } // end a1 == 0x40 + } // end GS DT1 - break; // end Roland + if (pData[3] == 0x12 && pSysEx->GetDataLength() >= 10) + { + return SX_ROLAND_DT1; + } + else if (pData[3] == 0x11 && pSysEx->GetDataLength() >= 12) + { + return SX_ROLAND_RQ1; + } + else + { + return SX_ROLAND_UNKNOWN; + } + break; + // end Roland + case 0x43: - // Yamaha! + //------- + // Yamaha + //------- + // XG Native? - if (((s->mpData[1] & 0xf0) == 0x10) && (s->mpData[2] == 0x4c)) + if (((pData[1] & 0xf0) == 0x10) && pData[2] == 0x4c) { - register unsigned char a1 = s->mpData[3]; - register unsigned char a2 = s->mpData[4]; - register unsigned char a3 = s->mpData[5]; + register unsigned char a1 = pData[3]; + register unsigned char a2 = pData[4]; + register unsigned char a3 = pData[5]; // Multipart? if (a1 == 0x08) { - if ((a3 >= 0x1d) && (a3 <= 0x28)) + if (a3 >= 0x1d && a3 <= 0x28) { return SX_XG_ModPitch + (a3 - 0x1d); } - else if ((a3 >= 0x4d) && (a3 <= 0x66)) + else if (a3 >= 0x4d && a3 <= 0x66) { return SX_XG_CafPitch + (a3 - 0x4d); } @@ -643,7 +671,7 @@ } // Effect 1? - else if ((a1 == 0x02) && (a2 == 0x01)) + else if (a1 == 0x02 && a2 == 0x01) { if (a3 == 0x00) { @@ -654,8 +682,9 @@ return SX_XG_ChorusMacro; } } + // Multi EQ? - else if ((a1 == 0x02) && (a2 == 0x40)) + else if (a1 == 0x02 && a2 == 0x40) { if (a3 == 0x00) { @@ -664,17 +693,17 @@ } // XG system on? - else if ((a1 == 0x00) && (a2 == 0x00) && (a3 == 0x7e)) + else if (a1 == 0x00 && a2 == 0x00 && a3 == 0x7e) { return SX_XG_ON; } } - if (s->mpData[2] == 0x4c) + if (pData[2] == 0x4c) { return SX_XG_NATIVE; } - else if (s->mpData[2] == 0x49) + else if (pData[2] == 0x49) { return SX_MU80_NATIVE; } @@ -683,58 +712,64 @@ return SX_YAMAHA_UNKNOWN; } - break; // end Yamaha + break; + // end Yamaha default: break; - } + } - // Not recognized - return SX_NONE; + // Not recognized + return SX_NONE; } -unsigned char* tSynthSysex::GetValPtr(const tSysEx* s) const +const unsigned char* tSynthSysex::GetValPtr(const tSysEx* pSysEx) const { - if (!s) + if (!pSysEx) { return 0; } - switch (s->mpData[0]) + const unsigned char* pData = pSysEx->GetData(); + switch (pData[0]) { case 0x7f: // GM MasterVol? - if (!memcmp(sxdata[SX_GM_MasterVol], s->mpData,4)) + if (!memcmp(sxdata[SX_GM_MasterVol], pData, 4)) { - return &s->mpData[4]; + return &pData[4]; } break; case 0x41: - // Roland! + //------- + // Roland + //------- + // GS DT1? - if ((s->mpData[2] == 0x42) && (s->mpData[3] == 0x12) && (s->Length >= 10)) + if (pData[2] == 0x42 && pData[3] == 0x12 && pSysEx->GetDataLength() >= 10) { - return &s->mpData[7]; + return &pData[7]; } // other DT1 or RQ1 ? else if ( - ((s->mpData[3] == 0x12) && (s->Length >= 10)) || - ((s->mpData[3] == 0x11) && (s->Length >= 12))) + (pData[3] == 0x12 && pSysEx->GetDataLength() >= 10) || + (pData[3] == 0x11 && pSysEx->GetDataLength() >= 12)) { - return &s->mpData[7]; + return &pData[7]; } break; case 0x43: // Yamaha! // XG Native? - if (((s->mpData[1] & 0xf0) == 0x10) && (s->mpData[2] == 0x4c)) + if (((pData[1] & 0xf0) == 0x10) && pData[2] == 0x4c) { - return &s->mpData[6]; + return &pData[6]; } break; + default: break; } @@ -743,73 +778,66 @@ return 0; } -unsigned char * tSynthSysex::GetChaPtr(const tSysEx* s) +//----------------------------------------------------------------------------- +// Description: +// Return a pointer to the byte with the channel (if any). +//----------------------------------------------------------------------------- +const unsigned char* tSynthSysex::GetChaPtr(const tSysEx* pSysEx) { - // Get the byte where the channel number is (if any) + if (!pSysEx) + { + return 0; + } - if (!s) - { - return 0; - } - - switch (s->mpData[0]) - { + const unsigned char* pData = pSysEx->GetData(); + switch (pData[0]) + { case 0x41: - // Roland! - // GS DT1 + address 0x40? - if ( - (s->mpData[2] == 0x42) && - (s->mpData[3] == 0x12) && - (s->mpData[4] == 0x40)) - { - if ( - ((s->mpData[5] & 0xf0) == 0x10) || - ((s->mpData[5] & 0xf0) == 0x20)) - { - return &s->mpData[5]; - } - } - break; + //------- + // Roland + //------- + // GS DT1 + address 0x40? + if (pData[2] == 0x42 && pData[3] == 0x12 && pData[4] == 0x40) + { + if ((pData[5] & 0xf0) == 0x10 || (pData[5] & 0xf0) == 0x20) + { + return &pData[5]; + } + } + break; + case 0x43: - // Yamaha! - // XG Native multipart? - if ( - ((s->mpData[1] & 0xf0) == 0x10) && - (s->mpData[2] == 0x4c) && - (s->mpData[3] == 0x08)) - { - return &s->mpData[4]; - } - break; + //------- + // Yamaha + //------- + + // XG Native multipart? + if ((pData[1] & 0xf0) == 0x10 && pData[2] == 0x4c && pData[3] == 0x08) + { + return &pData[4]; + } + break; default: - break; - } + break; + } - // Not recognized - return 0; + // Not recognized. + return 0; } //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- -void tSynthSysex::FixCheckSum(tSysEx* s) +void tSynthSysex::FixCheckSum(tSysEx* pSysEx) { + const unsigned char* pData = pSysEx->GetData(); if ( - (s->mpData[0] == 0x41) && - (((s->mpData[3] == 0x12) && (s->Length >= 10)) || - ((s->mpData[3] == 0x11) && (s->Length >= 12)))) + pData[0] == 0x41 && + ((pData[3] == 0x12 && pSysEx->GetDataLength() >= 10) || + (pData[3] == 0x11 && pSysEx->GetDataLength() >= 12))) { - // Roland RQ1 or DT1 - int len = s->Length; - unsigned char *sx = s->mpData; - unsigned char sum = 0x00; - - for (int i = 4; i < (len-2); i++) - { - sum += sx[i]; - } - sx[len - 2] = (0x80 - (sum & 0x7f)) & 0x7f; - sx[len-1] = 0xf7; + // The synthesizer is a Roland RQ1 or DT1. + pSysEx->FixCheckSum(); } } @@ -852,7 +880,7 @@ int len = sxlen[id] + datalen - 1; unsigned char* sx = new unsigned char[len]; memcpy(sx, sxdata[id], sxlen[id]); - tSysEx* s = 0; + tSysEx* pSysEx = 0; if (id == SX_GM_MasterVol) { @@ -862,7 +890,7 @@ else sx[4] = 0; sx[5] = val[0]; // MSB - s = new tSysEx(clk, sx, len); + pSysEx = new tSysEx(clk, sx, len); } else if ((id > SX_GS_ON) && (id < SX_XG_ON)) { @@ -880,7 +908,7 @@ sum += sx[i]; sx[len - 2] = (0x80 - (sum & 0x7f)) & 0x7f; sx[len-1] = 0xf7; - s = new tSysEx(clk, sx, len); + pSysEx = new tSysEx(clk, sx, len); } else if (id > SX_XG_ON) { @@ -895,11 +923,11 @@ sx[4] = channel - 1; } sx[len-1] = 0xf7; - s = new tSysEx(clk, sx, len); + pSysEx = new tSysEx(clk, sx, len); } delete sx; - return s; + return pSysEx; } Modified: trunk/jazz/src/Synth.h =================================================================== --- trunk/jazz/src/Synth.h 2008-05-24 18:53:41 UTC (rev 561) +++ trunk/jazz/src/Synth.h 2008-05-24 19:03:32 UTC (rev 562) @@ -245,10 +245,11 @@ int GetId(const tSysEx* s) const; // Get pointer to the data value (if any) - unsigned char* GetValPtr(const tSysEx* s) const; + const unsigned char* GetValPtr(const tSysEx* pSysEx) const; - // Get pointer to the byte with the channel (if any) - unsigned char* GetChaPtr(const tSysEx* s); + // Description: + // Return a pointer to the byte with the channel (if any). + const unsigned char* GetChaPtr(const tSysEx* pSysEx); // Fix checksum byte (if any) void FixCheckSum( tSysEx *s ); @@ -309,14 +310,14 @@ return Sysex.GetId( s ); } - virtual unsigned char * GetSysexValPtr( tSysEx *s ) const + virtual const unsigned char* GetSysexValPtr(tSysEx* pSysEx) const { - return Sysex.GetValPtr( s ); + return Sysex.GetValPtr(pSysEx); } - virtual unsigned char * GetSysexChaPtr( tSysEx *s ) + virtual const unsigned char* GetSysexChaPtr(tSysEx* pSysEx) { - return Sysex.GetChaPtr( s ); + return Sysex.GetChaPtr(pSysEx); } virtual void FixSysexCheckSum( tSysEx *s ) Modified: trunk/jazz/src/Track.cpp =================================================================== --- trunk/jazz/src/Track.cpp 2008-05-24 18:53:41 UTC (rev 561) +++ trunk/jazz/src/Track.cpp 2008-05-24 19:03:32 UTC (rev 562) @@ -90,9 +90,10 @@ static double framesPerSecond[] = { 24.0, 25.0, 30.0, 30.0 }; -tMtcTime::tMtcTime(tMtcOffset *s) +tMtcTime::tMtcTime(tMtcOffset* pMtcOffset) { - type = (tMtcType) ((s->mpData[0] & 0x60) >> 5); + const unsigned char* pData = pMtcOffset->GetData(); + type = (tMtcType) ((pData[0] & 0x60) >> 5); if (type < Mtc24) { type = Mtc24; @@ -101,10 +102,10 @@ { type = Mtc30Ndf; } - hour = s->mpData[0] & 0x1f; - min = s->mpData[1]; - sec = s->mpData[2]; - fm = s->mpData[3]; + hour = pData[0] & 0x1f; + min = pData[1]; + sec = pData[2]; + fm = pData[3]; } tMtcTime::tMtcTime(int millisec, tMtcType t) @@ -567,7 +568,7 @@ tEventArray::tEventArray() : tSimpleEventArray(), - mName(0), + mpName(0), Copyright(0), mPatch(0), Speed(0), @@ -599,8 +600,8 @@ tSimpleEventArray::Clear(); -// delete mName; - mName = 0; +// delete mpName; + mpName = 0; Copyright = 0; @@ -738,8 +739,8 @@ Sort(); // moves all killed events to the end of array // clear track defaults -// delete mName; - mName = 0; +// delete mpName; + mpName = 0; Copyright = 0; @@ -828,9 +829,9 @@ continue; } - if (!mName) + if (!mpName) { - mName = e->IsTrackName(); + mpName = e->IsTrackName(); } if (!Copyright) @@ -1774,17 +1775,17 @@ else if ((s = e->IsSysEx()) != 0) { // Check for sysex that contains channel number - unsigned char *chaptr = gpSynth->GetSysexChaPtr(s); - if (chaptr) + const unsigned char* pChannel = gpSynth->GetSysexChaPtr(s); + if (pChannel) { if (gpSynth->IsXG()) { - *chaptr = trk->Channel - 1; + *pChannel = trk->Channel - 1; } else { - *chaptr &= 0xf0; - *chaptr |= sysex_channel(trk->Channel); + *pChannel &= 0xf0; + *pChannel |= sysex_channel(trk->Channel); } s = (tSysEx *) e->Copy(); @@ -2114,7 +2115,7 @@ { if (Copyright) { - return (const char *)Copyright->mpData; + return (const char *)Copyright->GetData(); } return ""; } @@ -2143,9 +2144,9 @@ const char* JZTrack::GetName() { - if (mName) + if (mpName) { - return (const char*)mName->mpData; + return (const char*)mpName->GetData(); } return ""; } @@ -2154,9 +2155,9 @@ void JZTrack::SetName(const char* pTrackName) { - if (mName) + if (mpName) { - Kill(mName); + Kill(mpName); } if (strlen(pTrackName)) { @@ -2713,11 +2714,12 @@ int JZTrack::GetModulationSysex(int msp) { - unsigned char *valp = gpSynth->GetSysexValPtr(ModulationSettings[msp]); + const unsigned char* pValue = + gpSynth->GetSysexValPtr(ModulationSettings[msp]); - if (valp) + if (pValue) { - return *valp + 1; + return *pValue + 1; } return 0; @@ -2745,11 +2747,11 @@ int JZTrack::GetBenderSysex(int bsp) { - unsigned char *valp = gpSynth->GetSysexValPtr(BenderSettings[bsp]); + const unsigned char* pValue = gpSynth->GetSysexValPtr(BenderSettings[bsp]); - if (valp) + if (pValue) { - return *valp + 1; + return *pValue + 1; } return 0; @@ -2777,11 +2779,11 @@ int JZTrack::GetCAfSysex(int csp) { - unsigned char *valp = gpSynth->GetSysexValPtr(CAfSettings[csp]); + const unsigned char* pValue = gpSynth->GetSysexValPtr(CAfSettings[csp]); - if (valp) + if (pValue) { - return *valp + 1; + return *pValue + 1; } return 0; @@ -2809,11 +2811,11 @@ int JZTrack::GetPAfSysex(int psp) { - unsigned char *valp = gpSynth->GetSysexValPtr(PAfSettings[psp]); + const unsigned char* pValue = gpSynth->GetSysexValPtr(PAfSettings[psp]); - if (valp) + if (pValue) { - return *valp + 1; + return *pValue + 1; } return 0; @@ -2841,11 +2843,11 @@ int JZTrack::GetCC1Sysex(int csp) { - unsigned char *valp = gpSynth->GetSysexValPtr(CC1Settings[csp]); + const unsigned char* pValue = gpSynth->GetSysexValPtr(CC1Settings[csp]); - if (valp) + if (pValue) { - return *valp + 1; + return *pValue + 1; } return 0; @@ -2873,11 +2875,11 @@ int JZTrack::GetCC2Sysex(int csp) { - unsigned char *valp = gpSynth->GetSysexValPtr(CC2Settings[csp]); + const unsigned char* pValue = gpSynth->GetSysexValPtr(CC2Settings[csp]); - if (valp) + if (pValue) { - return *valp + 1; + return *pValue + 1; } return 0; @@ -2903,11 +2905,11 @@ int JZTrack::GetCC1ControllerNr() { - unsigned char *valp = gpSynth->GetSysexValPtr(CC1ControllerNr); + const unsigned char* pValue = gpSynth->GetSysexValPtr(CC1ControllerNr); - if (valp) + if (pValue) { - return *valp + 1; + return *pValue + 1; } return 0; @@ -2935,11 +2937,11 @@ int JZTrack::GetCC2ControllerNr() { - unsigned char *valp = gpSynth->GetSysexValPtr(CC2ControllerNr); + const unsigned char* pValue = gpSynth->GetSysexValPtr(CC2ControllerNr); - if (valp) + if (pValue) { - return *valp + 1; + return *pValue + 1; } return 0; @@ -2967,15 +2969,15 @@ int JZTrack::GetReverbType(int lsb) { - unsigned char *valp = gpSynth->GetSysexValPtr(ReverbType); + const unsigned char* pValue = gpSynth->GetSysexValPtr(ReverbType); - if (valp) + if (pValue) { if (lsb) { - ++valp; + ++pValue; } - return *valp + 1; + return *pValue + 1; } return 0; @@ -3007,16 +3009,16 @@ int JZTrack::GetChorusType(int lsb) { - unsigned char *valp = gpSynth->GetSysexValPtr(ChorusType); + const unsigned char *pValue = gpSynth->GetSysexValPtr(ChorusType); - if (valp) + if (pValue) { if (lsb) { - ++valp; + ++pValue; } - return *valp + 1; + return *pValue + 1; } return 0; @@ -3048,11 +3050,11 @@ int JZTrack::GetEqualizerType() { - unsigned char *valp = gpSynth->GetSysexValPtr(EqualizerType); + const unsigned char* pValue = gpSynth->GetSysexValPtr(EqualizerType); - if (valp) + if (pValue) { - return *valp + 1; + return *pValue + 1; } return 0; @@ -3081,11 +3083,11 @@ int JZTrack::GetRevSysex(int rsp) { - unsigned char *valp = gpSynth->GetSysexValPtr(ReverbSettings[rsp]); + const unsigned char* pValue = gpSynth->GetSysexValPtr(ReverbSettings[rsp]); - if (valp) + if (pValue) { - return *valp + 1; + return *pValue + 1; } return 0; @@ -3117,11 +3119,11 @@ int JZTrack::GetChoSysex(int csp) { - unsigned char *valp = gpSynth->GetSysexValPtr(ChorusSettings[csp]); + const unsigned char* pValue = gpSynth->GetSysexValPtr(ChorusSettings[csp]); - if (valp) + if (pValue) { - return *valp + 1; + return *pValue + 1; } return 0; @@ -3154,11 +3156,11 @@ int JZTrack::GetPartRsrv(int chan) { - unsigned char *valp = gpSynth->GetSysexValPtr(PartialReserve); + const unsigned char* pValue = gpSynth->GetSysexValPtr(PartialReserve); - if (valp) + if (pValue) { - return *(valp + sysex_channel(chan)) + 1; + return *(pValue + sysex_channel(chan)) + 1; } return 0; @@ -3187,17 +3189,17 @@ int JZTrack::GetMasterVol() { - unsigned char *valp = gpSynth->GetSysexValPtr(MasterVol); + const unsigned char* pValue = gpSynth->GetSysexValPtr(MasterVol); - if (valp) + if (pValue) { if (gpSynth->GetSysexId(MasterVol) == SX_GM_MasterVol) { // first data byte is lsb; get msb instead! - ++valp; + ++pValue; } - return *valp + 1; + return *pValue + 1; } return 0; @@ -3226,11 +3228,11 @@ int JZTrack::GetMasterPan() { - unsigned char *valp = gpSynth->GetSysexValPtr(MasterPan); + const unsigned char* pValue = gpSynth->GetSysexValPtr(MasterPan); - if (valp) + if (pValue) { - return *valp + 1; + return *pValue + 1; } return 0; @@ -3258,22 +3260,22 @@ int JZTrack::GetModeSysex(int param) { - unsigned char *valp = 0; + const unsigned char* pValue = 0; switch (param) { case mspRxChannel: - valp = gpSynth->GetSysexValPtr(RxChannel); + pValue = gpSynth->GetSysexValPtr(RxChannel); break; case mspUseForRhythm: - valp = gpSynth->GetSysexValPtr(UseForRhythm); + pValue = gpSynth->GetSysexValPtr(UseForRhythm); break; } - if (valp) + if (pValue) { - return *valp + 1; + return *pValue + 1; } return 0; Modified: trunk/jazz/src/Track.h =================================================================== --- trunk/jazz/src/Track.h 2008-05-24 18:53:41 UTC (rev 561) +++ trunk/jazz/src/Track.h 2008-05-24 19:03:32 UTC (rev 562) @@ -451,7 +451,7 @@ public: - tTrackName* mName; + tTrackName* mpName; tCopyright* Copyright; tProgram* mPatch; tSetTempo* Speed; Modified: trunk/jazz/src/mswin/WindowsPlayer.cpp =================================================================== --- trunk/jazz/src/mswin/WindowsPlayer.cpp 2008-05-24 18:53:41 UTC (rev 561) +++ trunk/jazz/src/mswin/WindowsPlayer.cpp 2008-05-24 19:03:32 UTC (rev 562) @@ -428,7 +428,7 @@ state->sysex_found = TRUE; tWinSysexBuffer *buf = state->osx_buffers->AllocBuffer(); - buf->PrepareOut(state->hout, sx->mpData, sx->Length - 1); + buf->PrepareOut(state->hout, sx->GetData(), sx->GetLength() - 1); state->play_buffer.put(SYSEX_EVENT, time); state->play_buffer.put((DWORD)buf, time); return 0; @@ -486,13 +486,13 @@ else if (pEvent->GetStat() == StatSysEx) { tSysEx *s = pEvent->IsSysEx(); - if (s->Length + 1 < maxSysLen) + if (s->GetDataLength() + 1 < maxSysLen) { pSysBuf[0] = 0xf0; - memcpy(pSysBuf + 1, s->mpData, s->Length); + memcpy(pSysBuf + 1, s->GetData(), s->GetDataLength()); pSysHdr->lpData = (LPSTR)pSysBuf; - pSysHdr->dwBufferLength = s->Length + 1; + pSysHdr->dwBufferLength = s->GetDataLength() + 1; pSysHdr->dwUser = 0; if (midiOutPrepareHeader(state->hout, pSysHdr, sizeof(MIDIHDR)) == 0) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |