Skip to content

Commit e6b6550

Browse files
Merge branch 'main' into preset-fix
2 parents 45331ab + 06c755b commit e6b6550

File tree

4 files changed

+246
-60
lines changed

4 files changed

+246
-60
lines changed

package-lock.json

Lines changed: 25 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/components/Equalizers.jsx

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { useState, useEffect, useRef } from 'react';
2+
import { useState, useMemo } from 'react';
23
import Display from './Display';
34

45
/**
@@ -96,6 +97,53 @@ function EQ({ wasmModule, width, height, freqs: liveFreqs, eq, setEq }) {
9697
/>
9798
</div>
9899
);
100+
const processedFreqs = useMemo(() => {
101+
if (!wasmModule || !liveFreqs) return [];
102+
103+
let nodesVec, curvesVec, freqsVec;
104+
try {
105+
// Manually convert JS arrays to the Embind Vector types.
106+
nodesVec = new wasmModule.VectorNode();
107+
nodes.forEach(node => nodesVec.push_back(node));
108+
109+
curvesVec = new wasmModule.VectorDouble();
110+
curves.forEach(curve => curvesVec.push_back(curve));
111+
112+
freqsVec = new wasmModule.VectorVectorDouble();
113+
(liveFreqs || []).forEach(freqPair => {
114+
const pair = new wasmModule.VectorDouble();
115+
pair.push_back(freqPair[0]);
116+
pair.push_back(freqPair[1]);
117+
freqsVec.push_back(pair);
118+
pair.delete();
119+
});
120+
121+
return wasmModule.applyEnvelope(nodesVec, curvesVec, freqsVec);
122+
} finally {
123+
// Ensure memory is always freed, even if an error occurs.
124+
if (nodesVec) nodesVec.delete();
125+
if (curvesVec) curvesVec.delete();
126+
if (freqsVec) freqsVec.delete();
127+
}
128+
}, [wasmModule, nodes, curves, liveFreqs]);
129+
130+
return (
131+
<div className='EQ'>
132+
<h3>Frequency EQ</h3>
133+
<Display
134+
width={width}
135+
height={height}
136+
nodes={nodes}
137+
xRange={xRange}
138+
curves={curves}
139+
onNodesChange={setNodes}
140+
onCurvesChange={setCurves}
141+
freqs={processedFreqs}
142+
isLogarithmic={true}
143+
wasmModule={wasmModule}
144+
/>
145+
</div>
146+
);
99147
}
100148

101149
export default EQ;

0 commit comments

Comments
 (0)