I haven’t looked at how SoundRecorder.setInput
works, but try calling .connect(recorder)
on all of your sound generating elements before you call .record(outputSound)
on your SoundRecorder
. Live example: Recording Experiments - OpenProcessing
let tada, ding;
let tone;
let recordedSound;
let recorder;
let isRecording = false;
let tonePlaying = false;
let toneBtn;
let tadaBtn;
let dingBtn;
let recordBtn;
let replayBtn;
function preload() {
tada = loadSound('https://www.paulwheeler.us/files/TADA.WAV');
ding = loadSound('https://www.paulwheeler.us/files/DING.WAV');
}
function setup() {
noCanvas();
tone = new p5.Oscillator('sine');
tone.freq(261.63);
tone.amp(0);
toneBtn = createButton('Play Tone');
toneBtn.mouseClicked(() => {
if (!tonePlaying) {
tone.start();
tone.amp(0.5, 0.5);
toneBtn.html('Stop Tone');
tonePlaying = true;
} else {
tone.amp(0, 0.5);
toneBtn.html('Play Tone');
tonePlaying = false;
}
});
tadaBtn = createButton('Tada');
tadaBtn.mouseClicked(() => {
if (!tada.isPlaying()) {
tada.play();
tadaBtn.html('Stop');
} else {
tada.stop();
}
});
tada.onended(() => {
tadaBtn.html('Tada');
});
dingBtn = createButton('Ding');
dingBtn.mouseClicked(() => {
if (!ding.isPlaying()) {
ding.play();
dingBtn.html('Stop');
} else {
ding.stop();
}
});
ding.onended(() => {
dingBtn.html('Ding');
});
recordButton = createButton('Record');
recordButton.mouseClicked(() => {
if (!isRecording) {
recordedSound = new p5.SoundFile();
recorder = new p5.SoundRecorder();
tada.connect(recorder);
ding.connect(recorder);
tone.connect(recorder);
recorder.record(recordedSound);
recordButton.html('Stop Recording');
isRecording = true;
} else {
recorder.stop();
recordedSound.onended(() => {
replayBtn.html('Replay');
});
recordButton.html('Record');
isRecording = false;
}
});
replayBtn = createButton('Replay');
replayBtn.mouseClicked(() => {
if (!isRecording) {
if (recordedSound) {
if (!recordedSound.isPlaying()) {
recordedSound.play();
replayBtn.html('Stop Replay');
} else {
recordedSound.stop();
}
} else {
print('Nothing has been recorded yet!');
}
} else {
print('Can\'t replay while recording!');
}
});
noLoop();
}
function draw() {
}