Taligenkänning och syntes med Arduino (2 / 4 steg)

Steg 2: Ladda upp koden till Arduino


Nu måste du ladda upp koden nedan till din Arduino. Du kan också hämta den Arduino skissen från länken längst ner på sidan. Innan du överför koden, måste du installera korrekt BitVoicer Server biblioteken i Arduino IDE (Importera .zip bibliotek).

#include < BVSP.h >
#include < BVSMic.h >
#include < BVSSpeaker.h >
#include < DAC.h >
Definierar den Arduino PIN-kod som används för att spela in ljud
#define BVSM_AUDIO_INPUT 7
Definierar de LED stift
#define RED_LED_PIN 6
#define YELLOW_LED_PIN 9
#define GREEN_LED_PIN 10
Definierar de konstanter som ska skickas som parametrar till
funktionen BVSP.begin
CONST osignerade långa STATUS_REQUEST_TIMEOUT = 3000;
CONST osignerade långa STATUS_REQUEST_INTERVAL = 4000;
Definierar storleken på mic audio bufferten
CONST int MIC_BUFFER_SIZE = 64;
Definierar storleken på högtalare audio bufferten
CONST int SPEAKER_BUFFER_SIZE = 128;
Definierar storleken på mottagningsbufferten
CONST int RECEIVE_BUFFER_SIZE = 2;
Initierar en ny global instans av klassen BVSP
BVSP bvsp = BVSP();
Initierar en ny global instans av klassen BVSMic
BVSMic bvsm = BVSMic();
Initierar en ny global instans av klassen BVSSpeaker
BVSSpeaker bvss = BVSSpeaker();
Skapar en buffert som används för att läsa registrerade värden
från klassen BVSMic
byte micBuffer [MIC_BUFFER_SIZE];
Skapar en buffert som används för att skriva ljud prover
i klassen BVSSpeaker
byte speakerBuffer [SPEAKER_BUFFER_SIZE];
Skapar en buffert som används för att läsa kommandon skickas
från BitVoicer Server.
Byte 0 = pin-kod
Byte 1 = pin värde
byte receiveBuffer [RECEIVE_BUFFER_SIZE];
Dessa variabler används till att kontrollera när du vill spela
"LED anteckningar". Dessa anteckningar kommer att spelas tillsammans med
sången strömmas från BitVoicer Server.
bool playLEDNotes = false;
unsigned int playStartTime = 0;
void setup()
{
Ställer in pin lägen
pinMode (RED_LED_PIN, OUTPUT);
pinMode (YELLOW_LED_PIN, OUTPUT);
pinMode (GREEN_LED_PIN, OUTPUT);
Anger starttillståndet för alla lysdioder
digitalWrite (RED_LED_PIN, låg);
digitalWrite (YELLOW_LED_PIN, låg);
digitalWrite (GREEN_LED_PIN, låg);

Börjar seriell kommunikation på 115200 bps
Serial.BEGIN(115200);

Ställer Arduino seriell port som ska användas för
kommunikation, hur lång tid det tar innan en statusbegäran
gånger ut och hur ofta ska status förfrågningar skickas till
BitVoicer Server.
BVSP.BEGIN (serienummer, STATUS_REQUEST_TIMEOUT, STATUS_REQUEST_INTERVAL);

Definierar den funktion som kommer att hantera frameReceived
händelse
bvsp.frameReceived = BVSP_frameReceived;
Anger den funktion som kommer att hantera modeChanged
händelse
bvsp.modeChanged = BVSP_modeChanged;

Anger den funktion som kommer att hantera streamReceived
händelse
bvsp.streamReceived = BVSP_streamReceived;

Förbereder BVSMic klassen timer
bvsm.BEGIN();
Anger den DAC som kommer att användas av klassen BVSSpeaker
bvss.BEGIN(DAC);
}
void loop()
{
Kontrollerar om status begäran intervallet har förflutit och om det
har, skickar en statusbegäran till BitVoicer Server
bvsp.keepAlive();

Kontrollerar om det finns data på den seriella port buffert
och bearbetar dess innehåll enligt specifikationerna
för BitVoicer servern protokoll
BVSP.Receive();
Kontrollerar om det finns en SRE. Om sådan finns,
Starta inspelning.
om (bvsp.isSREAvailable())
{
Om klassen BVSMic inte spelar in, ställer in ljud
ingång och startar inspelning
om (! bvsm.isRecording)
{
bvsm.setAudioInput (BVSM_AUDIO_INPUT, standard);
bvsm.startRecording();
}
Kontrollerar om klassen BVSMic har tillgängliga prover
om (bvsm.available)
{
Ser till att de inkommande läge är STREAM_MODE innan
överföring av dataströmmen
om (bvsp.inboundMode == FRAMED_MODE)
bvsp.setInboundMode(STREAM_MODE);

Läser de ljud proverna från klassen BVSMic
int bytesRead = bvsm.read (micBuffer, MIC_BUFFER_SIZE);

Skickar ljudströmmen till BitVoicer Server
bvsp.sendStream (micBuffer, bytesRead);
}
}
annat
{
Det finns ingen SRE. Om klassen BVSMic inspelning,
stannar den.
om (bvsm.isRecording)
bvsm.stopRecording();
}
Spelar alla ljud prover finns i klassen BVSSpeaker
intern buffert. Dessa prover är skrivna i den
BVSP_streamReceived händelsehanterare. När inga prov
finns i interna bufferten, ingenting spelas.
bvss.Play();
Om playLEDNotes har angetts till true,
spelar "LED notes" tillsammans med musiken.
om (playLEDNotes)
playNextLEDNote();
}
Hanterar frameReceived händelsen
void BVSP_frameReceived (byte dataType, int payloadSize)
{
Kontrollerar om den mottagna ram innehåller binära data
0x07 = binära data (bytematris)
om (datatyp == DATA_TYPE_BINARY)
{
Om 2 byte var emot, behandla kommandot.
om (bvsp.getReceivedBytes (receiveBuffer, RECEIVE_BUFFER_SIZE) ==
RECEIVE_BUFFER_SIZE)
{
analogWrite (receiveBuffer [0], receiveBuffer[1]);
}
}
Kontrollerar om den mottagna ram innehåller datatypen byte
0x01 = byte datatyp
annars om (datatyp == DATA_TYPE_BYTE)
{
Om det mottagna bytevärdet 255, anger playLEDNotes
och markerar den aktuella tiden.
om (bvsp.getReceivedByte() == 255)
{
playLEDNotes = sant;
playStartTime = millis();
}
}
}
Hanterar modeChanged händelsen
void BVSP_modeChanged()
{
Om outboundMode (Server--> enhet) har vänt sig till
FRAMED_MODE, ingen ljudströmmen är tänkt att tas emot.
Berättar för klassen BVSSpeaker till slut spela när dess
intern buffert bli tom.
om (bvsp.outboundMode == FRAMED_MODE)
bvss.finishPlaying();
}
Hanterar streamReceived händelsen
void BVSP_streamReceived(int size)
{
Får den mottagna strömmen från klassen BVSP
int bytesRead = bvsp.getReceivedStream (speakerBuffer,
SPEAKER_BUFFER_SIZE);

Enqueues mottagna strömmen att spela
bvss.enqueue (speakerBuffer, bytesRead);
}
Tänds den lämpliga LED-baserade på tiden
kommandot för att börja spela LED anteckningar mottogs.
Timings används här är synkroniserad med musik.
void playNextLEDNote()
{
Blir tiden mellan playStartTime och den
aktuell tid.
osignerade långa förflutit = millis() - playStartTime;
Stänger av alla lysdioder
allLEDsOff();
Sista noteringen har spelats.
Stänger av den sista LED och slutar spela LED toner.
om (förflutit > = 11500)
{
analogWrite (RED_LED_PIN, 0);
playLEDNotes = false;
}
annars om (förflutit > = 9900)
analogWrite (RED_LED_PIN, 255); C Obs
annars om (förflutit > = 9370)
analogWrite (RED_LED_PIN, 255); C Obs
annars om (förflutit > = 8900)
analogWrite (YELLOW_LED_PIN, 255); D Obs
annars om (förflutit > = 8610)
analogWrite (RED_LED_PIN, 255); C Obs
annars om (förflutit > = 8230)
analogWrite (YELLOW_LED_PIN, 255); D Obs
annars om (förflutit > = 7970)
analogWrite (YELLOW_LED_PIN, 255); D Obs
annars om (förflutit > = 7470)
analogWrite (RED_LED_PIN, 255); C Obs
annars om (förflutit > = 6760)
analogWrite (GREEN_LED_PIN, 255); E Obs
annars om (förflutit > = 6350)
analogWrite (RED_LED_PIN, 255); C Obs
annars om (förflutit > = 5880)
analogWrite (YELLOW_LED_PIN, 255); D Obs
annars om (förflutit > = 5560)
analogWrite (RED_LED_PIN, 255); C Obs
annars om (förflutit > = 5180)
analogWrite (YELLOW_LED_PIN, 255); D Obs
annars om (förflutit > = 4890)
analogWrite (YELLOW_LED_PIN, 255); D Obs
annars om (förflutit > = 4420)
analogWrite (RED_LED_PIN, 255); C Obs
annars om (förflutit > = 3810)
analogWrite (GREEN_LED_PIN, 255); E Obs
annars om (förflutit > = 3420)
analogWrite (RED_LED_PIN, 255); C Obs
annars om (förflutit > = 2930)
analogWrite (YELLOW_LED_PIN, 255); D Obs
annars om (förflutit > = 2560)
analogWrite (RED_LED_PIN, 255); C Obs
annars om (förflutit > = 2200)
analogWrite (YELLOW_LED_PIN, 255); D Obs
annars om (förflutit > = 1930)
analogWrite (YELLOW_LED_PIN, 255); D Obs
annars om (förflutit > = 1470)
analogWrite (RED_LED_PIN, 255); C Obs
annars om (förflutit > = 1000)
analogWrite (GREEN_LED_PIN, 255); E Obs
}
Stänger av alla lysdioder.
void allLEDsOff()
{
analogWrite (RED_LED_PIN, 0);
analogWrite (YELLOW_LED_PIN, 0);
analogWrite (GREEN_LED_PIN, 0);
}

