Sakis Kasampalis
/
cricket
Cricket (insect) emulation
Fork of talking by
talking.cpp@1:91104d67b0af, 2017-02-11 (annotated)
- Committer:
- faif
- Date:
- Sat Feb 11 14:19:31 2017 +0000
- Revision:
- 1:91104d67b0af
- Parent:
- 0:17458f91a0e9
Use a better audio clip and adjust the length
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
faif | 0:17458f91a0e9 | 1 | #include "mbed.h" |
faif | 0:17458f91a0e9 | 2 | |
faif | 0:17458f91a0e9 | 3 | Ticker rhythm; |
faif | 0:17458f91a0e9 | 4 | LocalFileSystem fs("local"); // required even if it appears like it's not used |
faif | 0:17458f91a0e9 | 5 | |
faif | 0:17458f91a0e9 | 6 | DigitalIn button(p20); |
faif | 0:17458f91a0e9 | 7 | DigitalOut led(LED1); |
faif | 0:17458f91a0e9 | 8 | AnalogOut headphones(p18); |
faif | 0:17458f91a0e9 | 9 | |
faif | 0:17458f91a0e9 | 10 | void myrhythm(); |
faif | 0:17458f91a0e9 | 11 | void waitForButton(DigitalOut& led, DigitalIn& button); |
faif | 0:17458f91a0e9 | 12 | void preloadFile(char* clip, int size, const char* path); |
faif | 0:17458f91a0e9 | 13 | void playSound(char* clip, int size, AnalogOut& headphones); |
faif | 0:17458f91a0e9 | 14 | |
faif | 0:17458f91a0e9 | 15 | enum |
faif | 0:17458f91a0e9 | 16 | { |
faif | 0:17458f91a0e9 | 17 | OFF = 0, |
faif | 0:17458f91a0e9 | 18 | ON = 1 |
faif | 0:17458f91a0e9 | 19 | }; |
faif | 0:17458f91a0e9 | 20 | |
faif | 0:17458f91a0e9 | 21 | enum { MaxWavValue = 255 }; |
faif | 0:17458f91a0e9 | 22 | |
faif | 0:17458f91a0e9 | 23 | static const float ticker_rhythm = 13E-5; // 8 kHz sample rate (1/8000 sec delay) |
faif | 1:91104d67b0af | 24 | static const char clip_path[] = "/local/blonde8k.wav"; |
faif | 0:17458f91a0e9 | 25 | |
faif | 0:17458f91a0e9 | 26 | |
faif | 0:17458f91a0e9 | 27 | bool done = false; |
faif | 0:17458f91a0e9 | 28 | |
faif | 0:17458f91a0e9 | 29 | |
faif | 0:17458f91a0e9 | 30 | void myrhythm() |
faif | 0:17458f91a0e9 | 31 | { |
faif | 0:17458f91a0e9 | 32 | done = true; |
faif | 0:17458f91a0e9 | 33 | } |
faif | 0:17458f91a0e9 | 34 | |
faif | 0:17458f91a0e9 | 35 | int main () |
faif | 0:17458f91a0e9 | 36 | { |
faif | 1:91104d67b0af | 37 | const int size = 27033; // 32K max in total (~30K is enough for testing) |
faif | 0:17458f91a0e9 | 38 | char clip[size]; |
faif | 0:17458f91a0e9 | 39 | |
faif | 0:17458f91a0e9 | 40 | waitForButton(led, button); |
faif | 0:17458f91a0e9 | 41 | preloadFile(clip, size, clip_path); |
faif | 0:17458f91a0e9 | 42 | |
faif | 0:17458f91a0e9 | 43 | rhythm.attach(&myrhythm, ticker_rhythm); |
faif | 0:17458f91a0e9 | 44 | |
faif | 0:17458f91a0e9 | 45 | while (true) |
faif | 0:17458f91a0e9 | 46 | { |
faif | 0:17458f91a0e9 | 47 | waitForButton(led, button); |
faif | 0:17458f91a0e9 | 48 | playSound(clip, size, headphones); |
faif | 0:17458f91a0e9 | 49 | } |
faif | 0:17458f91a0e9 | 50 | } |
faif | 0:17458f91a0e9 | 51 | |
faif | 0:17458f91a0e9 | 52 | void waitForButton(DigitalOut& led, DigitalIn& button) |
faif | 0:17458f91a0e9 | 53 | { |
faif | 0:17458f91a0e9 | 54 | led = ON; |
faif | 0:17458f91a0e9 | 55 | while (!button) {}; |
faif | 0:17458f91a0e9 | 56 | led = OFF; |
faif | 0:17458f91a0e9 | 57 | } |
faif | 0:17458f91a0e9 | 58 | |
faif | 0:17458f91a0e9 | 59 | void preloadFile(char* clip, int size, const char* path) |
faif | 0:17458f91a0e9 | 60 | { |
faif | 0:17458f91a0e9 | 61 | FILE* file = fopen(path, "r"); |
faif | 0:17458f91a0e9 | 62 | for (int i = 0; i != size; ++i) |
faif | 0:17458f91a0e9 | 63 | { |
faif | 0:17458f91a0e9 | 64 | clip[i] = fgetc(file); |
faif | 0:17458f91a0e9 | 65 | } |
faif | 0:17458f91a0e9 | 66 | fclose(file); |
faif | 0:17458f91a0e9 | 67 | } |
faif | 0:17458f91a0e9 | 68 | |
faif | 0:17458f91a0e9 | 69 | void playSound(char* clip, int size, AnalogOut& headphones) |
faif | 0:17458f91a0e9 | 70 | { |
faif | 0:17458f91a0e9 | 71 | for (int i= 0; i != size; ++i) |
faif | 0:17458f91a0e9 | 72 | { |
faif | 0:17458f91a0e9 | 73 | while (!done) {}; |
faif | 0:17458f91a0e9 | 74 | done = false; |
faif | 0:17458f91a0e9 | 75 | headphones = float(clip[i]) / MaxWavValue; |
faif | 0:17458f91a0e9 | 76 | } |
faif | 0:17458f91a0e9 | 77 | } |