xxxxxxxxxx
128
let classifier;
let predictedSound = "";
const modelJson = "https://teachablemachine.withgoogle.com/models/n702_a7ev/";
let x = 40, y = 40;
let n = 3, n2 = 3, n3 = 3;
let numSentences1 = 2, numSentences2 = 3, numSentences3 = 3;
let displayText = [""];
let markov, markov2, markov3;
let source1, source2, source3;
let moon, bakunawa, miniMoon;
let keywordDetected = false;
let counter = 0;
let startButton;
function preload() {
moon = loadImage("moon.png");
miniMoon = loadImage("miniMoon.png");
bakunawa = loadImage("bakunawa.png");
source1 = loadStrings("source1.txt");
source2 = loadStrings("source2.txt");
source3 = loadStrings("source3.txt");
}
function setup() {
createCanvas(500, 500);
startButton = createButton('Offer Prayer');
startButton.position(180, 360);
startButton.size(150, 60);
startButton.style('background-color', 'black');
startButton.style('color', 'white');
startButton.style('font-size', '18px');
startButton.mousePressed(startModel);
textAlign(CENTER, CENTER);
// create markov models
markov = RiTa.markov(n);
markov2 = RiTa.markov(n2);
markov3 = RiTa.markov(n3);
// load text into the models
markov.addText(source1.join(" "));
markov2.addText(source2.join(" "));
markov3.addText(source3.join(" "));
}
function draw() {
background(0);
textFont('Courier New');
if (!keywordDetected) {
showIntroScreen();
} else {
generateMessageFromKeywords();
}
}
function showIntroScreen() {
fill(255);
textSize(14);
text('Speak aloud a prayer for the collective using one of these words:', 90 , 100, 320);
textSize(30);
textFont("Bungee Hairline");
fill(255, 87, 51);
text('Love, Pain, Power', width / 2, 180);
text('Heaven, Earth, Creatures', width / 2, 240);
text('Instincts, Soul, Voice', width / 2, 300);
}
function generateMessageFromKeywords() {
if (predictedSound === "Moon") {
background(231, 176, 255);
displayText = markov3.generate(numSentences3);
image(moon, 0, 0, 500, 500);
text(displayText.join(" "), x, y, 420, 440);
} else if (predictedSound === "miniMoon") {
background(255, 242, 143);
displayText = markov2.generate(numSentences2);
image(miniMoon, 0, 0, 500, 500);
text(displayText.join(" "), x, y, 420, 440);
} else if (predictedSound === "Bakunawa") {
background(255, 242, 143);
displayText = markov.generate(numSentences1);
image(bakunawa, 0, 0, 500, 500);
text(displayText.join(" "), x, y, 420, 440);
}
counter += 1;
if (counter > 600) {
keywordDetected = false;
counter = 0;
}
}
function startModel() {
ml5.soundClassifier(modelJson, {}, function(err, classifierInstance) {
if (err) {
return;
}
classifier = classifierInstance;
classifier.classify(gotResult);
startButton.hide(); // Hide the button once the model starts
});
}
function gotResult(error, results) {
if (error) {
return;
}
if (results && results.length > 0) {
predictedSound = results[0].label; // Get the label of the most confident prediction
if (predictedSound === "Moon" || predictedSound === "miniMoon" || predictedSound === "Bakunawa") {
keywordDetected = true;
}
}
}