Denna skiss har sju huvuddelar:

  • Referenser bibliotek och variabeldeklaration: de fyra första raderna innehåller hänvisningar till den BVSP, BVSMic, BVSSpeaker och DAC biblioteken. Dessa bibliotek kommer från BitSophia och finns i mappen BitVoicer Server installation. DAC biblioteket ingår automatiskt när du lägger till en referens till BVSSpeaker-biblioteket. De övriga raderna deklarera konstanter och variabler som används i hela skissen. Klassen BVSP används för att kommunicera med BitVoicer Server, klassen BVSMic används för att fånga och lagra ljud prover och klassen BVSSpeaker används för att återge ljud med vederbörlig DAC.
  • Setup funktion: denna funktion utför följande åtgärder: ställer in pin lägen och deras ursprungliga tillstånd; initierar seriell kommunikation; och initialiserar klasserna BVSP, BVSMic och BVSSpeaker. Det fastställer också "händelsehanterare" (de är faktiskt fungerar pekare) för frameReceived, modeChanged och streamReceived händelserna i BVSP klass.
  • Loop funktion: denna funktion utför fem viktiga åtgärder: begär status information till servern (keepAlive() funktion); kontrollerar om servern har skickat några data och bearbetar den mottagna datan (receive() funktion); styr inspelningen och sändning av ljudströmmar (isSREAvailable(), startRecording(), stopRecording() och sendStream() funktioner); spelar de ljud proverna i kö i klassen BVSSpeaker (play() funktion); och samtal i playNextLEDNote() funktion som styr hur lamporna bör blinka efter kommandot playLEDNotes tas emot.
  • BVSP_frameReceived funktion: denna funktion kallas varje gång funktionen receive() anger att en komplett ram har mottagits. Här kör jag de kommandon som skickas från BitVoicer Server. Kommandon som styr lysdioderna innehåller 2 byte. Den första byten anger PIN-koden och den andra byten anger pin värdet. Jag använder analogWrite() funktionen för att ange lämpligt värde till PIN-koden. Jag också kontrollera om kommandot playLEDNotes, som är av typen Byte, har mottagits. Om det har tagits emot, sätta jag playLEDNotes till true och markera den aktuella tiden. Denna tid kommer att användas av funktionen playNextLEDNote synkronisera lysdioder med sången.
  • BVSP_modeChanged funktion: denna funktion kallas varje gång funktionen receive() identifierar en lägesändring i utgående riktning (Server--> Arduino). WOW! Vad är det?! BitVoicer servern kan skicka inramade data eller ljudströmmar till Arduino. Innan meddelandet går från ett läge till ett annat, skickar BitVoicer servern en signal. Klassen BVSP identifierar denna signal och väcker händelsen modeChanged. I funktionen BVSP_modeChanged om jag upptäcker att meddelandet kommer från Strömläge att inramade läge, vet jag att ljudet är slut så jag kan berätta den BVSSpeaker klassen att sluta spela ljud prover.
  • BVSP_streamReceived funktion: denna funktion kallas varje gång funktionen receive() identifierar att ljud prover har tagits emot. Jag bara hämta proverna och köa dem in i BVSSpeaker klassen så funktionen play() kan återge dem.
  • playNextLEDNote funktion: denna funktion körs endast om funktionen BVSP_frameReceived identifierar kommandot playLEDNotes. Det kontrollerar och synkroniserar lysdioderna med ljud skickas från BitVoicer Server. Om du vill synkronisera lysdioder med ljud och vet rätt timing, använde jag Sonic Visualizer. Fri programvara får mig att se ljud vågor så jag kunde enkelt säga när ett piano knapptryckningen. Det visar också en tidslinje och det är hur jag fick millisekunder används i denna funktion. Låter som en dum knep och det är. Jag tror det skulle vara möjligt att analysera ljudströmmen och vända på motsvarande LED, men det är min oåtkomligt.
