958 |
// currently commented because we're sending a similar signal in MainWindow::on_sample_label_drop_drag_data_received() |
// currently commented because we're sending a similar signal in MainWindow::on_sample_label_drop_drag_data_received() |
959 |
//dimreg_to_be_changed_signal.emit(dimregion); |
//dimreg_to_be_changed_signal.emit(dimregion); |
960 |
|
|
961 |
|
// make sure stereo samples always are the same in both |
962 |
|
// dimregs in the samplechannel dimension |
963 |
|
int nbDimregs = 1; |
964 |
|
gig::DimensionRegion* d[2] = { dimregion, 0 }; |
965 |
|
if (sample->Channels == 2) { |
966 |
|
gig::Region* region = dimregion->GetParent(); |
967 |
|
|
968 |
|
int bitcount = 0; |
969 |
|
int stereo_bit = 0; |
970 |
|
for (int dim = 0 ; dim < region->Dimensions ; dim++) { |
971 |
|
if (region->pDimensionDefinitions[dim].dimension == gig::dimension_samplechannel) { |
972 |
|
stereo_bit = 1 << bitcount; |
973 |
|
break; |
974 |
|
} |
975 |
|
bitcount += region->pDimensionDefinitions[dim].bits; |
976 |
|
} |
977 |
|
|
978 |
|
if (stereo_bit) { |
979 |
|
int dimregno; |
980 |
|
for (dimregno = 0 ; dimregno < region->DimensionRegions ; dimregno++) { |
981 |
|
if (region->pDimensionRegions[dimregno] == dimregion) { |
982 |
|
break; |
983 |
|
} |
984 |
|
} |
985 |
|
d[0] = region->pDimensionRegions[dimregno & ~stereo_bit]; |
986 |
|
d[1] = region->pDimensionRegions[dimregno | stereo_bit]; |
987 |
|
nbDimregs = 2; |
988 |
|
} |
989 |
|
} |
990 |
|
|
991 |
gig::Sample* oldref = dimregion->pSample; |
gig::Sample* oldref = dimregion->pSample; |
|
dimregion->pSample = sample; |
|
992 |
|
|
993 |
// copy sample information from Sample to DimensionRegion |
for (int i = 0 ; i < nbDimregs ; i++) { |
994 |
|
d[i]->pSample = sample; |
995 |
|
|
996 |
dimregion->UnityNote = sample->MIDIUnityNote; |
// copy sample information from Sample to DimensionRegion |
|
dimregion->FineTune = sample->FineTune; |
|
997 |
|
|
998 |
int loops = sample->Loops ? 1 : 0; |
d[i]->UnityNote = sample->MIDIUnityNote; |
999 |
while (dimregion->SampleLoops > loops) { |
d[i]->FineTune = sample->FineTune; |
1000 |
dimregion->DeleteSampleLoop(&dimregion->pSampleLoops[0]); |
|
1001 |
} |
int loops = sample->Loops ? 1 : 0; |
1002 |
while (dimregion->SampleLoops < sample->Loops) { |
while (d[i]->SampleLoops > loops) { |
1003 |
DLS::sample_loop_t loop; |
d[i]->DeleteSampleLoop(&d[i]->pSampleLoops[0]); |
1004 |
dimregion->AddSampleLoop(&loop); |
} |
1005 |
} |
while (d[i]->SampleLoops < sample->Loops) { |
1006 |
if (loops) { |
DLS::sample_loop_t loop; |
1007 |
dimregion->pSampleLoops[0].Size = sizeof(DLS::sample_loop_t); |
d[i]->AddSampleLoop(&loop); |
1008 |
dimregion->pSampleLoops[0].LoopType = sample->LoopType; |
} |
1009 |
dimregion->pSampleLoops[0].LoopStart = sample->LoopStart; |
if (loops) { |
1010 |
dimregion->pSampleLoops[0].LoopLength = sample->LoopEnd - sample->LoopStart + 1; |
d[i]->pSampleLoops[0].Size = sizeof(DLS::sample_loop_t); |
1011 |
|
d[i]->pSampleLoops[0].LoopType = sample->LoopType; |
1012 |
|
d[i]->pSampleLoops[0].LoopStart = sample->LoopStart; |
1013 |
|
d[i]->pSampleLoops[0].LoopLength = sample->LoopEnd - sample->LoopStart + 1; |
1014 |
|
} |
1015 |
} |
} |
1016 |
|
|
1017 |
// update ui |
// update ui |