SSブログ

SPRESENSE にピンマイクをつけて録音してみた! [SPRESENSE]

SPRESENSEにピンマイクをつけて、録音をしてみました。演奏はへたくそですが、ウクレレを使ってみました。


sDSC_0787.jpg


分かりやすく接続をイラストにまとめてみました。ボタンを押して録音開始、また再度ボタンを押して録音停止できるようにしました。


Spresense_mp3_recorder.png


スケッチはこちらです。それぞれの録音データは、RECXXX.mp3 と3桁の追番で別ファイルとして記録するように書いています。


#include <SDHCI.h>
#include <Audio.h>

SDClass theSD;
AudioClass *theAudio = AudioClass::getInstance();

bool bRecording = false;
bool bStart = false;
int gCounter = 0;
File myFile;

void changeState() {    // interrupt handler
  bStart = ~bStart;
}

void recorder_end() {
  if (bRecording) {
    bRecording = false;
    theAudio->stopRecorder();
    theAudio->closeOutputFile(myFile);
    myFile.close();
    theAudio->setReadyMode();
    theAudio->end();
  }
  digitalWrite(LED0, LOW);
  Serial.println("End recording");
}

void recorder_begin() {
  int err;
  theAudio->begin();
  theAudio->setRecorderMode(AS_SETRECDR_STS_INPUTDEVICE_MIC, 200);  // the gain up to 30db
  err = theAudio->initRecorder(AS_CODECTYPE_MP3 ,"/mnt/sd0/BIN" 
                              ,AS_SAMPLINGRATE_48000 ,AS_CHANNEL_MONO);
  if (err != AUDIOLIB_ECODE_OK) {
    Serial.println("Recorder initialize error");
    while(1);
  }
  Serial.println("Recording initialized");
  char filename[16] = {0};
  sprintf(filename, "REC%03d.MP3", gCounter);
  myFile = theSD.open(filename ,FILE_WRITE);
  if (!myFile) {
    Serial.println("File open error\n");
    while(1);
  }
  theAudio->startRecorder();
  bRecording = true;
  ++gCounter;
  digitalWrite(LED0, HIGH);
  Serial.println("Start recording");
}

int intPin = 0;
void setup() {
  Serial.begin(115200);
  pinMode(intPin, INPUT_PULLUP);
  theSD.begin();
  attachInterrupt(digitalPinToInterrupt(intPin) ,changeState ,FALLING);
}

void loop() {
  int err;
  if (!bStart && !bRecording) {
    return;
  } else if (bStart && !bRecording) {
    recorder_begin(); return;
  }else if (!bStart && bRecording) {
    recorder_end(); return;
  }
  
  err = theAudio->readFrames(myFile);
  if (err != AUDIOLIB_ECODE_OK) {
      Serial.println("File End! = " + String(err));
      recorder_end();
  }

  usleep(40000);
  return;
}



実際に録音してみた音がこちらです。へたくそなウクレレで恐縮です。^^;










nice!(30)  コメント(4) 
共通テーマ:趣味・カルチャー