Se Steg
Relaterade Ämnen

Untethered taligenkänning och syntes med Arduino

MOVI står för "Min egen röst Interface" och är en kickstarter-backed Arduino Shield som gör det mycket enkelt att bygga din egen tal dialoger att styra enheter inom Arduino IDE. Denna snabba instructable visar dig hur du kommer igång att inrätta...

Untethered taligenkänning och syntes med MOVI med Rasberry PI

MOVI Arduino röst dialogrutan Shield är en Arduino shield som gör det möjligt att lägga till tal dialogrutan i någon grej som är Arduino kontrolleras. Du kan träna dina egna meningar och anropssignal, den levereras med en front-end ljud och inte behö...

DH11 Temperatur och luftfuktighetsgivare med Arduino

Detta är en Tutorial på hur man använder DH11 temperatur och luftfuktighetsgivare med Arduino.Steg 1: Titta på denna Video (detta är en fullständig handledning)Denna video visar det fullständiga förfarandet om hur du använder denna Sensor.Steg 2: Ins...

Kolla fuktighet, temperatur och daggpunkt med Arduino

Kolla fuktighet, temperatur och daggpunkt med Arduino uno med DHT11 Sensor genom seriella Monitor.Steg 1: DHT11 givare (luftfuktighet Sensor)Anslutning av tråd.Röd = VCC 5VGrön = Data stiftSvart = jordPIN-konfiguration:Röd = 5VGrön = stift 7Svart = j...

