@@ -2,6 +2,7 @@ var SCREEN_WIDTH = 256;
2
2
var SCREEN_HEIGHT = 240 ;
3
3
var FRAMEBUFFER_SIZE = SCREEN_WIDTH * SCREEN_HEIGHT ;
4
4
5
+ var nes ;
5
6
var canvas_ctx , image ;
6
7
var framebuffer_u8 , framebuffer_u32 ;
7
8
@@ -12,17 +13,6 @@ var audio_samples_L = new Float32Array(SAMPLE_COUNT);
12
13
var audio_samples_R = new Float32Array ( SAMPLE_COUNT ) ;
13
14
var audio_write_cursor = 0 , audio_read_cursor = 0 ;
14
15
15
- var nes = new jsnes . NES ( {
16
- onFrame : function ( framebuffer_24 ) {
17
- for ( var i = 0 ; i < FRAMEBUFFER_SIZE ; i ++ ) framebuffer_u32 [ i ] = 0xFF000000 | framebuffer_24 [ i ] ;
18
- } ,
19
- onAudioSample : function ( l , r ) {
20
- audio_samples_L [ audio_write_cursor ] = l ;
21
- audio_samples_R [ audio_write_cursor ] = r ;
22
- audio_write_cursor = ( audio_write_cursor + 1 ) & SAMPLE_MASK ;
23
- } ,
24
- } ) ;
25
-
26
16
function onAnimationFrame ( ) {
27
17
window . requestAnimationFrame ( onAnimationFrame ) ;
28
18
@@ -76,6 +66,22 @@ function keyboard(callback, event){
76
66
}
77
67
78
68
function nes_init ( canvas_id ) {
69
+ var audio_ctx = new window . AudioContext ( {
70
+ latencyHint : "interactive" ,
71
+ } ) ;
72
+
73
+ nes = new jsnes . NES ( {
74
+ onFrame : function ( framebuffer_24 ) {
75
+ for ( var i = 0 ; i < FRAMEBUFFER_SIZE ; i ++ ) framebuffer_u32 [ i ] = 0xFF000000 | framebuffer_24 [ i ] ;
76
+ } ,
77
+ onAudioSample : function ( l , r ) {
78
+ audio_samples_L [ audio_write_cursor ] = l ;
79
+ audio_samples_R [ audio_write_cursor ] = r ;
80
+ audio_write_cursor = ( audio_write_cursor + 1 ) & SAMPLE_MASK ;
81
+ } ,
82
+ sampleRate : audio_ctx . sampleRate ,
83
+ } ) ;
84
+
79
85
var canvas = document . getElementById ( canvas_id ) ;
80
86
canvas_ctx = canvas . getContext ( "2d" ) ;
81
87
image = canvas_ctx . getImageData ( 0 , 0 , SCREEN_WIDTH , SCREEN_HEIGHT ) ;
@@ -89,13 +95,12 @@ function nes_init(canvas_id){
89
95
framebuffer_u32 = new Uint32Array ( buffer ) ;
90
96
91
97
// Setup audio.
92
- var audio_ctx = new window . AudioContext ( {
93
- latencyHint : "interactive" ,
94
- sampleRate : 48000 ,
95
- } ) ;
96
98
var script_processor = audio_ctx . createScriptProcessor ( AUDIO_BUFFERING , 0 , 2 ) ;
97
99
script_processor . onaudioprocess = audio_callback ;
98
100
script_processor . connect ( audio_ctx . destination ) ;
101
+
102
+ document . addEventListener ( 'keydown' , ( event ) => { keyboard ( nes . buttonDown , event ) } ) ;
103
+ document . addEventListener ( 'keyup' , ( event ) => { keyboard ( nes . buttonUp , event ) } ) ;
99
104
}
100
105
101
106
function nes_boot ( rom_data ) {
@@ -152,6 +157,3 @@ function nes_volume(value){
152
157
nes . papu . setMasterVolume ( value ) ;
153
158
}
154
159
}
155
-
156
- document . addEventListener ( 'keydown' , ( event ) => { keyboard ( nes . buttonDown , event ) } ) ;
157
- document . addEventListener ( 'keyup' , ( event ) => { keyboard ( nes . buttonUp , event ) } ) ;
0 commit comments