https://apihost.ru/voice
Почему то процессинг избирательно позволяет использовать файлы (от размера как выяснилось не зависит, может 80 к выдать ошибку и 50 к, а 60 к пропустить ). Ошибка -IndexOutOfBoundsException (Эта ошибка выпадает в том случае, если мы пытаемся получить из массива элемент, позиция которого превышает размер массива) - такое пояснение нашёл, но смысл потаённый не ясен Поэтому дроблю на файлы-фразы и через кнопку перебор.
- Код: Выделить всё • Развернуть
import processing.sound.*;
Amplitude amp;
SoundFile file;
float MUZ;
int i;
int m=0;
int m1=0;
int m2=0;
boolean fl_A=false;//
boolean fl_B=false;//
boolean fl_C=false;//
boolean fl_D=false;//
int nomer_treka=-1;//
void setup() {
size(700, 700,P3D);
background(0);
amp = new Amplitude(this);
}
void draw() {
background(150);lights();
translate(width/2, (height/1.5));
delay(40);
/////////////////// голосовые треки ///////////////////////////////////
for (i=0;i<5;i++){MUZ=MUZ+100*amp.analyze();delay(3);}MUZ=MUZ/5;
if (keyPressed&&key == ' ') {nomer_treka++;if(nomer_treka>2){nomer_treka=0;} delay(100);//если нажат пробел трек запускаем
if(nomer_treka==0){ file = new SoundFile(this,"trek1.mp3");}
if(nomer_treka==1){file.stop(); file = new SoundFile(this,"trek2.mp3");}
if(nomer_treka==2){file.stop(); file = new SoundFile(this,"trek3.mp3");}
file.play();amp.input(file); }
///////////////////////////////////////////////////////////////////////
rotateY(PI*m/255); rotateZ(PI*m1/255);rotateX(PI*m2/255);//вращение аниматроника и глаз его
if(fl_B==false){m++;}else{m--;}if(m==20){fl_B=true;}if(m==-20){fl_B=false;}
if(fl_C==false){m1++;}else{m1--;}if(m1==10){fl_C=true;}if(m1==-10){fl_C=false;}
if(fl_D==false){m2++;}else{m2--;}if(m2==5){fl_D=true;}if(m2==-30){fl_D=false;}
///////////////////// ИЗОБРАЖЕНИЕ АНИМАТРОНИКА /////////////////////////////////////////////////
strokeWeight(8);stroke(255); fill(255, 127,0);
rotateX(-PI/4);triangle(-150, 0, 150, 0, 0, -150);rotateX(PI/4);//верхняя часть рта
if(MUZ>10&&MUZ<22){rotateX(PI/4);triangle(-150, 0, 150, 0, 0, 150);rotateX(-PI/4);}else{rotateX(PI/2);triangle(-150, 0, 150, 0, 0, 150);rotateX(-PI/2);}//нижняя часть рта
noStroke();fill(255); translate(-90,-230,-30);rotateY(-PI*m/64); sphere(50);fill(150);translate(0,0,20);sphere(35);translate(0,0,-20);rotateY(PI*m/64); translate(90,230,30);//глаз
fill(255);translate(90,-230,-30);rotateY(-PI*m/64);sphere(50);fill(150);translate(0,0,20);sphere(35);translate(0,0,-20);rotateY(PI*m/64); translate(-90,230,30);//глаз
strokeWeight(4);stroke(0,100,255); noFill();translate(0,-50,50);for(i=0;i<47;i++){rotateY(-PI*i/32);arc(0, 0, 450, 700, 1.7*PI/2, 3*PI/2);translate(0,-450,0); strokeWeight(2);arc(0, 0, 150, 200,0, PI/2);//шевелюра
strokeWeight(4);translate(0,450,0);rotateY(PI*i/32);}translate(0,50,-50);//шевелюра
rotateY(-PI*m/255);
//////////////////////////////////////////////////////////////////////
}