En svävar sfär roterar lyser och blinkar med Arduino

En svävar lite Dödsstjärnan i Instructables bjöd in mig till det nya projektet med Arduino. Tre principer var beslutat och höll för att skilja den från föregångaren.Gör det själv med någon (eller mindre) färdiga.Hålla roterande.Göra glöd och blinka u...

GY-521 MPU6050 3 axel gyroskop och Accelerometer med Arduino

Denna video tutorial går över installation och konfiguration av en GY-521 styrelse med MPU6050 3 axel gyroskop och Accelerometer med en Arduino. Efter några inledande felsökning med kunde jag få komponent fungerar. Först hade jag problem med lös skär...

Guide till gyro och accelerometer med Arduino inklusive Kalman filtrering

denna guide var först postat på forumet Arduino, och kan hittas här: http://arduino.cc/forum/index.php/topic, 58048.0.htmlJag återuppfört bara den, så ännu mer kommer att få användning av den. Koden kan hittas här:https://github.com/TKJElectronics/ex...

Använda en Accelerometer och gyroskop med Arduino

jag köpte nyligen en kombination 3 axlig accelerometer och 2 axis gyroskop från Sparkfun och jag ville lägga upp några av koden jag brukade få det igång. Jag planerar att använda den i en Arduino baserad MIDI-controller som jag kommer att utstationer...

