Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * @file player-sd-i2s.ino
- * @brief example using the SD library
- *
- * @author Phil Schatzmann
- * @copyright GPLv3
- WAV FIOLES NEED BE 16B PCM
- */
- #include <ButtonEvent.h>
- #include "AudioTools.h"
- #include <SD.h>
- //#include "FS.h"
- #include "AudioLibs/AudioSourceSDFAT.h"
- #include "AudioCodecs/CodecWAV.h"
- #define i_bck 39//5
- #define i_ws 6
- #define i_data 40 //4
- #define i_rx 18
- #define buttonPin 0
- #define buttonPin2 16
- const char *dirSounds = "/sounds";
- const char *dirRec = "/rec";
- File filePlay;
- File fileRec;
- I2SStream i2s;
- AudioInfo info(16000, 1, 16);
- EncodedAudioStream decoder(&i2s,new WAVDecoder());
- EncodedAudioStream encoder(&fileRec, new WAVEncoder());
- StreamCopy copier(decoder,filePlay);
- long bootTime = millis();
- void setup() {
- Serial.begin(115200); while(!Serial){if(millis()-bootTime>2000){break;}}//wait for serial unless its going to take too long
- if(!SD.begin()){Serial.println("SD Init Failed!"); stop();}
- listSounds(dirSounds);
- filePlay = SD.open("/sounds/blip2.wav"); //bicycle_bell.wav , blurp_x2.wav, boing_x2.wav
- AudioLogger::instance().begin(Serial, AudioLogger::Info);
- pinMode(buttonPin, INPUT_PULLUP);
- pinMode(buttonPin2, INPUT_PULLUP);
- ButtonEvent.addButton(buttonPin, //button pin
- onB1D, //onDown event function
- onB1U, //onUp event function
- NULL, //onHold event function
- 750,NULL,NULL //hold time in milliseconds
- ); //double time interval
- ButtonEvent.addButton(buttonPin2, //button pin
- onB2D, //onDown event function
- onB2U, //onUp event function
- NULL, //onHold event function
- 750,NULL,NULL //hold time in milliseconds
- ); //double time interval
- // setup output
- auto cfg = i2s.defaultConfig(RXTX_MODE);
- cfg.copyFrom(info);
- cfg.pin_ws = i_ws;
- cfg.pin_bck = i_bck;
- cfg.pin_data = i_data;
- cfg.pin_data_rx = i_rx;
- i2s.begin(cfg);
- decoder.begin(cfg);
- encoder.begin(info);
- copier.begin();
- }
- void loop() {
- //player.copy();
- ButtonEvent.loop();
- copier.copy();
- }
- void recStart(){
- decoder.flush();
- char newFileName[14];
- sprintf(newFileName, "REC-%06d.wav", rand() % 1000000);
- // fileRec = SD.open(fullPath(dirRec,newFileName),FILE_WRITE);
- fileRec = SD.open("/rec/r1.wav",FILE_WRITE);
- if(fileRec){
- Serial.printf("Opened %s to record. \n",fileRec.name());
- decoder.end();
- copier.end();
- encoder.begin(info);
- copier.begin(encoder,i2s);
- }else{
- Serial.printf("Failed to create file %s \n",newFileName);
- }
- }
- void recStop(){
- Serial.println("recStop()");
- copier.end();
- encoder.end();
- if (fileRec) {
- fileRec.flush();
- Serial.print("File has ");
- Serial.print(fileRec.size());
- Serial.println(" bytes");
- fileRec.close();
- }
- decoder.begin();
- //copier.begin(decoder, filePlay);
- }
- void playSound(char *filename){
- Serial.printf("playSound(%s)/n",filename);
- filePlay = SD.open(filename);
- decoder.flush();
- copier.begin(decoder, filePlay);
- }
Advertisement
Add Comment
Please, Sign In to add comment