Closed marcelbonnet closed 5 years ago
A seleção da Waveform na combo é feita por
for(int k=0; k<waveIdList->at(toneLoop)->count(); k++){ Waveform *w = waveIdList->at(toneLoop)->itemData(k).value<Waveform*>(); if(w->groupType == wgt && w->groupId == wgid && w->number == wnum){ waveIdList->at(toneLoop)->setCurrentIndex(k);
Com relação ao TEXTO da Combo, deveria selecionar k+1. Mas quando enviado ao Teclado, ele recebe a Waveform + 1, que não corresponde ao texto da combo.
Talvez o erro esteja na lista de Patches no banco de dados.
Aqui parece correto: ele envia o Waveform selecionado:
`QList
Waveform *w = waveIdList->at(tone)->currentData().value<Waveform*>();
int waveNumber2 = w->number & 0xF;
int waveNumber1 = (w->number >> 4) & 0xF;
dados->append(toneSwitchList->at(tone)->isChecked()? 1 : 0);
dados->append(w->groupType);
dados->append(w->groupId);
dados->append(waveNumber1);
dados->append(waveNumber2);`
TONES 2 e 4 do PRB-28 são P5 Saw A e MC-202 Bs A
Como devem ser gravados no BD:
No banco de dados estão gravados CORRETAMENTE. No banco, a coluna NUMBER está indexada em ZERO como definido na tabela acima da pág 196 do Manual:
sqlite> SELECT * FROM waveforms WHERE nome = 'P5 Saw A' OR nome = 'MC-202 Bs A'; id = 153 nome = MC-202 Bs A groupType = 0 groupId = 1 waveGroup = INT-A oneShot = 0 number = 152
id = 288 nome = P5 Saw A groupType = 0 groupId = 2 waveGroup = INT-B oneShot = 0 number = 32
Os NUMBERs acima em hexadecimal:
printf "%X %X" 152 32 98 20
Devem ser salvos na forma:
98 = 9 8 20 = 2 0
Devendo resultar, nos bytes:
tone | TONE_SW | WAVE_GROUP_TYPE | WAVE_GROUP_ID | WAVE_NUMBER1 | WAVE_NUMBER2 |
---|---|---|---|---|---|
tone1 | 1 | 0 | 2 | 2 | 0 |
tone3 | 1 | 0 | 1 | 9 | 8 |
Configuração dos patches envolvidos (PRB-28 e seu clone personalizado 1551)
sqlite> .mode line
sqlite> SELECT patch_id, name, tone1, tone3 FROM patches WHERE name LIKE '%101%';
patch_id = 292 name = 101 Bass
tone1 = 1 0 2 2 0 1 0 0 0 0 0 0 1 127 0 127 0 1 1 1 1 9 85 0 63 0 63 0 63 9 75 0 63 0 63 0 63 0 63 3 83 0 63 0 63 0 1 94 2 0 0 0 0 0 0 71 2 0 0 0 0 36 50 10 12 12 93 7 7 7 3 18 0 0 126 63 63 63 63 63 1 22 10 0 50 99 0 93 7 7 7 0 7 17 122 127 67 70 0 63 63 107 0 60 7 0 59 7 7 7 0 40 100 1 127 127 127 63 63 64 7 0 64 63 63 1 127 0 0 tone3 = 1 0 1 9 8 3 0 0 0 0 0 0 1 127 0 127 0 1 1 1 1 9 85 0 63 0 63 0 63 9 75 0 63 0 63 0 63 0 63 3 83 0 63 0 63 0 1 94 2 0 0 0 0 0 0 71 2 0 0 0 0 36 50 10 12 12 93 7 7 7 3 18 0 0 126 63 63 63 63 63 1 32 10 0 50 90 0 93 7 7 7 0 10 127 122 127 107 30 0 63 63 127 0 60 7 0 50 7 7 7 0 40 100 1 127 127 127 63 63 64 7 0 64 63 63 1 127 0 0patch_id = 1551 name = RPM 101 Bass tone1 = 1 0 2 2 0 1 0 1 1 0 0 0 1 127 0 127 0 1 1 1 1 9 85 0 63 0 63 0 63 9 75 0 63 0 63 0 63 0 63 3 83 0 63 0 63 0 1 94 2 0 0 0 0 0 0 71 2 0 0 0 0 36 50 10 12 12 93 7 7 7 3 18 0 0 126 63 63 63 63 63 1 22 10 0 50 99 0 93 7 7 7 0 7 17 122 127 67 70 0 63 63 107 0 60 7 0 59 7 7 7 0 40 100 1 127 127 127 63 63 64 7 0 64 63 63 1 127 0 0 tone3 = 1 0 1 9 8 3 0 1 1 0 0 0 1 127 0 127 0 1 1 1 1 9 85 0 63 0 63 0 63 9 75 0 63 0 63 0 63 0 63 3 83 0 63 0 63 0 1 94 2 0 0 0 0 0 0 71 2 0 0 0 0 36 50 10 12 12 93 7 7 7 3 18 0 0 126 63 63 63 63 63 1 32 10 0 50 90 0 93 7 7 7 0 10 127 122 127 107 30 0 63 63 127 0 60 7 0 50 7 7 7 0 40 100 1 127 127 127 63 63 64 7 0 64 63 63 1 127 0 0
Ao carregar WAVE NUMBER 98, ela deve ser lida como INTEIRO 152 [OK] Ao carregar WAVE NUMBER 20, ela deve ser lida como INTEIRO 32 [OK]
A falha está na view: deveria exibir NUMBER+1 . Pois a Waveform selecionada no Banco e na Combo está correta (mesmo group type/id e number em relação ao banco de dados de patches e waveforms). A String correspondente ao nome da Waveform está correta também. Só um erro de exibição do NUMBER, que na view deve ser indexado em 1 para corresponder ao Number exibido no menu do Teclado em PATCH/WAVE .
Testando ao carregar PRB-28 ou seu clone personalizado 1551 :
PRB-28 como deve ser: