@@ -10,29 +10,29 @@ use serde::{Deserialize, Serialize};
1010
1111// Precompute lookup tables for sampling
1212// See https://www.nesdev.org/wiki/APU_Mixer#Lookup_Table
13- const PULSE_TABLE : [ f32 ; 31 ] = const {
14- let mut pulse_table = [ 0.0 ; 31 ] ;
15-
16- let mut n = 1 ;
17- while n < 31 {
18- pulse_table[ n] = 95.52 / ( 8128.0 / ( n as f32 ) + 100.0 ) ;
19- n += 1 ;
20- }
21-
22- pulse_table
23- } ;
24-
25- const TND_TABLE : [ f32 ; 203 ] = const {
26- let mut tnd_table = [ 0.0 ; 203 ] ;
27-
28- let mut n = 1 ;
29- while n < 203 {
30- tnd_table[ n] = 163.67 / ( 24329.0 / ( n as f32 ) + 100.0 ) ;
31- n += 1 ;
32- }
33-
34- tnd_table
35- } ;
13+ // const PULSE_TABLE: [f32; 31] = const {
14+ // let mut pulse_table = [0.0; 31];
15+ //
16+ // let mut n = 1;
17+ // while n < 31 {
18+ // pulse_table[n] = 95.52 / (8128.0 / (n as f32) + 100.0);
19+ // n += 1;
20+ // }
21+ //
22+ // pulse_table
23+ // };
24+ //
25+ // const TND_TABLE: [f32; 203] = const {
26+ // let mut tnd_table = [0.0; 203];
27+ //
28+ // let mut n = 1;
29+ // while n < 203 {
30+ // tnd_table[n] = 163.67 / (24329.0 / (n as f32) + 100.0);
31+ // n += 1;
32+ // }
33+ //
34+ // tnd_table
35+ // };
3636
3737#[ derive( Clone , Serialize , Deserialize ) ]
3838enum SequenceMode {
@@ -85,28 +85,25 @@ impl Apu {
8585 // See: https://www.nesdev.org/wiki/APU_Mixer
8686 let p1 = self . pulse1 . sample ( ) ;
8787 let p2 = self . pulse2 . sample ( ) ;
88- let pulse_out = PULSE_TABLE [ ( p1 + p2) as usize ] ;
89- // let pulse_out = match (p1, p2) {
90- // (0, 0) => 0.0,
91- // _ => 95.88 / ((8128.0 / (p1 as f32 + p2 as f32)) + 100.0),
92- // };
88+ let pulse_out = match ( p1, p2) {
89+ ( 0 , 0 ) => 0.0 ,
90+ _ => 95.88 / ( ( 8128.0 / ( p1 as f32 + p2 as f32 ) ) + 100.0 ) ,
91+ } ;
9392
9493 let triangle = self . triangle . sample ( ) ;
9594 let noise = self . noise . sample ( ) ;
9695 let dmc = self . dmc . sample ( ) ;
9796
98- let tnd_out = TND_TABLE [ ( 3 * triangle + 2 * noise + dmc) as usize ] ;
99-
100- // let tnd_out = match (triangle, noise, dmc) {
101- // (0, 0, 0) => 0.0,
102- // _ => {
103- // let tnd = 1.0
104- // / ((triangle as f32 / 8227.0)
105- // + (noise as f32 / 12241.0)
106- // + (dmc as f32 / 22638.0));
107- // 159.79 / (tnd + 100.0)
108- // }
109- // };
97+ let tnd_out = match ( triangle, noise, dmc) {
98+ ( 0 , 0 , 0 ) => 0.0 ,
99+ _ => {
100+ let tnd = 1.0
101+ / ( ( triangle as f32 / 8227.0 )
102+ + ( noise as f32 / 12241.0 )
103+ + ( dmc as f32 / 22638.0 ) ) ;
104+ 159.79 / ( tnd + 100.0 )
105+ }
106+ } ;
110107
111108 pulse_out + tnd_out
112109 }
0 commit comments