Both input and output devices are recording, mixed into a single audio stream.
import { writeFile } from "node:fs/promises";
import { setTimeout } from "node:timers/promises";
import { ShareableContent } from "@recappi/sdk";
import { createWavBuffer } from "@recappi/sdk/encode-wav";
const WavBuffers = [];
let totalLength = 0;
const session = ShareableContent.tapGlobalAudio([], (err, samples) => {
if (err) {
console.error("Error capturing audio:", err);
return;
}
WavBuffers.push(samples);
totalLength += samples.length;
});
console.info("Recording audio for 5 seconds...");
await setTimeout(5000); // Record for 5 seconds
session.stop();
console.info(
`Recording stopped. Writing ${totalLength} samples to output.wav...`,
);
const { buf: contactedBuffer } = WavBuffers.reduce(
({ buf, offset }, cur) => {
buf.set(cur, offset);
return {
buf,
offset: offset + cur.length,
};
},
{
buf: new Float32Array(totalLength),
offset: 0,
},
);
console.log(`Creating WAV buffer ...`);
const wavBuffer = Buffer.from(
createWavBuffer(contactedBuffer, {
sampleRate: session.sampleRate,
numChannels: session.channels,
}),
);
await writeFile("output.wav", wavBuffer);yarn install
yarn build
yarn workspace playground dev:server
yarn workspace playground dev:web