increase playback tempo precision
thanks akumanatt
This commit is contained in:
		
							parent
							
								
									9322e9467c
								
							
						
					
					
						commit
						cbd5414eee
					
				| 
						 | 
					@ -923,9 +923,9 @@ void DivEngine::processRow(int i, bool afterDelay) {
 | 
				
			||||||
        dispatchCmd(DivCommand(DIV_CMD_SAMPLE_POS,i,(((effect&0x0f)<<8)|effectVal)*256));
 | 
					        dispatchCmd(DivCommand(DIV_CMD_SAMPLE_POS,i,(((effect&0x0f)<<8)|effectVal)*256));
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
      case 0xc0: case 0xc1: case 0xc2: case 0xc3: // set Hz
 | 
					      case 0xc0: case 0xc1: case 0xc2: case 0xc3: // set Hz
 | 
				
			||||||
        divider=((effect&0x3)<<8)|effectVal;
 | 
					        divider=(double)(((effect&0x3)<<8)|effectVal);
 | 
				
			||||||
        if (divider<10) divider=10;
 | 
					        if (divider<10) divider=10;
 | 
				
			||||||
        cycles=((int)(got.rate)<<MASTER_CLOCK_PREC)/divider;
 | 
					        cycles=got.rate*pow(2,MASTER_CLOCK_PREC)/divider;
 | 
				
			||||||
        clockDrift=0;
 | 
					        clockDrift=0;
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
      case 0xe0: // arp speed
 | 
					      case 0xe0: // arp speed
 | 
				
			||||||
| 
						 | 
					@ -1003,7 +1003,7 @@ void DivEngine::processRow(int i, bool afterDelay) {
 | 
				
			||||||
      case 0xf0: // set Hz by tempo
 | 
					      case 0xf0: // set Hz by tempo
 | 
				
			||||||
        divider=(double)effectVal*2.0/5.0;
 | 
					        divider=(double)effectVal*2.0/5.0;
 | 
				
			||||||
        if (divider<10) divider=10;
 | 
					        if (divider<10) divider=10;
 | 
				
			||||||
        cycles=((int)(got.rate)<<MASTER_CLOCK_PREC)/divider;
 | 
					        cycles=got.rate*pow(2,MASTER_CLOCK_PREC)/divider;
 | 
				
			||||||
        clockDrift=0;
 | 
					        clockDrift=0;
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
      case 0xf1: // single pitch ramp up
 | 
					      case 0xf1: // single pitch ramp up
 | 
				
			||||||
| 
						 | 
					@ -1220,8 +1220,8 @@ bool DivEngine::nextTick(bool noAccum) {
 | 
				
			||||||
  bool ret=false;
 | 
					  bool ret=false;
 | 
				
			||||||
  if (divider<10) divider=10;
 | 
					  if (divider<10) divider=10;
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  cycles=((int)(got.rate)<<MASTER_CLOCK_PREC)/divider;
 | 
					  cycles=got.rate*pow(2,MASTER_CLOCK_PREC)/divider;
 | 
				
			||||||
  clockDrift+=fmod((double)((int)(got.rate)<<MASTER_CLOCK_PREC),(double)divider);
 | 
					  clockDrift+=fmod(got.rate*pow(2,MASTER_CLOCK_PREC),(double)divider);
 | 
				
			||||||
  if (clockDrift>=divider) {
 | 
					  if (clockDrift>=divider) {
 | 
				
			||||||
    clockDrift-=divider;
 | 
					    clockDrift-=divider;
 | 
				
			||||||
    cycles++;
 | 
					    cycles++;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue