voice changer, contains echo, change low voice and high voice.

Dependencies:   mbed

condenser microphone connect to p16, audio amplifier and speaker connect to p18, and pull-upped switch connect to p5 for chage voice of low voice, high voice and ecoed voice.

test video-> http://youtu.be/z-7Hj0u6OlA

/media/uploads/hayama/2014-08-11_20.21.54.jpg

Committer:
hayama
Date:
Tue Aug 12 01:20:44 2014 +0000
Revision:
0:f4cbe4a0f1be
voice changer, contains echo, change low voive and high voice.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hayama 0:f4cbe4a0f1be 1
hayama 0:f4cbe4a0f1be 2 // voice changer all function
hayama 0:f4cbe4a0f1be 3 #include "mbed.h"
hayama 0:f4cbe4a0f1be 4 #define ARRAY 4000
hayama 0:f4cbe4a0f1be 5 #define ARRAYLM1 1999
hayama 0:f4cbe4a0f1be 6 #define ARRAYHM1 999
hayama 0:f4cbe4a0f1be 7 #define ARRAYEM1 3999
hayama 0:f4cbe4a0f1be 8 #define DELAYTIME 2000
hayama 0:f4cbe4a0f1be 9 #define ECHOFACTOR 0.5
hayama 0:f4cbe4a0f1be 10
hayama 0:f4cbe4a0f1be 11 float micCB;
hayama 0:f4cbe4a0f1be 12 float x[ARRAY];
hayama 0:f4cbe4a0f1be 13 float y;
hayama 0:f4cbe4a0f1be 14 int j=0,k=0,n=0;
hayama 0:f4cbe4a0f1be 15 int mode=0;
hayama 0:f4cbe4a0f1be 16
hayama 0:f4cbe4a0f1be 17 DigitalIn sw(p5);
hayama 0:f4cbe4a0f1be 18 AnalogIn micC(p16);
hayama 0:f4cbe4a0f1be 19 AnalogOut spOut(p18);
hayama 0:f4cbe4a0f1be 20 BusOut leds( LED4, LED3, LED2, LED1 );
hayama 0:f4cbe4a0f1be 21
hayama 0:f4cbe4a0f1be 22 // voice changer (low voice)
hayama 0:f4cbe4a0f1be 23 void lowVoice(){
hayama 0:f4cbe4a0f1be 24 while(sw) {
hayama 0:f4cbe4a0f1be 25 n++; if (n>1) n=0;
hayama 0:f4cbe4a0f1be 26 if (n==0){ k++; if (k>ARRAYLM1) k=0; }
hayama 0:f4cbe4a0f1be 27 j++; if(j>ARRAYLM1) j=0;
hayama 0:f4cbe4a0f1be 28 x[j]=micC-micCB;
hayama 0:f4cbe4a0f1be 29 y=x[k];
hayama 0:f4cbe4a0f1be 30 spOut=y*10+0.5;
hayama 0:f4cbe4a0f1be 31 leds=abs(y*1000);
hayama 0:f4cbe4a0f1be 32 wait_us(20);
hayama 0:f4cbe4a0f1be 33 }
hayama 0:f4cbe4a0f1be 34 }
hayama 0:f4cbe4a0f1be 35
hayama 0:f4cbe4a0f1be 36 // voice changer (high voice)
hayama 0:f4cbe4a0f1be 37 void highVoice() {
hayama 0:f4cbe4a0f1be 38 while(sw) {
hayama 0:f4cbe4a0f1be 39 n++; if (n>1) n=0;
hayama 0:f4cbe4a0f1be 40 if (n==0){ k++; if (k>ARRAYHM1) k=0; }
hayama 0:f4cbe4a0f1be 41 j++; if(j>ARRAYHM1) j=0;
hayama 0:f4cbe4a0f1be 42 x[k]=micC-micCB;
hayama 0:f4cbe4a0f1be 43 y=x[j];
hayama 0:f4cbe4a0f1be 44 spOut=y*10+0.5;
hayama 0:f4cbe4a0f1be 45 leds=abs(y*1000);
hayama 0:f4cbe4a0f1be 46 wait_us(10);
hayama 0:f4cbe4a0f1be 47 }
hayama 0:f4cbe4a0f1be 48 }
hayama 0:f4cbe4a0f1be 49
hayama 0:f4cbe4a0f1be 50 // voice changer (ECHO)
hayama 0:f4cbe4a0f1be 51 void echoVoice() {
hayama 0:f4cbe4a0f1be 52 k=DELAYTIME;
hayama 0:f4cbe4a0f1be 53 while(sw) {
hayama 0:f4cbe4a0f1be 54 j++; if(j>ARRAYEM1) j=0;
hayama 0:f4cbe4a0f1be 55 k++; if (k>ARRAYEM1) k=0;
hayama 0:f4cbe4a0f1be 56 y=x[j]+=micC-micCB;
hayama 0:f4cbe4a0f1be 57 x[k]=x[j]*ECHOFACTOR;
hayama 0:f4cbe4a0f1be 58
hayama 0:f4cbe4a0f1be 59 spOut=y*10+0.5;
hayama 0:f4cbe4a0f1be 60 leds=abs(y*1000);
hayama 0:f4cbe4a0f1be 61 wait_us(50);
hayama 0:f4cbe4a0f1be 62 }
hayama 0:f4cbe4a0f1be 63 }
hayama 0:f4cbe4a0f1be 64
hayama 0:f4cbe4a0f1be 65 //------------------main-----------------------
hayama 0:f4cbe4a0f1be 66 int main() {
hayama 0:f4cbe4a0f1be 67 wait(2);
hayama 0:f4cbe4a0f1be 68 micCB=0;
hayama 0:f4cbe4a0f1be 69 for(int i=0;i<1000;i++){ micCB+=micC; }
hayama 0:f4cbe4a0f1be 70 micCB/=1000;
hayama 0:f4cbe4a0f1be 71
hayama 0:f4cbe4a0f1be 72 while(1){
hayama 0:f4cbe4a0f1be 73 switch(mode){
hayama 0:f4cbe4a0f1be 74 case 0: lowVoice(); break;
hayama 0:f4cbe4a0f1be 75 case 1: highVoice(); break;
hayama 0:f4cbe4a0f1be 76 case 2: echoVoice(); break;
hayama 0:f4cbe4a0f1be 77 }
hayama 0:f4cbe4a0f1be 78 while(sw==0);
hayama 0:f4cbe4a0f1be 79 wait(0.5);
hayama 0:f4cbe4a0f1be 80 mode++; if (mode>2) mode=0;
hayama 0:f4cbe4a0f1be 81 }
hayama 0:f4cbe4a0f1be 82 }