Files
2022-07-19 23:42:33 +02:00

42 lines
1.2 KiB
JavaScript

import fs from 'fs';
export const loadSample = (context, path) => {
console.log(`load sample: ${path}`);
return new Promise((resolve, reject) => {
fs.readFile(new URL(path, import.meta.url), function (err, buffer) {
if (err) reject(err);
context.decodeAudioData(buffer, resolve);
});
});
};
export async function prepareSamples(context, path, ignore = ['.DS_Store', 'Thumbs.db']) {
const ignored = (filename) => !ignore.includes(filename);
const folders = fs.readdirSync(path).filter(ignored);
return Object.fromEntries(
await Promise.all(
folders.map(async (folder) => {
return [
folder,
await Promise.all(
fs
.readdirSync(path + folder)
.filter(ignored)
.map((filename) => path + folder + '/' + filename)
.map((filepath) => loadSample(context, filepath)),
),
];
}, []),
),
);
}
export const playBuffer = (context, audioBuffer, start = 0) => {
const bufferNode = context.createBufferSource();
bufferNode.connect(context.destination);
bufferNode.buffer = audioBuffer;
bufferNode.loop = false;
bufferNode.start(start);
bufferNode.stop(start + audioBuffer.length / audioBuffer.sampleRate);
};