aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Chris Xiong <chirs241097@gmail.com> 2019-07-01 22:33:53 +0800
committerGravatar Chris Xiong <chirs241097@gmail.com> 2019-07-01 22:33:53 +0800
commitcd8432e47e1e9b332f2d5682ce4c796a94a29de8 (patch)
tree9091d98efe995bcd11439115200f02d3083c07be
parenteb82292b5d8818a5ef1a0c92e35390bd4e22674e (diff)
downloadQMidiPlayer-cd8432e47e1e9b332f2d5682ce4c796a94a29de8.tar.xz
Actually send initialization sequence to external devices.
Replace hardcoded initial CC values with values from device property API.
-rw-r--r--ChangeLog5
-rw-r--r--INSTALL.md5
-rw-r--r--core/qmpmidioutfluid.cpp1
-rw-r--r--core/qmpmidioutrtmidi.cpp23
-rw-r--r--core/qmpmidiplay.cpp34
-rw-r--r--doc/SD-80_SD-90_Native.devinit1382
-rw-r--r--qmidiplayer-desktop/qmpchanneleditor.cpp7
-rw-r--r--qmidiplayer-desktop/qmppresetselect.cpp1
8 files changed, 1428 insertions, 30 deletions
diff --git a/ChangeLog b/ChangeLog
index 441d9c2..f567985 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2019-07-01 0.8.7 indev
+Actually send initialization sequence to external devices.
+
+Replace hardcoded initial CC values with values from device property API.
+
2019-06-30 0.8.7 indev
Use splitter in preset selection dialog.
diff --git a/INSTALL.md b/INSTALL.md
index e9e5c8d..37995d3 100644
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -3,10 +3,9 @@ Use qmake or Qt Creator.
Dependencies:
-> libfluidsynth 1.1.4+, Qt5, Qt5 Qt quick controls(lite version) and RtMidi.
+> libfluidsynth 2.x, Qt5, Qt quick controls(lite version) and RtMidi.
-C++11 is _required_ to build the project. Qt4 will not work without
-several tweaks.
+C++11 is _required_ to build the project.
To build the default visualization plugin, you need the latest SMELT library
(along with all its dependencies), which can be found
diff --git a/core/qmpmidioutfluid.cpp b/core/qmpmidioutfluid.cpp
index ac6523f..e9bc6b1 100644
--- a/core/qmpmidioutfluid.cpp
+++ b/core/qmpmidioutfluid.cpp
@@ -100,6 +100,7 @@ void qmpMidiOutFluid::panic(uint8_t ch)
}
void qmpMidiOutFluid::reset(uint8_t ch)
{
+ if(!~ch){fluid_synth_system_reset(synth);return;}
this->panic(ch);
for(int i=0;i<128;++i)
fluid_synth_cc(synth,ch,i,0);
diff --git a/core/qmpmidioutrtmidi.cpp b/core/qmpmidioutrtmidi.cpp
index 2cc9d5b..1a18e46 100644
--- a/core/qmpmidioutrtmidi.cpp
+++ b/core/qmpmidioutrtmidi.cpp
@@ -229,8 +229,26 @@ void qmpMidiOutRtMidi::panic(uint8_t ch)
}
void qmpMidiOutRtMidi::reset(uint8_t ch)
{
- basicMessage(0xB0|ch,121,0);
- basicMessage(0xB0|ch,123,0);
+ if(ch==0xFF)
+ {
+ if(devinit)
+ {
+ for(auto&msg:devinit->initseq.eventList)
+ {
+ if((msg.type&0xF0)==0xF0)
+ extendedMessage(msg.str.length(),msg.str.data());
+ else
+ {
+ basicMessage(msg.type,msg.p1,msg.p2);
+ }
+ }
+ }
+ }
+ else
+ {
+ basicMessage(0xB0|ch,121,0);
+ basicMessage(0xB0|ch,123,0);
+ }
}
void qmpMidiOutRtMidi::onMapped(uint8_t,int)
{
@@ -286,6 +304,7 @@ bool qmpMidiOutRtMidi::getChannelPreset(int ch,uint16_t *bank,uint8_t *preset,st
uint8_t qmpMidiOutRtMidi::getInitialCCValue(uint8_t cc)
{
if(!devinit)return 0;//Nope!
+ return devinit->initv[cc];
}
void qmpMidiOutRtMidi::setInitializerFile(const char* path)
{
diff --git a/core/qmpmidiplay.cpp b/core/qmpmidiplay.cpp
index bbf1c3a..6ff465f 100644
--- a/core/qmpmidiplay.cpp
+++ b/core/qmpmidiplay.cpp
@@ -176,7 +176,7 @@ void CMidiPlayer::prePlayInit()
playerPanic(true);
for(size_t i=0;i<mididev.size();++i)
if(mididev[i].refcnt)
- for(int j=0;j<16;++j)mididev[i].dev->reset(j);
+ mididev[i].dev->reset(0xFF);
}
void CMidiPlayer::playEvents()
{
@@ -241,14 +241,10 @@ void CMidiPlayer::fileTimer2Pass()
memset(ccc,0,sizeof(ccc));memset(rpnid,0xFF,sizeof(rpnid));memset(rpnval,0xFF,sizeof(rpnval));
for(int i=0;i<16;++i)
{
- ccc[i][7]=100;ccc[i][8]=64;ccc[i][10]=64;
- ccc[i][11]=127;ccc[i][71]=64;ccc[i][72]=64;
- ccc[i][73]=64;ccc[i][74]=64;ccc[i][75]=64;
- ccc[i][76]=64;ccc[i][77]=64;ccc[i][78]=64;
+ memset(ccc[i],0xFF,128*sizeof(uint32_t));
ccc[i][131]=ctempo;ccc[i][132]=0x04021808;
ccc[i][133]=0;ccc[i][134]=2;
}
- ccc[9][0]=127;
for(int i=0;i<16;++i)for(int j=0;j<135;++j)
ccstamps[0][i][j]=ccc[i][j];
for(uint32_t eptr=0,ct=getEvent(0)->time;eptr<ecnt;)
@@ -290,13 +286,6 @@ CMidiPlayer::CMidiPlayer()
memset(mappedoutput,0,sizeof(mappedoutput));
mididev[0].refcnt=16;
memset(chstatus,0,sizeof(chstatus));
- for(int i=0;i<16;++i)
- {
- chstatus[i][7]=100;chstatus[i][11]=127;
- chstatus[i][10]=chstatus[i][71]=chstatus[i][72]=
- chstatus[i][73]=chstatus[i][74]=chstatus[i][75]=
- chstatus[i][76]=chstatus[i][77]=chstatus[i][78]=64;
- }
#ifdef _WIN32
QueryPerformanceFrequency((LARGE_INTEGER*)&pf);
#endif
@@ -358,15 +347,9 @@ void CMidiPlayer::playerInit()
for(int i=0;i<16;++i)pbr[i]=2,pbv[i]=8192;
sendSysEx=true;memset(rpnid,0xFF,sizeof(rpnid));memset(rpnval,0xFF,sizeof(rpnval));
memset(chstatus,0,sizeof(chstatus));
- chstatus[9][0]=127;
for(int i=0;i<16;++i)
{
- chstatus[i][7]=100;chstatus[i][8]=64;chstatus[i][11]=127;
- chstatus[i][10]=chstatus[i][71]=chstatus[i][72]=
- chstatus[i][73]=chstatus[i][74]=chstatus[i][75]=
- chstatus[i][76]=chstatus[i][77]=chstatus[i][78]=64;
- for(int cc=0;cc<124;++cc)//Temporary fix before introduction of per-device initialization profile
- mididev[mappedoutput[i]].dev->basicMessage(0xB0|i,cc,chstatus[i][cc]);
+ memset(chstatus[i],0xff,128*sizeof(uint8_t));
}
}
void CMidiPlayer::playerDeinit()
@@ -392,9 +375,12 @@ void CMidiPlayer::setTCeptr(uint32_t ep,uint32_t st)
qmpMidiOutDevice* dest=mididev[mappedoutput[i]].dev;
for(int j=0;j<120;++j)
{
- internalFluid->basicMessage(0xB0|i,j,ccstamps[st][i][j]);
- dest->basicMessage(0xB0|i,j,ccstamps[st][i][j]);
- chstatus[i][j]=ccstamps[st][i][j];
+ if(~ccstamps[st][i][j])
+ {
+ internalFluid->basicMessage(0xB0|i,j,ccstamps[st][i][j]);
+ dest->basicMessage(0xB0|i,j,ccstamps[st][i][j]);
+ chstatus[i][j]=ccstamps[st][i][j];
+ }
}
internalFluid->basicMessage(0xC0|i,ccstamps[st][i][128],0);
dest->basicMessage(0xC0|i,ccstamps[st][i][128],0);
@@ -459,6 +445,8 @@ bool CMidiPlayer::getChannelMask(int ch)
{return((mute>>ch)&1)||(solo&&!((solo>>ch)&1));}
int CMidiPlayer::getCC(int ch,int id)
{
+ if(chstatus[ch][id]==0xff)
+ return getChannelOutputDevice(ch)->getInitialCCValue(id);
return chstatus[ch][id];
}
void CMidiPlayer::setCC(int ch,int id,int val)
diff --git a/doc/SD-80_SD-90_Native.devinit b/doc/SD-80_SD-90_Native.devinit
new file mode 100644
index 0000000..3bf37d0
--- /dev/null
+++ b/doc/SD-80_SD-90_Native.devinit
@@ -0,0 +1,1382 @@
+# QMidiPlayer device initialization file for EDIROL SD-80 / SD-90
+# For use with a SD-80 / SD-90 in Native mode
+# Chris Xiong 2019
+#
+# This initialization file aims for maximum GM (not GM2) compatibility, so:
+# - Classic set is used for all parts
+# - Channel 10 is set to drum part
+# - Modulation is set to 0
+#
+
+X F0 41 10 00 48 12 00 00 00 00 00 00 F7
+C FF 00 60
+C 09 00 68
+C FF 01 00
+
+# 00 01 02~06 07 08 09 10 11 12~70 71~78 79~90 91 92~127 PC PBR
+IV 60 00 00,5 64 00 00 40 64 00,59 40,8 00,12 28 00,36 00 02
+
+MAP EDIROL Studio Canvas Native Map
+[80:0:Special 1]
+000=D.L.A.Pad
+001=BrushingSaw
+002=Xtremities
+003=Atmostrings
+004=Noo Tongs
+005=Mistery
+006=EastrnEurope
+007=Harpsi&Str
+008=Shout Gt
+009=Clean Chorus
+010=Mid Boost Gt
+011=Guitarvibe
+012=Cluster Sect
+013=Mariachi Tp
+014=NY Tenor
+015=Jazz Club
+016=Moody Alto
+017=Fuji Yama
+018=SD Piano
+019=Piano&Str
+020=WarmVoxPiano
+021=Enh.E Grand
+022=Brite Honky
+023=Ambient EP
+024=Rhase Dyno
+025=Wah Dyno
+026=Voweling EP
+027=Stage 73
+028=NY Rhodes
+029=Amped Wurlie
+030=Dirty Wurlie
+031=PhaseFlangEP
+032=Dist Wurly
+033=Xmod EP
+034=EP+Followers
+035=Backrhodes
+036=FM Delight
+037=Enh.Legend
+038=Phasing EP
+039=Comp Clav
+040=Vibarimba
+041=FM layer
+042=Vibey Flute
+043=Chime Bells
+044=The Big Spin
+045=Roller Spin
+046=Rocker Spin
+047=Tone Wh.Solo
+048=Purple Spin
+049=RingingOrgan
+050=60's LeadOrg
+051=DistLead Org
+052=Assalt Organ
+053=Perky Spin
+054=Gospel Spin
+055=Boogie Organ
+056=Klubb Organ
+057=96 Year
+058=OrganInStone
+059=StringsOrgan
+060=Cathdr Pipes
+061=Enh.Theater
+062=Ld.Harmonica
+063=Guitar&Str
+064=Elec Gut Gt
+065=Chorus GutGt
+066=Enh.Nylon Gt
+067=CompSteel Gt
+068=Elec Aco.Gt
+069=Hard Steel
+070=Comp OVSteel
+071=DelayedSteel
+072=Wah Steel Gt
+073=Soft Steel
+074=Lead Jazz Gt
+075=Hawaian Gt
+076=Solo Jazz Gt
+077=Old Clean Gt
+078=Jazz Chorus
+079=Fat Clean
+080=Space-D Gt
+081=Whammy Gt
+082=Trem&Cho Gt
+083=Long DLY.Gt
+084=Comp FeedBK
+085=ChaseDL Mute
+086=Wah Funk Pop
+087=Old Blues
+088=335 Drive
+089=335 Drive2
+090=SmallAMP OD
+091=CountrySlide
+092=335 Comp
+093=TC Lead Gt
+094=Lead Mild Gt
+095=Crunch Gt
+096=Auto Wah Gt
+097=Folmant Gt
+098=Fuzz Gt
+099=MonoPhase Gt
+100=2 Layer Gt
+101=MonoDLY Dist
+102=Step FLG Gt
+103=335 Fuzz
+104=Drive Funk
+105=Loud & Metal
+106=Heavy DistGt
+107=Power Mute
+108=Muted OD
+109=Combo Drive
+110=Ring Gt.
+111=Scream Drive
+112=Gt.Pinch Wah
+113=Power DistGt
+114=Triple Gt
+115=Reverse Harm
+116=Drivin'Uprit
+117=Enh.Aco Bass
+118=Pre Bass
+119=Comp Finger
+120=Octrv Finger
+121=Rock Bass
+122=Dist Bass
+123=Solo Fretles
+124=WahSlapBass
+125=Froggy Bass
+126=3D TB-303
+127=Acid Dist Bs
+[81:0:Special 2]
+000=Blown Bass
+001=Enh.Violin
+002=Solo Violin
+003=Enh.Cello
+004=Overture Str
+005=St.Trem Str2
+006=St.Strings 2
+007=Intim8String
+008=Str&Brs Orch
+009=St.Orchestr2
+010=St.Slow Str2
+011=ChamberPlyrs
+012=Prelude
+013=Tape Strings
+014=JP Strings
+015=PhaseSyn.Str
+016=SciFi Choir
+017=Rich Choir
+018=St.Sm Choir2
+019=Tron Choir
+020=ScatterDanze
+021=Choral Brass
+022=Vocal Keys
+023=SampleThe80s
+024=Spectravox
+025=Formantic
+026=Vocoder Wave
+027=Enh.Muted Tp
+028=St.Big Brass
+029=ConcertHorns
+030=Brass Orch
+031=Loose Lips
+032=Multi Brass
+033=SuperJP Brs1
+034=SuperJP Brs2
+035=DragginBrass
+036=Enh.Alto Sax
+037=Enh.TenorSax
+038=Enh.Bari Sax
+039=Sax's Sect
+040=Reed Romance
+041=U.S.Patrol
+042=Enh.Oboe
+043=Jz.Clarinet2
+044=Enh.Flute
+045=Tron Flutes
+046=Flute&Clari
+047=Orch Reeds
+048=Delay Shaku
+049=Delay Ocarina
+050=DynOrchestra
+051=Celtic Ens
+052=Early Ens
+053=WoodSymphony
+054=ViennaWoods2
+055=Stage Woods
+056=TremoloFlute
+057=SupportWoods
+058=Fiddle&Oboe
+059=Mono Blues
+060=TravlnFlutes
+061=DistordedSAW
+062=The Leader
+063=SH-2 Lead
+064=JP-6 Lead
+065=Glassy Saws
+066=Too Pure
+067=Mono Analog
+068=Charang Lead
+069=Phase Wire
+070=Flanging 5th
+071=BOG
+072=Solo Twang
+073=Koto Power
+074=Dulcid Solo
+075=Wine Guitar
+076=Leapin' Keys
+077=New Fantasia
+078=MilleniumStr
+079=OB Borealis
+080=Wet Glass
+081=VintagePhase
+082=P-layer
+083=Ring Glass
+084=5th Atm /Aft
+085=Combing
+086=Modular Life
+087=KeySyncSynth
+088=Phase Track
+089=3D Crystal
+090=Bright Star
+091=Technoheadz
+092=Techno Cave
+093=Wedo-Wodo
+094=Dance Sweet
+095=Dancefloor
+096=Frogcillator
+097=Dance Zipper
+098=Lo-fi Chord
+099=Sliced
+100=Dance Chop
+101=GO WILD!
+102=Tropics
+103=FM Fx Bells
+104=CrystalGlass
+105=Borealis
+106=Circular Pad
+107=Oxigenizer
+108=Quasar
+109=PsycheSweep
+110=Hell Section
+111=DigitalDrone
+112=Harp Drop
+113=Runaway Rez
+114=Wacky Pizzer
+115=Reverse Rain
+116=Starburst
+117=Tongan Delay
+118=Cascade
+119=Legat~Stacat
+120=Rev Goblin
+121=FantasySitar
+122=Rising Sun
+123=Green Tea
+124=Jimmy's Koto
+125=Fly 2 India
+126=IndianSpirit
+127=Gt/BsNz MENU
+[96:0:Classical Set Bank 0]
+000=Piano 1
+001=Piano 2
+002=Piano 3
+003=Honky-tonk
+004=E.Piano 1
+005=E.Piano 2
+006=Harpsichord
+007=Clav
+008=Celesta
+009=Glockenspiel
+010=Music Box
+011=Vibraphone
+012=Marimba
+013=Xylophone
+014=Tubular-bell
+015=Santur
+016=Organ 1
+017=Organ 2
+018=Organ 3
+019=Church 1
+020=Reed Organ
+021=Accordion F
+022=Harmonica
+023=Bandneon
+024=Nylon Gt
+025=Steel-str.Gt
+026=Jazz Gt
+027=Clean Rear
+028=Muted Gt
+029=Overdrive Gt
+030=DistortionGt
+031=Gt.Harmonics
+032=Acoustic Bs
+033=Fingered Bs
+034=Picked Bass
+035=Fretless Bs
+036=Slap Bass 1
+037=Slap Bass 2
+038=Synth Bass 1
+039=Synth Bass 2
+040=Violin
+041=Viola
+042=Cello
+043=Contrabass
+044=Tremolo Str
+045=Pizzicato
+046=Harp
+047=Timpani
+048=Strings
+049=Slow Strings
+050=Syn.Strings1
+051=Syn.Strings2
+052=Choir Aahs
+053=Voice Oohs
+054=SynVox
+055=Orchestrahit
+056=Trumpet
+057=Trombone
+058=Tuba
+059=MuteTrumpet
+060=French Horns
+061=Brass 1
+062=SynthBrass 1
+063=SynthBrass 2
+064=Soprano Sax
+065=Alto Sax
+066=Tenor Sax
+067=Bariton Sax
+068=Oboe
+069=EnglishHorn
+070=Bassoon
+071=Clarinet
+072=Piccolo
+073=Flute
+074=Recorder
+075=Pan Flute
+076=Bottle Blow
+077=Shakuhachi
+078=Whistle
+079=Ocarina
+080=Square Wave
+081=Saw Wave
+082=Syn.Calliope
+083=Chiffer Lead
+084=Charang
+085=Solo Vox
+086=5th SawWave
+087=Bass & Lead
+088=Fantasia
+089=Warm Pad
+090=Polysynth
+091=SpaceVoice
+092=BowedGlass
+093=Metal Pad
+094=Halo Pad
+095=Sweep Pad
+096=Ice Rain
+097=Soundtrack
+098=Crystal
+099=Atmosphere
+100=Brightness
+101=Goblin
+102=Echo Drops
+103=Star Theme
+104=Sitar
+105=Banjo
+106=Shamisen
+107=Koto
+108=Kalimba
+109=Bag Pipe
+110=Fiddle
+111=Shanai
+112=Tinkle Bell
+113=Agogo
+114=Steel Drums
+115=Woodblock
+116=Taiko
+117=Melo.Tom 1
+118=Synth Drum
+119=Reverse Cym
+120=GtFret Noise
+121=Breath Noise
+122=Seashore
+123=Bird Tweet
+124=Telephone
+125=Helicopter
+126=Applause
+127=Gunshot
+[96:1:Classical Set Bank 1]
+000=Piano 1w
+001=Piano 2w
+002=Piano 3w
+003=Honky-tonk w
+004=Detuned EP1
+005=Detuned EP2
+006=Coupl hps
+007=Pulse Clav
+011=Vibraphone w
+012=Marimba w
+014=Church Bell
+016=Detuned Or1
+017=Detuned Or2
+019=Church 2
+020=Puff Organ
+021=Accordion I
+024=Ukulele
+025=12-Str.Gt
+026=Pedal Steel
+027=Clean Half
+028=Funk Gt
+029=Gt.Pinch
+030=Feedback Gt
+031=Gt.Feedback
+033=FingerJ.Bass
+038=SynthBass101
+039=Beef FM Bs
+040=Slow Violin
+046=Yangqin
+048=Orchestra
+050=Syn.Strings3
+052=Choir Aahs 2
+053=Hamming
+054=Ana Voice
+055=Bass Hit
+056=Dark Trumpet
+057=Trombone 2
+059=MuteTrumpet2
+060=Fr.Horn
+061=Brass 2
+062=SynthBrass 3
+063=SynthBrass 4
+080=Square
+081=Saw
+084=Wire Lead
+087=DelayedLead
+089=Sine Pad
+091=Itopia
+098=Syn Mallet
+102=Echo Bell
+104=Sitar 2
+107=Taisho Koto
+115=Castanet
+116=Concert BD
+117=Melo.Tom 2
+118=808 tom
+120=Gt.Cut Noise
+121=Fl.Key Click
+122=Rain
+123=Dog
+124=Telephone 2
+125=Car-Engine
+126=Laughing
+127=Machine Gun
+[96:2:Classical Set Bank 2]
+000=Piano 1d
+004=Dyno Rhodes
+005=E.Piano 2v
+006=Harpsi w
+014=Carillon
+016=Organ 60
+017=Organ 5
+019=Church 3
+024=Nylon o
+025=Mandolin
+027=Mid Tone Gt
+028=Funk Gt 2
+031=DistRythm Gt
+038=Acid Bass
+039=Rubber Bass
+048=60'Strings
+055=6th Hit
+057=Brite Bone
+062=Oct.SynBrass
+063=Velo Brass
+080=Sine Wave
+081=Doctor Solo
+102=Echo Pan
+118=Elec Perc
+120=Slap_St.Bass
+122=Thunder
+123=Horse Gallop
+124=Door Creak
+125=Car-Stop
+126=Screaming
+127=Lasergun
+[96:3:Classical Set Bank 3]
+004=60's E.Piano
+005=EP Legend
+006=Harpsi o
+016=Organ 4
+024=Nylon Gt.2
+025=Steel+Body
+028=Jazz Man
+038=Clavi Bass
+039=Attack Pulse
+055=Euro Hit
+062=Jump Brass
+081=Natural Lead
+122=Wind
+123=Bird Tweet 2
+124=Door
+125=Car-Pass
+126=Punch
+127=Explosion
+[96:4:Classical Set Bank 4]
+005=EP Phase
+038=Hammer
+081=SequencedSaw
+122=Stream
+124=Scratch
+125=Car-Crash
+126=Heart Beat
+[96:5:Classical Set Bank 5]
+122=Bubble
+124=Wind Chimes
+125=Siren
+126=Footsteps
+[96:6:Classical Set Bank 6]
+125=Train
+[96:7:Classical Set Bank 7]
+125=Jetplane
+[96:8:Classical Set Bank 8]
+125=Starship
+[96:9:Classical Set Bank 9]
+125=Burst Noise
+[97:0:Contemporary Set Bank 0]
+000=Ac.Piano
+001=Rock Piano
+002=E.Grand Pf
+003=Old Honky
+004=Soft Rhodes
+005=FM E.Piano
+006=Harpsi 2
+007=Atack Clav 1
+008=Celesta 2
+009=Glocken 2
+010=Music Box 2
+011=Vibraphone 2
+012=Marimba 2
+013=Xylophone 2
+014=Tubular-bel2
+015=Santur 2
+016=Perky
+017=Jazz Organ 1
+018=Organ 3 fast
+019=Pipe Organ 1
+020=Reed Organ 2
+021=French Acc
+022=Harmonica 2
+023=Bandneon 1
+024=Nylon Gt 2
+025=OV Steel Gt
+026=Jazz Gt 2
+027=TC Rear
+028=TC Mute Gt
+029=Atk Drive Gt
+030=Atk Dist Gt
+031=Gt.Harm 2
+032=Rockabilly
+033=Fingered Bs2
+034=Picked Jz Bs
+035=Fretless Bs2
+036=Slap Pop 1
+037=Funky Slap
+038=MG303 Bass
+039=Seq101 Bass
+040=Violin vib
+041=Viola vib
+042=Cello vib
+043=Cb vib
+044=Tremolo Str2
+045=Pizzicato 2
+046=Harp 2
+047=Timpani 2
+048=Strings 2
+049=SlowStrings2
+050=BriteSyn.Str
+051=Warm SynStr1
+052=Large Choir
+053=Voice Oohs 2
+054=SynVox 2
+055=Orc Hit 2
+056=Solo Trumpet
+057=Solo Bone
+058=Tuba 2
+059=MuteTrumpet2
+060=FrenchHorns2
+061=Brass FF
+062=JP Syn.Brass
+063=MG Syn.Horn
+064=Soprano Sax2
+065=Breathy Alto
+066=BreathyTenor
+067=Barely Bari
+068=Brite Oboe
+069=EnglishHorn2
+070=Bassoon 2
+071=Br.Clarinet
+072=Piccolo 2
+073=Flute 2
+074=Recorder 2
+075=Pan Flute 2
+076=Bottle Blow2
+077=Shakuhachi 2
+078=Whistle 2
+079=Ocarina 2
+080=MG Square
+081=JP Saw Wave
+082=SynCalliope2
+083=ChifferLead2
+084=Charang 2
+085=Solo Vox 2
+086=5th SawWave2
+087=Bass & Lead2
+088=Fantasia 2
+089=Warm Pad 2
+090=Polysynth 2
+091=SpaceVoice 2
+092=BowedGlass 2
+093=Metal Pad 2
+094=Halo Pad 2
+095=Sweep Pad 2
+096=Ice Rain 2
+097=Soundtrack 2
+098=Crystal 2
+099=Atmosphere 2
+100=Brightness 2
+101=Goblin 2
+102=Echo Drops 2
+103=Star Theme 2
+104=Atk Sitar
+105=Banjo 2
+106=Shamisen 2
+107=Koto 2
+108=Kalimba 2
+109=Bag Pipe 2
+110=Fiddle vib
+111=Shanai 2
+112=Tinkle Bell
+113=Agogo
+114=Steel Drums
+115=Woodblock
+116=Taiko
+117=Melo.Tom 1
+118=Synth Drum
+119=Reverse Cym
+120=GtFret Noise
+121=Breath Noise
+122=Seashore
+123=Bird Tweet
+124=Telephone
+125=Helicopter
+126=Applause
+127=Gunshot
+[97:1:Contemporary Set Bank 1]
+000=Ac.Piano w
+001=Rock Piano w
+002=E.Grand Pf w
+003=Old Honky w
+004=Fat Rhodes
+005=Soft FM EP
+006=Coupl hps 2
+007=AnalogClav 1
+011=Vibraphone2w
+012=Marimba 2 w
+014=Church Bell2
+016=Ballad B
+017=Perc.Organ 1
+019=LargeChurch1
+020=Organ Flute
+021=It Muset
+024=Ukulele 2
+025=12-Str.Gt 2
+026=Pedal Steel2
+027=TC Front
+028=FunkGt Slap
+029=Gt.Pinch 2
+030=FeedbackGt 2
+031=FeedbackOct
+033=FingerP.Bass
+038=MG Bass
+039=Beef Slap Bs
+040=Slow Vln vib
+046=Yangqin 2
+048=Orchestra 2
+050=Oct.SynStr 1
+052=Small Choir
+053=Hamming 2
+054=Ana Voice 2
+055=Bass Hit 2
+056=Mild Trumpet
+057=Solo Bone 2
+059=Harmon Mute
+060=MildFr.Horns
+061=BrassSection
+062=JPSyn.Brass2
+063=OB Syn.Horn
+080=Fat Square
+081=MG Saw
+084=Wire Lead 2
+087=DelayedLead2
+089=Sine Pad 2
+091=Itopia 2
+098=Syn Mallet 2
+102=Echo Bell 2
+104=Atk Sitar 2
+107=Taisho Koto2
+115=Castanet
+116=Concert BD
+117=Melo.Tom 2
+118=808 tom
+120=Gt.Cut Noise
+121=Fl.Key Click
+122=Rain
+123=Dog
+124=Telephone 2
+125=Car-Engine
+126=Laughing
+127=Machine Gun
+[97:2:Contemporary Set Bank 2]
+000=Mild Piano
+004=Rhodes Wide
+005=SA E.Piano
+006=Harpsi 2 w
+014=Carillon 2
+016=Happy 60s
+017=Dist.JzOrg 1
+019=SmallChurch1
+024=Nylon 2 o
+025=Mandolin 2
+027=TC Front 2
+028=Funk Pop
+031=Muted Dist
+038=MG Acid Bass
+039=Rubber Bass2
+048=Oct.Strings
+055=6th Hit 2
+057=Brite Bone 2
+062=OctSynBrass2
+063=CS Syn.Brass
+080=2600 Sine
+081=Fat Saw Solo
+102=Echo Pan 2
+118=Elec Perc
+120=Slap_St.Bass
+122=Thunder
+123=Horse Gallop
+124=Door Creak
+125=Car-Stop
+126=Screaming
+127=Lasergun
+[97:3:Contemporary Set Bank 3]
+004=Wurly Soft
+005=EP Legend 2
+006=Harpsi 2 o
+016=Tone Wheel
+024=Hard Gut Gt
+025=Steel+Body 2
+028=Mute Jazz Gt
+038=Clavi Bass 2
+039=Attack Saw
+055=Euro Hit 2
+062=80's Brass
+081=P5 Saw Lead
+122=Wind
+123=Bird Tweet 2
+124=Door
+125=Car-Pass
+126=Punch
+127=Explosion
+[97:4:Contemporary Set Bank 4]
+005=EP Phase 2
+038=OB Hammer
+081=MG Sequence
+122=Stream
+124=Scratch
+125=Car-Crash
+126=Heart Beat
+[97:5:Contemporary Set Bank 5]
+122=Bubble
+124=Wind Chimes
+125=Siren
+126=Footsteps
+[97:6:Contemporary Set Bank 6]
+125=Train
+[97:7:Contemporary Set Bank 7]
+125=Jetplane
+[97:8:Contemporary Set Bank 8]
+125=Starship
+[97:9:Contemporary Set Bank 9]
+125=Burst Noise
+[98:0:Solo Set Bank 0]
+000=St.Piano 1
+001=St.Piano 2
+002=SA Piano
+003=St.Honky
+004=Tremo Rhodes
+005=FM Hard EP
+006=St.Harpsichd
+007=Atack Clav 2
+008=St.Celesta
+009=St.Glocken
+010=St.Music Box
+011=St.Vibra
+012=St.Marimba
+013=St.Xylophone
+014=St.Tubular
+015=St.Santur
+016=Roller
+017=Jazz Organ 2
+018=Rock Organ
+019=Pipe Organ 2
+020=Reed Organ 3
+021=St.FrenchAcc
+022=St.Harmonica
+023=St.Bandneon
+024=Nylon Gt 3
+025=SteelStr.Gt2
+026=Jazz Gt 3
+027=Strat2 Rear
+028=TC Mute Gt 2
+029=OverdriveGt2
+030=Dist.Gt 2
+031=Gt.OctHarm
+032=Fat Aco.Bass
+033=Jazz Bass
+034=Picking Bass
+035=PhaseFrtless
+036=Jazz Slap
+037=Slap Pop 2
+038=Fat Syn.Bass
+039=Sq SynthBass
+040=Violin 2 vib
+041=Viola2 vib
+042=Cello2 vib
+043=Cb2 vib
+044=St.Trem Str
+045=St.Pizzicato
+046=St.Harp
+047=St.Timpani
+048=St.Strings
+049=St.Slow Str
+050=StackSyn.Str
+051=Warm SynStr2
+052=St.ChoirAahs
+053=St.Vox Oohs
+054=St.SynVox
+055=St.Orc Hit
+056=Romantic Tp
+057=Trombone vib
+058=Tuba vib
+059=Solo MutedTp
+060=St.Fr Horns
+061=St.Brass
+062=Hyper Brass
+063=Warm SynHorn
+064=Sop.Sax vib
+065=AltoSoft vib
+066=Blow Tenor
+067=Bari.Sax vib
+068=Classic Oboe
+069=E.Horn vib
+070=Bassoon vib
+071=JazzClarinet
+072=Piccolo vib
+073=Flute vib
+074=Recorder vib
+075=Pan Flute vib
+076=Bottle vib
+077=Shaku.vib
+078=Whistle vib
+079=Ocarina vib
+080=OB Square
+081=Oct.JP Saw
+082=SynCalliope3
+083=ChifferLead3
+084=Charang 3
+085=Solo Vox 3
+086=5th SawWave3
+087=Bass & Lead3
+088=Fantasia 3
+089=Warm Pad 3
+090=Polysynth 3
+091=SpaceVoice 3
+092=BowedGlass 3
+093=Metal Pad 3
+094=Halo Pad 3
+095=Sweep Pad 3
+096=Ice Rain 3
+097=Soundtrack 3
+098=Crystal 3
+099=Atmosphere 3
+100=Brightness 3
+101=Goblin 3
+102=Echo Drops 3
+103=Star Theme 3
+104=St.Sitar
+105=St.Banjo
+106=St.Shamisen
+107=St.Koto
+108=St.Kalimba
+109=St.Bag Pipe
+110=Fiddle 2 vib
+111=St.Shanai
+112=Tinkle Bell
+113=Agogo
+114=Steel Drums
+115=Woodblock
+116=Taiko
+117=Melo.Tom 1
+118=Synth Drum
+119=Reverse Cym
+120=GtFret Noise
+121=Breath Noise
+122=Seashore
+123=Bird Tweet
+124=Telephone
+125=Helicopter
+126=Applause
+127=Gunshot
+[98:1:Solo Set Bank 1]
+000=St.Piano 1w
+001=St.Piano 2w
+002=SA Piano w
+003=St.Honky w
+004=Sweet Tynes
+005=Brite FM EP
+006=St.Coupl hps
+007=AnalogClav 2
+011=St.Vibra w
+012=St.Marimba w
+014=St.Church
+016=Rocker
+017=Perc.Organ 2
+019=LargeChurch2
+020=Theater
+021=St.It Muset
+024=Ukulele 3
+025=12-Str.Gt 3
+026=Pedal Steel3
+027=Chorus Clean
+028=FunkGt.Slap2
+029=Gt.Pinch 3
+030=Feedback OD
+031=FeedbackHarm
+033=Finger Slap
+038=SynthSaw Bs
+039=Beef Saw Bs
+040=SlowVln2 vib
+046=St.Yangqin
+048=St.Orchestra
+050=Oct.SynStr 2
+052=St.Sm Choir
+053=St.Hamming
+054=Ana Voice 3
+055=St.Bass Hit
+056=Tp.Dark vib
+057=Trombone2vib
+059=Harmon Mute2
+060=St.Fr Horns2
+061=St.Brass 2
+062=Stack Brass
+063=Rich SynHorn
+080=Fat Square2
+081=Hybrid Saw
+084=Wire Lead 3
+087=DelayedLead3
+089=Sine Pad 3
+091=Itopia 3
+098=Syn Mallet 3
+102=Echo Bell 3
+104=St.Sitar 2
+107=St.T Koto
+115=Castanet
+116=Concert BD
+117=Melo.Tom 2
+118=808 tom
+120=Gt.Cut Noise
+121=Fl.Key Click
+122=Rain
+123=Dog
+124=Telephone 2
+125=Car-Engine
+126=Laughing
+127=Machine Gun
+[98:2:Solo Set Bank 2]
+000=European Pf
+004=Tremo Dyno
+005=Brite FM EP2
+006=St.Harpsi w
+014=St.Carillon
+016=Soft60'Organ
+017=Dist.JzOrg 2
+019=SmallChurch2
+024=Nylon 3 o
+025=Mandolin 3
+027=335
+028=Funk Pop 2
+031=Muted Dist 2
+038=AcidBs Dirty
+039=JpSaw Rubber
+048=St.OctStr 1
+055=St.6th Hit
+057=Br.Bone vib
+062=OctSynBrass3
+063=P5 Syn.Brass
+080=2600 Sine 2
+081=Hybrid Solo
+102=Echo Pan 3
+118=Elec Perc
+120=Slap_St.Bass
+122=Thunder
+123=Horse Gallop
+124=Door Creak
+125=Car-Stop
+126=Screaming
+127=Lasergun
+[98:3:Solo Set Bank 3]
+004=Tremo Wurly
+005=EP Legend 3
+006=St.Harpsi o
+016=Full Stops
+024=Hard Gut Gt2
+025=Steel+Body 3
+028=Slap Jazz Gt
+038=Clavi Bass 3
+039=Attack MG Bs
+055=St.Euro Hit
+062=SuperSaw Brs
+081=MG Saw Lead
+122=Wind
+123=Bird Tweet 2
+124=Door
+125=Car-Pass
+126=Punch
+127=Explosion
+[98:4:Solo Set Bank 4]
+005=EP Phase 3
+038=MG Hammer
+081=DelaySeqence
+122=Stream
+124=Scratch
+125=Car-Crash
+126=Heart Beat
+[98:5:Solo Set Bank 5]
+122=Bubble
+124=Wind Chimes
+125=Siren
+126=Footsteps
+[98:6:Solo Set Bank 6]
+125=Train
+[98:7:Solo Set Bank 7]
+125=Jetplane
+[98:8:Solo Set Bank 8]
+125=Starship
+[98:9:Solo Set Bank 9]
+125=Burst Noise
+[99:0:Enhanced Set Bank 0]
+000=SD Piano
+001=Enh.Piano 2
+002=Enh.E Grand
+003=Brite Honky
+004=Stage 73
+005=Chorus EP
+006=Enh.Harpsi
+007=Comp Clav
+008=SpaceCelesta
+009=Trem.Glocken
+010=Panning Box
+011=Trem.Vibra
+012=Enh.Marimba
+013=Enh.Xylophon
+014=Trem.Tubula
+015=Enh.Santur
+016=Perky Spin
+017=Jazzy Spin
+018=Rocker Spin
+019=Amb.Church
+020=Old Reed Org
+021=Enh.French
+022=Ld.Harmonica
+023=Enh.Bandneon
+024=Enh.Nylon Gt
+025=Comp OVSteel
+026=Lead Jazz Gt
+027=Old Clean Gt
+028=Comp Mute Gt
+029=TC Lead Gt
+030=Heavy DistGt
+031=Amp.Harm
+032=Enh Aco.Bass
+033=Pre Bass
+034=Rock Bass
+035=Cho.Fretless
+036=Phase Slap
+037=Enh.Slap Pop
+038=Dist303 Bass
+039=PhaseSq Bass
+040=Enh.Violin
+041=Enh.Viola
+042=Enh.Cello
+043=Enh.Cb
+044=St.Trem Str2
+045=Chorus Pizz
+046=Chorus Harp
+047=Enh.Timpani
+048=St.Strings 2
+049=St.Slow Str2
+050=JP Strings
+051=OB Strings
+052=Rich Choir
+053=Enh.Vox Oohs
+054=Phase SynVox
+055=Enh.Orc Hit
+056=Enh.Trumpet
+057=Enh.Trombone
+058=Chorus Tuba
+059=Enh.Muted Tp
+060=Enh.StFrHorn
+061=St.Big Brass
+062=SuperJP Brs1
+063=WarmSynHorn2
+064=Enh.Sop Sax
+065=Enh.Alto Sax
+066=Enh.TenorSax
+067=Enh.Bari Sax
+068=Enh. Oboe
+069=Enh.E Horn
+070=Enh.Bassoon
+071=Jz.Clarinet2
+072=Enh.Piccolo
+073=Enh.Flute
+074=Enh.Recorder
+075=Cho.PanFlute
+076=Phase Bottle
+077=Delay Shaku
+078=DelayWhistle
+079=DelayOcarina
+080=OBSquareLead
+081=KeySync Saw
+082=LeadCalliope
+083=Chiffers
+084=Charang Lead
+085=Solo Vox Lead
+086=Flanging 5th
+087=Phase BsLead
+088=New Fantasia
+089=Phase Pad
+090=KeySyncSynth
+091=Phase Voices
+092=Ring Glass
+093=Space Pad
+094=Phase Halo
+095=Flanging Pad
+096=Reverse Rain
+097=Phase Track
+098=3D Crystal
+099=Pan Atmos
+100=Bright Star
+101=Rev Goblin
+102=Delay Drops
+103=Phase Theme
+104=Enh.Sitar
+105=St.Banjo 2
+106=St.Shamisen2
+107=St.Koto 2
+108=Trem.Kalimba
+109=Enh.Bag Pipe
+110=Enh.Fiddle
+111=Enh.Shanai
+112=Tinkle Bell
+113=Agogo
+114=Steel Drums
+115=Woodblock
+116=Taiko
+117=Melo.Tom 1
+118=Synth Drum
+119=Reverse Cym
+120=GtFret Noise
+121=Breath Noise
+122=Seashore
+123=Bird Tweet
+124=Telephone
+125=Helicopter
+126=Applause
+127=Gunshot
+[99:1:Enhanced Set Bank 1]
+000=SD Piano w
+001=Enh.Piano 2w
+002=Enh.E Grandw
+003=Brite Honkyw
+004=NY Rhodes
+005=Phase FM EP
+006=Enh.Coupl hp
+007=Wah Ana.Clav
+011=Trem.Vibra w
+012=Enh.Marimbaw
+014=Echo Church
+016=Gospel Spin
+017=Jazzy Spin 2
+019=Amb.Church 2
+020=Enh.Theater
+021=Enh.ItMuset
+024=Enh.Ukulele
+025=3D 12-Str.Gt
+026=Hawaian Gt
+027=Jazz Chorus
+028=Enh.Funk Gt
+029=Gt.PinchLead
+030=Feedbacker
+031=Amp.FeedBack
+033=Comp Finger
+038=P.Shift Bass
+039=Enh.Beef Bs
+040=Enh.Slow Vln
+046=Enh.Yangqin
+048=St.Orchestr2
+050=PhaseSyn.Str
+052=St.Sm Choir2
+053=Enh.Hamming
+054=Lead Ana.Vox
+055=PhaseBassHit
+056=Warm Trumpet
+057=Enh.Bone 2
+059=Enh.MutedTp2
+060=Warm Horns2
+061=Enh.Brs Sect
+062=Lead Brass
+063=Phase Horn
+080=Phase Square
+081=Flanging Saw
+084=Phase Wire
+087=Suffle Lead
+089=Chorus Sine
+091=Pan Itopia
+098=Phase Mallet
+102=Delay Bell
+104=FantasySitar
+107=St.T Koto 2
+115=Castanet
+116=Concert BD
+117=Melo.Tom 2
+118=808 tom
+120=Gt.Cut Noise
+121=Fl.Key Click
+122=Rain
+123=Dog
+124=Telephone 2
+125=Car-Engine
+126=Laughing
+127=Machine Gun
+[99:2:Enhanced Set Bank 2]
+000=Classic Pf
+004=Phase Dyno
+005=Wah FM EP
+006=Enh.Harpsi w
+014=Trm.Carillon
+016=96 Year
+017=Jazzy Spin 3
+019=Amb.Church 3
+024=Enh.Nylon o
+025=Enh.Mandolin
+027=335 Drive
+028=Wah Funk Pop
+031=Muted OD
+038=Acid Dist Bs
+039=Fat JpSaw Bs
+048=St.OctStr 2
+055=Dly.6th Hit
+057=Enh.Br Bone
+062=Phase OctBrs
+063=Fat Pro Bras
+080=Sine Lead
+081=Doctor Lead
+102=Delay Pan 3
+118=Elec Perc
+120=Slap_St.Bass
+122=Thunder
+123=Horse Gallop
+124=Door Creak
+125=Car-Stop
+126=Screaming
+127=Lasergun
+[99:3:Enhanced Set Bank 3]
+004=Whirly
+005=Enh.Legend
+006=Enh.Harpsi o
+016=Tone Wh.Solo
+024=Enh.Gut Gt
+025=DelayedSteel
+028=Solo Jazz Gt
+038=PhaseClaviBs
+039=Enh.MG Bass
+055=Dly.Euro Hit
+062=SuperJP Brs2
+081=Fat Saw Lead
+122=Wind
+123=Bird Tweet 2
+124=Door
+125=Car-Pass
+126=Punch
+127=Explosion
+[99:4:Enhanced Set Bank 4]
+005=Phasing EP
+038=Enh.Hammer
+081=PhaseSeqence
+122=Stream
+124=Scratch
+125=Car-Crash
+126=Heart Beat
+[99:5:Enhanced Set Bank 5]
+122=Bubble
+124=Wind Chimes
+125=Siren
+126=Footsteps
+[99:6:Enhanced Set Bank 6]
+125=Train
+[99:7:Enhanced Set Bank 7]
+125=Jetplane
+[99:8:Enhanced Set Bank 8]
+125=Starship
+[99:9:Enhanced Set Bank 9]
+125=Burst Noise
+[104:0:Classical Set Drums]
+000=Standard Set
+008=Room Set
+016=Power Set
+024=Electro Set
+025=Analog Set
+032=Jazz Set
+040=Brush Set
+048=OrchestraSet
+056=SFX Set
+[105:0:Contemporary Set Drums]
+000=StandardSet2
+008=Room Set 2
+016=Power Set 2
+024=Dance Set
+025=Rave Set
+032=Jazz Set 2
+040=Brush Set 2
+048=OrchestraSet
+056=SFX Set
+[106:0:Solo Set Drums]
+000=St.Standard
+008=St.Room
+016=St.Power
+024=Rust Set
+025=Analog2 Set
+032=St.Jazz
+040=St.Brush
+048=OrchestraSet
+056=SFX Set
+[107:0:Enhanced Set Drums]
+000=Amb.Standard
+008=Amb.Room
+016=Gated Power
+024=Techno Set
+025=Bully Set
+032=Amb.Jazz
+040=Amb.Brush
+048=OrchestraSet
+056=SFX Set
+ENDMAP
diff --git a/qmidiplayer-desktop/qmpchanneleditor.cpp b/qmidiplayer-desktop/qmpchanneleditor.cpp
index 71dd455..fbe3d50 100644
--- a/qmidiplayer-desktop/qmpchanneleditor.cpp
+++ b/qmidiplayer-desktop/qmpchanneleditor.cpp
@@ -26,7 +26,12 @@ void qmpChannelEditor::setupWindow(int chid)
setWindowTitle(tr("Channel Parameter Editor - Channel #%1").arg(ch+1));
CMidiPlayer* player=qmpMainWindow::getInstance()->getPlayer();
uint16_t b;uint8_t p;std::string pstn;
- player->getChannelOutputDevice(ch)->getChannelPreset(ch,&b,&p,pstn);
+ if(!player->getChannelOutputDevice(ch)->getChannelPreset(ch,&b,&p,pstn))
+ {
+ b=player->getCC(ch,0)<<7|player->getCC(ch,32);
+ p=player->getCC(ch,128);
+ pstn=player->getChannelOutputDevice(ch)->getPresetName(b,p);
+ }
ui->lbPresetName->setText(pstn.c_str());
sprintf(str,"BK: %03d",b);ui->lbBank->setText(str);
sprintf(str,"PC: %03d",p);ui->lbPreset->setText(str);
diff --git a/qmidiplayer-desktop/qmppresetselect.cpp b/qmidiplayer-desktop/qmppresetselect.cpp
index 6683e49..578ae1d 100644
--- a/qmidiplayer-desktop/qmppresetselect.cpp
+++ b/qmidiplayer-desktop/qmppresetselect.cpp
@@ -112,7 +112,6 @@ void qmpPresetSelector::on_lwPresetSelect_itemDoubleClicked()
void qmpPresetSelector::on_lwBankSelect_currentRowChanged()
{
- fprintf(stderr,"bs cr changed\n");
ui->lwPresetSelect->clear();
if(!ui->lwBankSelect->currentItem())return;
char name[256];int b;