Helgen projektet klocka datum termometer och luftfuktighet med Arduino mega

killar, jag vill dela min helg projekt på att skapa en klocka med fukt och temperaturgivare,Det är med DHT11 sensor, RTC DS1307, LCD 16 x 2 och Arduino Mega 2560,Hålla läsning och lycka tillSteg 1: Förbered alla delar behövs... i detta experiment beh...

En trådlös Smart Home (var: hem simulator och larm med Arduino eller Atmega328 (Uppdaterad maj 2016))

Obs: det nu är en android bluetooth kontroll app ibble för detta projektObs: Även om det började som ett projekt simulera min närvaro i hemmet, det har vuxit till ett smart hem, därav titeln jag detta InstructableNär folk är på semester, eller ibland...

Hur använder gamla Stepper Motors med Arduino och A4988 Driver

Jag har varit med stegmotorer ett tag nu, och de är fantastiska för alla typer av robotic projekt.Idag kommer jag att dela de saker jag har lärt mig hittills om återanvända gamla stegmotorer bärgades från skrivare. Identifiera stegmotorerStegmotorer...

DIY handgjorda Hexapod med arduino (Hexdrake)

Hej, jag är David och i detta instructable ska jag visa hur jag gjorde detta hexapod vars namn är Hexdrake.Sedan jag var 16 blev jag intresserad av elektronisk och senare i robotteknik. Efter att få någon nivå och programmeringskunskaper använder ard...

Flera fermenteren temperaturkontroll med Arduino

Temperaturkontroll anses ofta vara en av de topp fem stegen mot brygga bättre öl. (http://beerandwinejournal.com/10-better-1/) Det finns många metoder för att hålla jäsande vört vid optimala temperaturer från inslagning en damejeanne i en filt att hå...

Nybörjarens guide till ESP8266 och tweeting med ESP8266

Jag lärde mig om Arduino 2 år sedan. Så började jag spela runt med enkla saker som lysdioder, knappar, motorer etc. Då tänkte jag skulle inte det vara häftigt att ansluta för att göra saker som visar dagens väder, aktiekurser, träna timings på en LCD...

POV Cylinder med Arduino vederbörlig

POV cylindern visar animerade GIF-bilder på en roterande cylinder. GIF-bilder kan hämtas från en dator via Bluetooth.IntroduktionFörra året bestämde jag mig att börja min första Arduino projekt. Mitt arbete var inspirerad av flera maker projekt som s...

Följ de ledare LED med Arduino

vill skapa en galen flashiga grejen?Ja är detta steg-för-steg guiden att göra det.!Med bara några delar som är ganska vanligt, kan du slutföra detta projekt. Väl kan börja!Steg 1: Steg 1 - material och delar Material:• En arduino uno• 11-15 pre cut l...

Trådlös Audio Streaming och taligenkänning med Arduino

i detta projekt jag ansluta min Arduino ombord till en WiFly modul (https://www.sparkfun.com/products/10822) från ambulerande nätverk och strömma ljud till datorn, så att BitVoicer (http://www.bitsophia.com/BitVoicer.aspx) kan utföra taligenkänning....

Taligenkänning med Arduino och BitVoicer Server

I detta Instructable ska jag visa hur man använder en Arduino ombord och BitVoicer Server för att kontrollera några lysdioder med röstkommandon. Jag kommer att använda Arduino Micro i detta Instructable, men du kan använda en Arduino ombord du har ti...

Röst till Arduino: Kontroll lysdioder med hjälp av taligenkänning MIT

Hej, alla!!! Det har varit en tid jag inte hade uppdaterat mitt inlägg här. Idag vill jag dela med er killar ett experiment jag gjorde. Jag kommer att kontrollera lysdioder med MIT app inventor taligenkänning. Åh innan jag glömmer, hade jag också sta...