xxxxxxxxxx
72
/**
* @name Record Save Audio
* @description Record a sound, play it back and save
* it as a .wav file to the client's computer.
* We need three objects: a p5.AudioIn (mic / sound source),
* p5.SoundRecorder (records the sound), and a
* p5.SoundFile (play back / save).
* <p><em><span class="small"> To run this example locally, you will need the
* <a href="http://p5js.org/reference/#/libraries/p5.sound">p5.sound library</a>
* a sound file, and a running <a href="https://github.com/processing/p5.js/wiki/Local-server">local server</a>.</span></em></p>
*/
let mic, recorder, soundFile;
let state = 0; // mousePress will increment from Record, to Stop, to Play
function setup() {
createCanvas(400, 400);
background(200);
fill(0);
text('Enable mic and click the mouse to begin recording', 20, 20);
// create an audio in
mic = new p5.AudioIn();
mic.getSources(gotSources);
// users must manually enable their browser microphone for recording to work properly!
mic.start();
// create a sound recorder
recorder = new p5.SoundRecorder();
// connect the mic to the recorder
recorder.setInput(mic);
// create an empty sound file that we will use to playback the recording
soundFile = new p5.SoundFile();
}
function gotSources(deviceList) {
if (deviceList.length > 0) {
//set the source to the first item in the deviceList array
audioIn.setSource(0);
let currentSource = deviceList[audioIn.currentSource];
text('set source to: ' + currentSource.deviceId, 5, 20, width);
}
}
function mousePressed() {
// use the '.enabled' boolean to make sure user enabled the mic (otherwise we'd record silence)
if (state === 0 /*&& mic.enabled*/) {
// Tell recorder to record to a p5.SoundFile which we will use for playback
recorder.record(soundFile);
background(255, 0, 0);
text('Recording now! Click to stop.', 20, 20);
state++;
} else if (state === 1) {
recorder.stop(); // stop recorder, and send the result to soundFile
background(0, 255, 0);
text('Recording stopped. Click to play & save', 20, 20);
state++;
console.log(soundFile.isLoaded());
} else if (state === 2) {
soundFile.play(); // play the result!
state = 0;
// saveSound(soundFile, 'mySound.wav'); // save file
// state++;
}
}