ESP32 запись звука на флэш через SPIFFS - PullRequest
0 голосов
/ 31 марта 2019

У меня есть код, который записывает звук на SD-карту идеально и сразу. Поскольку я не мог получить доступ к SD-карте с FTP-сервера, я хочу изменить SD на SPIFFS. В коде я применил несколько модификаций. Однако, когда я запускаю его, он печатает «финиш» с некоторой задержкой (для записи 2 с добавить + 10 с), и когда я проверяю звук, я замечаю, что он пуст. Он создает файл WAV, это около 10-20 КБ, но 0 с. Обычно моя запись в SD потребляет 150-200kb. Я не знаю, что мне не хватает. Я вставил код. Если вы меняете SPIFFS на SD, он работает отлично (это был оригинальный код). Я не знаю, почему он по-прежнему создает файл WAV без звука, когда я только изменить SD на SPIFFS. Если у вас есть источник для доступа к SD-карте через FTP, это тоже нормально. Я могу вставить код FTPServer (можно найти в Интернете).

#include <FS.h>
#include <SD.h>
#include "Wav.h"
#include "I2S.h"
#include "SPIFFS.h"

const int record_time = 2;  // second
const char filename[] = "/sound.wav";

const int headerSize = 44;
const int waveDataSize = record_time * 88000;
const int numCommunicationData = 8000;
const int numPartWavData = numCommunicationData/4;
byte header[headerSize];
char communicationData[numCommunicationData];
char partWavData[numPartWavData];
File file;

void setup() {
  Serial.begin(115200);
  if (!SPIFFS.begin()) Serial.println("SPIFFS begin failed");

  CreateWavHeader(header, waveDataSize);
  SPIFFS.remove(filename);
  file = SPIFFS.open(filename, FILE_WRITE);

 if (!SPIFFS.begin(true)) {
    Serial.println("An Error has occurred while mounting SPIFFS");
    return;
  }

  file.write(header, headerSize);
  I2S_Init(I2S_MODE_RX, I2S_BITS_PER_SAMPLE_32BIT);
  for (int j = 0; j < waveDataSize/numPartWavData; ++j) {
    I2S_Read(communicationData, numCommunicationData);
    for (int i = 0; i < numCommunicationData/8; ++i) {
      partWavData[2*i] = communicationData[8*i + 2];
      partWavData[2*i + 1] = communicationData[8*i + 3];
    }
    file.write((const byte*)partWavData, numPartWavData);
  }
  file.close();
  Serial.println("finish");
}

void loop() {
}
...