запись голоса на ардуино.
- Войдите на сайт для отправки комментариев
Хочу записать свой голос на ардуино, а потом его произвести.Написал программу сейчас под рукой нет ардуино чтобы проверить код.Что думаете?
1.int i = 0;
2.void setup(){
3.Serial.begin(9600);
4.pinMode(5,INPUT);
5.pinMode(3,INPUT);
6.pinMode(7,INPUT);
7.pinMode(1,OUTPUT);
8.}
9.void loop(){
10.while (digitalRead(5) == HIGH){ //пока кнопка нажата считываем частоту и записываем ее в массив.
11.delay(5);
12.val = pulseIn(7,HIGH) + pulseIn(7,LOW);
13.Serial.println(1000000/val);//так мы получаем частоту т.к
14.1/(val/1000000) = 1000000/val
15.int myArray[] = Serial.read;
16}
17.while(digitalRead(3) == HIGH){ //пока 2-ая кнопка нажата воспроизводим записанное
18.delay(5);
19.i = 0;
20.i++;
21.tone(1,myArray[i],5000);
22.}
Попробуй в протеусе провер, ком порт там есть, источник сигнала там тоже есть, ну и увидиш какие ошибки это может выдать.
Микрофон то наверное надо подключать через микрофонный усилитель, а то сигнал будет слишком слабым, или как вы записывать его собираетесь?
Микрофон то наверное надо подключать через микрофонный усилитель, а то сигнал будет слишком слабым, или как вы записывать его собираетесь?
Да микрофонный усилитель уже собран и проверен схему взял отсюда:http://www.cxem.net/sound/soundpred/soundpred5.php
микрофон у меня электретный.
Заново выставляю код, потому что в первом были ошибки.
1.int i = 0;
2.void setup(){
3.Serial.begin(9600);
4.pinMode(5,INPUT);
5.pinMode(3,INPUT);
6.pinMode(7,INPUT);
7.pinMode(1,OUTPUT);
8.}
9.void loop(){
10.while (digitalRead(5) == HIGH){ //пока кнопка нажата считываем частоту и записываем ее в массив.
11.delay(5);
12.val = pulseIn(7,HIGH) + pulseIn(7,LOW);
13.delay(1);
14.Serial.println(1000000/val);//так мы получаем частоту т.к 1/(val/1000000) = 1000000/val
15.int myArray[] = Serial.read;
16}
17.while(digitalRead(3) == HIGH){ //пока 2-ая кнопка нажата воспроизводим записанное
18.delay(5);
19.i = 0;
20.i++;
21.tone(1,myArray[i],5000);
22.}
Что то я в коде логики не вижу.
Причем тут голос и tone?
Звуки записывать нужно через аналоговый порт
Но проблема в том что оперативки не зватит даже для щелчка, не говоря уже о более серьезном звуке
Вернее только и хватит для щелчка
Причем тут голос и tone?
tone - функция воспроизводящая сигнал определенной частоты.
Но проблема в том что оперативки не зватит даже для щелчка, не говоря уже о более серьезном звуке
да об этом я не подумал тогда, что делать покупать ram?
логики не вижу
почему все логично функция pulseIn используется мной для измерения частоты т.к pulseIn(7,HIGH) + pulseIn(7,LOW) = T в микросекундах.T/1000000 = T в секундах,а дальше вспоминаем физику f=1/T
принципи место pilseIn можно использовать функцию freqcounter http://www.interface.khm.de/index.php/lab/experiments/arduino-frequency-counter-library/
почему все логично функция pulseIn используется мной для измерения частоты т.к pulseIn(7,HIGH) + pulseIn(7,LOW) = T в микросекундах.T/1000000 = T в секундах,а дальше вспоминаем физику f=1/T
Потому что кроме длительности еще и уровень семпла нужно измерять.
Еще нужно все измерения привязать к частоте семплинга которая как минимум должна быть 2*Fmax.
Минимальная частота для записи голоса 8000Гц , Что соответствует диапазону частот голосового спектра 100-4000Гц