Skip to content

Commit f5ad7cc

Browse files
committed
fix save, kind of
Save takes a screenshot which currnetly requires the visualizers to be running. Can fix that later. As is it, you can save. I don't know enough about .wav format to know why the result is softer than the original.
1 parent 99d8f04 commit f5ad7cc

File tree

2 files changed

+10
-15
lines changed

2 files changed

+10
-15
lines changed

editor/index.js

+7-12
Original file line numberDiff line numberDiff line change
@@ -527,22 +527,17 @@ async function showSaveDialog() {
527527
const numSamplesNeeded = sampleRate * numSeconds | 0;
528528
const numChannels = 2;
529529
const wavMaker = new WavMaker(sampleRate, numChannels);
530-
const context = ByteBeatNode.createContext();
531-
const stack = ByteBeatNode.createStack();
530+
const context = await g_byteBeat.createContext();
531+
const stack = await g_byteBeat.createStack();
532532
for (let i = 0; i < numSamplesNeeded; i += sampleRate) {
533533
const start = i;
534534
const end = Math.min(i + sampleRate, numSamplesNeeded);
535-
const output = [
536-
new Float32Array(end - start),
537-
new Float32Array(end - start),
538-
];
539-
for (let j = start; j < end; ++j) {
540-
for (let ch = 0; ch < numChannels; ++ch) {
541-
const s = g_byteBeat.getSampleForTime(j, context, stack, ch);
542-
output[ch][j - i] = s;
543-
}
535+
const dataP = [];
536+
for (let channel = 0; channel < numChannels; ++channel) {
537+
dataP.push(g_byteBeat.getSamplesForTimeRange(start, end, end - start, context, stack, channel));
544538
}
545-
wavMaker.addData(output);
539+
const data = await Promise.all(dataP);
540+
wavMaker.addData(data);
546541
await wait();
547542
}
548543
const blob = wavMaker.getWavBlob();

js/wavmaker.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ class WavMaker {
2424
}
2525
getWavBlob() {
2626
const {numSamples, numChannels, sampleRate, blobs} = this;
27-
var output = new Uint8Array(44);
28-
var view = new DataView(output.buffer);
27+
const output = new Uint8Array(44);
28+
const view = new DataView(output.buffer);
2929

3030
writeString(view, 0, 'RIFF'); // RIFF identifier
3131
view.setUint32(4, 36 + this.numSamples * 2, true); // RIFF chunk length
@@ -39,7 +39,7 @@ class WavMaker {
3939
view.setUint16(32, numChannels * 2, true); // block align (channel count * bytes per sample)
4040
view.setUint16(34, 16, true); // bits per sample
4141
writeString(view, 36, 'data'); // data chunk identifier
42-
view.setUint32(40, numSamples * numChannels* 2, true); // data chunk length
42+
view.setUint32(40, numSamples * numChannels * 2, true); // data chunk length
4343

4444
return new Blob([new Blob([output]), ...blobs], {type: 'audio/wav'});
4545
}

0 commit comments

Comments
 (0)