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





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





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



#include &ltSDHCI.h>
#include &ltAudio.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;
}



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