Taligenkänning med Arduino och BitVoicer Server (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 >
Definierar den Arduino PIN-kod som används för att spela in ljud
#define BVSM_AUDIO_INPUT 5
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 = 1000;
CONST osignerade långa STATUS_REQUEST_INTERVAL = 2000.
Definierar storleken på bufferten som ljud
CONST int AUDIO_BUFFER_SIZE = 64;
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();
Skapar en buffert som används för att läsa registrerade värden
från klassen BVSMic
byte audioBuffer [AUDIO_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];
void setup()
{
Ställer in pin lägen
pinMode (RED_LED_PIN, OUTPUT);
pinMode (YELLOW_LED_PIN, OUTPUT);
pinMode (GREEN_LED_PIN, OUTPUT);
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;
Förbereder BVSMic klassen timer
bvsm.BEGIN();
}
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, yttre);
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 (audioBuffer, AUDIO_BUFFER_SIZE);
Skickar ljudströmmen till BitVoicer Server
bvsp.sendStream (audioBuffer, bytesRead);
}
}
annat
{
Det finns ingen SRE. Om klassen BVSMic inspelning,
stannar den.
om (bvsm.isRecording)
bvsm.stopRecording();
}
}
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]);
}
}
}
Denna skiss har fyra huvuddelar:
- Referenser bibliotek och variabeldeklaration: de två första raderna innehåller hänvisningar till den BVSP och BVSMic biblioteken. Dessa bibliotek kommer från BitSophia och finns i mappen BitVoicer Server installation. De övriga raderna deklarera konstanter och variabler som används i hela skissen. Klassen BVSP används för att kommunicera med BitVoicer Server och klassen BVSMic används för att fånga och lagra ljud prover.
- Setup funktion: denna funktion initierar seriell kommunikation, klassen BVSP, BVSMic klass och uppsättningar av "händelsehanteraren" (det är faktiskt en funktionspekare) för händelsen frameReceived.
- Loop funktion: denna funktion utför tre 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), och kontrollerar inspelningen och sändning av ljudströmmar (isSREAvailable(), startRecording(), stopRecording() och sendStream() funktioner);
- BVSP_frameReceived funktion: denna funktion kallas varje gång funktionen receive() anger att en komplett ram har mottagits. Här kör jag kommandot skickas från BitVoicer Server. Kommandot 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.