xxxxxxxxxx
let consonant = [
"k",
"s",
"t",
"n",
"h",
"m",
"y",
"r",
"w",
"g",
"z",
"d",
"b",
"p",
];
let consonantJn = [
["か", "き", "く", "け", "こ"],
["さ", "し", "す", "せ", "そ"],
["た", "ち", "つ", "て", "と"],
["な", "に", "ぬ", "ね", "の"],
["は", "ひ", "ふ", "へ", "ほ"],
["ま", "み", "む", "め", "も"],
["や", "い", "ゆ", "え", "よ"],
["ら", "り", " る", "れ", "ろ"],
["わ", "い", "う", "え", "を"],
["が", "ぎ", "ぐ", "げ", "ご"],
["ざ", "じ", "ず", "ぜ", "ぞ"],
["だ", "ぢ", "づ", "で", "ど"],
["ば", "び", "ぶ", "べ", "ぼ"],
["ぱ", "ぴ", "ぷ", "ぺ", "ぽ"],
];
let vowel = ["a", "i", "u", "e", "o"];
let vowelJn = ["あ", "い", "う", "え", "お"];
let alphabet = consonant.concat(vowel);
let textArray = [];
let textPosX = [];
let textPosY = [];
//sound
// let sound;
// let fft;
// let spectrum;
// function preload() {
// sound = loadSound("music.mp3");
// }
function setup() {
createCanvas(600, 600);
textAlign(CENTER, CENTER);
textFont("筑紫B丸ゴシック");
// fft = new p5.FFT(0.8, 16);
// sound.setVolume(0.1);
// sound.loop();
}
function draw() {
background(225);
// spectrum = fft.analyze();
let newTextArray = toJapanese(
textArray,
consonant,
vowel,
consonantJn,
vowelJn
);
let angle = 0;
let iniRadius = 10;
for (let i in newTextArray) {
textSize(iniRadius / 3);
let n = i % 16;
let radius = iniRadius
// + (spectrum[n] - 128) / 20;
textPosX[i] = width / 2 + radius * cos(angle);
textPosY[i] = height / 2 + radius * sin(angle);
push();
translate(textPosX[i], textPosY[i]);
rotate(angle + PI / 2);
if (i % 10 == 7) {
fill("#ad002d");
} else {
fill(48);
}
text(newTextArray[i], 0, 0);
pop();
angle += 0.4;
iniRadius += 1 + i / 20;
}
if (keyIsDown(32)) {
textArray.pop();
}
noStroke();
fill(255, 255, 235, 150);
rect(0, 0, 600, 600);
let alpha = (frameCount % 200) + 50;
if (!textArray.length) {
textSize(50);
fill(48, alpha);
text("Let's Typing !!", width / 2, height / 2);
}
}
function keyTyped() {
let t = textSearch(key, alphabet);
textArray.push(t);
}
function textSearch(_key, _arr) {
let correctKey;
for (let i in _arr) {
if (_key == _arr[i]) {
correctKey = _arr[i];
}
}
return correctKey;
}
function toJapanese(_arr, _c, _v, _cj, _vj) {
let arrjn = [];
let waitChr = [];
let cNum;
for (let i in _arr) {
//子音についての処理
for (let j in _c) {
if (_arr[i] == _c[j]) {
waitChr.push(_c[j]);
}
}
//母音についての処理
//拗音(ex.きゃ)については未実装
for (let j in _v) {
if (_arr[i] == _v[j]) {
if (!waitChr.length) {
arrjn.push(_vj[j]);
} else if (waitChr.length < 2) {
waitChr.push(_v[j]);
for (let k in _c) {
if (waitChr[0] == _c[k]) {
cNum = k;
}
}
for (let k in _v) {
if (waitChr[1] == _v[k]) {
arrjn.push(_cj[cNum][k]);
waitChr.length = 0;
cNum = null;
}
}
} else {
waitChr.length = 0;
}
}
}
}
return arrjn;
}