| 496 | /* ---------- calcrate rythm block ---------- */ |
| 497 | #define WHITE_NOISE_db 6.0 |
| 498 | INLINE void OPL_CALC_RH( OPL_CH *CH ) |
| 499 | { |
| 500 | UINT32 env_tam,env_sd,env_top,env_hh; |
| 501 | int whitenoise = (rand()&1)*(WHITE_NOISE_db/EG_STEP); |
| 502 | INT32 tone8; |
| 503 | |
| 504 | OPL_SLOT *SLOT; |
| 505 | int env_out; |
| 506 | |
| 507 | /* BD : same as FM serial mode and output level is large */ |
| 508 | feedback2 = 0; |
| 509 | /* SLOT 1 */ |
| 510 | SLOT = &CH[6].SLOT[SLOT1]; |
| 511 | env_out=OPL_CALC_SLOT(SLOT); |
| 512 | if( env_out < EG_ENT-1 ) |
| 513 | { |
| 514 | /* PG */ |
| 515 | if(SLOT->vib) SLOT->Cnt += (SLOT->Incr*vib/VIB_RATE); |
| 516 | else SLOT->Cnt += SLOT->Incr; |
| 517 | /* connection */ |
| 518 | if(CH[6].FB) |
| 519 | { |
| 520 | int feedback1 = (CH[6].op1_out[0]+CH[6].op1_out[1])>>CH[6].FB; |
| 521 | CH[6].op1_out[1] = CH[6].op1_out[0]; |
| 522 | feedback2 = CH[6].op1_out[0] = OP_OUT(SLOT,env_out,feedback1); |
| 523 | } |
| 524 | else |
| 525 | { |
| 526 | feedback2 = OP_OUT(SLOT,env_out,0); |
| 527 | } |
| 528 | }else |
| 529 | { |
| 530 | feedback2 = 0; |
| 531 | CH[6].op1_out[1] = CH[6].op1_out[0]; |
| 532 | CH[6].op1_out[0] = 0; |
| 533 | } |
| 534 | /* SLOT 2 */ |
| 535 | SLOT = &CH[6].SLOT[SLOT2]; |
| 536 | env_out=OPL_CALC_SLOT(SLOT); |
| 537 | if( env_out < EG_ENT-1 ) |
| 538 | { |
| 539 | /* PG */ |
| 540 | if(SLOT->vib) SLOT->Cnt += (SLOT->Incr*vib/VIB_RATE); |
| 541 | else SLOT->Cnt += SLOT->Incr; |
| 542 | /* connection */ |
| 543 | outd[0] += OP_OUT(SLOT,env_out, feedback2)*2; |
| 544 | } |
| 545 | |
| 546 | // SD (17) = mul14[fnum7] + white noise |
| 547 | // TAM (15) = mul15[fnum8] |
| 548 | // TOP (18) = fnum6(mul18[fnum8]+whitenoise) |
| 549 | // HH (14) = fnum7(mul18[fnum8]+whitenoise) + white noise |
| 550 | env_sd =OPL_CALC_SLOT(SLOT7_2) + whitenoise; |
| 551 | env_tam=OPL_CALC_SLOT(SLOT8_1); |
| 552 | env_top=OPL_CALC_SLOT(SLOT8_2); |
| 553 | env_hh =OPL_CALC_SLOT(SLOT7_1) + whitenoise; |
| 554 | |
| 555 | /* PG */ |
no test coverage detected