@@ -13,10 +13,15 @@ import {
1313 renderWaveforms
1414} from "./render_waveforms.js" ;
1515import { consoleColors } from "../utils/console_colors.js" ;
16- import { BasicMIDI , midiMessageTypes } from "spessasynth_core" ;
16+ import {
17+ BasicMIDI ,
18+ midiMessageTypes ,
19+ type SynthSystem
20+ } from "spessasynth_core" ;
1721import type { Sequencer } from "spessasynth_lib" ;
1822import type { LocaleManager } from "../locale/locale_manager.ts" ;
1923import type { Synthesizer } from "../utils/synthesizer.ts" ;
24+ import { drawDotMatrix } from "./draw_dot_matrix.ts" ;
2025
2126/**
2227 * Renderer.js
@@ -44,6 +49,8 @@ export const rendererModes = {
4449
4550export type RendererMode = ( typeof rendererModes ) [ keyof typeof rendererModes ] ;
4651
52+ const DISPLAY_MATRIX_TIMEOUT = 2880 ;
53+
4754// Analysers
4855const CHANNEL_ANALYSER_FFT = 1024 ;
4956const DRUMS_ANALYSER_FFT = 4096 ;
@@ -90,6 +97,12 @@ export class Renderer {
9097 public sideways = false ;
9198 public readonly updateFftSize = updateFftSize . bind ( this ) ;
9299 public readonly render = render . bind ( this ) ;
100+ /**
101+ * For XG/GS display matrix
102+ */
103+ public readonly displayMatrix = Array . from ( { length : 16 } , ( ) =>
104+ new Array < boolean > ( 16 ) . fill ( false )
105+ ) ;
93106 protected version : string ;
94107 protected _notesFall = true ;
95108 protected canvas : HTMLCanvasElement ;
@@ -120,12 +133,15 @@ export class Renderer {
120133 protected readonly disconnectChannelAnalysers =
121134 disconnectChannelAnalysers . bind ( this ) ;
122135 protected readonly renderWaveforms = renderWaveforms . bind ( this ) ;
136+ protected readonly drawDotMatrix = drawDotMatrix . bind ( this ) ;
123137 protected readonly renderSingleWaveform = renderSingleWaveform . bind ( this ) ;
124138 protected readonly renderSingleFft = renderSingleFft . bind ( this ) ;
125139 protected readonly renderBigFft = renderBigFft . bind ( this ) ;
126140 protected readonly inputNode : AudioNode ;
127141 protected readonly workerMode : boolean ;
128142 protected readonly sampleRateFactor : number ;
143+ protected showDisplayMatrix : SynthSystem | null = null ;
144+ private displayMatrixTimeout = 0 ;
129145
130146 /**
131147 * Creates a new midi renderer for rendering notes visually.
@@ -248,12 +264,12 @@ export class Renderer {
248264
249265 protected _stabilizeWaveforms = true ;
250266
251- // noinspection JSUnusedGlobalSymbols
252-
253267 public get stabilizeWaveforms ( ) {
254268 return this . _stabilizeWaveforms ;
255269 }
256270
271+ // noinspection JSUnusedGlobalSymbols
272+
257273 public set stabilizeWaveforms ( val : boolean ) {
258274 this . _stabilizeWaveforms = val ;
259275 this . updateFftSize ( ) ;
@@ -316,6 +332,14 @@ export class Renderer {
316332 this . _notesFall = val === "down" ;
317333 }
318334
335+ public updateDisplayMatrix ( mode : SynthSystem ) {
336+ this . showDisplayMatrix = mode ;
337+ clearTimeout ( this . displayMatrixTimeout ) ;
338+ this . displayMatrixTimeout = window . setTimeout ( ( ) => {
339+ this . showDisplayMatrix = null ;
340+ } , DISPLAY_MATRIX_TIMEOUT ) ;
341+ }
342+
319343 public setRendererMode ( mode : RendererMode ) {
320344 this . rendererMode = mode ;
321345 this . updateFftSize ( ) ;
0 commit comments