Новый код приводит к звуковому шуму

Я работаю над схемой, которая может записывать звук на SD, когда переключатель находится в положении HIGH, и останавливать запись, когда переключатель находится в положении LOW. Я использую библиотеку TMRpcm. Ранее у меня была решена проблема на этих двух форумах: Запись аудио – ошибка названия фильма и Попытка сохранить файлы .wav с новым именем в каждом цикле. Эти решения решили мою проблему, но оставили мне новую. В настоящее время звук, записанный с помощью нового кода (который я вставил ниже), имеет очень шумное и приглушенное качество звука; в то время как звук, записанный на старом коде (также размещенном ниже), очень четкий. Может ли это быть физической проблемой, и если да, что мне с этим делать? Или это проблема, которую мне не хватает в коде?

СТАРЫЙ КОД – обеспечивает хорошее качество звука

///////////////////////////////////////// SD КАРТА
#include <SD.h>
#include <SPI.h>
#include <TMRpcm.h>
#define SD_ChipSelectPin 10
TMRpcm audio;
///////////////////////////////////////// СЛУЧАЙ ПЕРЕКЛЮЧАТЕЛЯ
int audiofile = 0;     // номер записи
unsigned long i = 0;
bool recmode = 0;      // состояние записи
//////////////////////////////////////// ВЫКЛЮЧАТЕЛЬ
int inPin = 2;         // входной контакт переключателя
int state = HIGH;      // переключатель текущего состояния
int reading;           // текущее чтение с коммутатора

void setup() {
  Serial.begin(9600);
  pinMode(A0, INPUT);  // Микрофон
  pinMode(inPin, INPUT_PULLUP); // Выключатель
  //////////////////////////////////////// SD CARD
  SD.begin(SD_ChipSelectPin);
  audio.CSPin = SD_ChipSelectPin;
}

void loop() {

  reading = digitalRead(inPin);
  /////////////////////////////////////////////////////////////////////////////////
  while (i < 300000) {
    i++;
  }
  i = 0;
  /////////////////////////////////////////////////////////////////////////////////
  if (reading == LOW) {
    if (recmode == 0) {
      recmode = 1;

      Serial.println("Recording");

      audiofile++; // Чтобы переместить регистр
      switch (audiofile) {
        case 1: audio.startRecording("1.wav", 16000, A0); break;
        case 2: audio.startRecording("2.wav", 16000, A0); break;
        case 3: audio.startRecording("3.wav", 16000, A0); break;
        case 4: audio.startRecording("4.wav", 16000, A0); break;
        case 5: audio.startRecording("5.wav", 16000, A0); break;
        case 6: audio.startRecording("6.wav", 16000, A0); break;
        case 7: audio.startRecording("7.wav", 16000, A0); break;
        case 8: audio.startRecording("8.wav", 16000, A0); break;
        case 9: audio.startRecording("9.wav", 16000, A0); break;
        case 10: audio.startRecording("10.wav", 16000, A0); break;
      }
    }
  }
  /////////////////////////////////////////////////////////////////////////////////
  else if (reading == HIGH) {
    recmode = 0;

    Serial.println("Hung-Up");
    switch (audiofile) {
      case 1: audio.stopRecording("1.wav"); break;
      case 2: audio.stopRecording("2.wav"); break;
      case 3: audio.stopRecording("3.wav"); break;
      case 4: audio.stopRecording("4.wav"); break;
      case 5: audio.stopRecording("5.wav"); break;
      case 6: audio.stopRecording("6.wav"); break;
      case 7: audio.stopRecording("7.wav"); break;
      case 8: audio.stopRecording("8.wav"); break;
      case 9: audio.stopRecording("9.wav"); break;
      case 10: audio.stopRecording("10.wav"); break;
    }
  }
}

НОВЫЙ КОД – низкое качество звука

///////////////////////////////////////// SD КАРТА
#include <SD.h>
#include <SPI.h>
#include <TMRpcm.h>
#define SD_ChipSelectPin 10
TMRpcm audio;
///////////////////////////////////////// СЛУЧАЙ ПЕРЕКЛЮЧАТЕЛЯ
unsigned int i = 0;     // номер записи
unsigned long d = 0;
bool recmode = 0;      // состояние записи
//////////////////////////////////////// ВЫКЛЮЧАТЕЛЬ
int inPin = 2;         // входной контакт переключателя
int state = HIGH;      // переключатель текущего состояния
int reading;           // текущее чтение с коммутатора

void setup() {
  //Serial.begin(9600);
  pinMode(A0, INPUT);  // Микрофон
  pinMode(inPin, INPUT_PULLUP); // Выключатель
  //////////////////////////////////////// SD CARD
  SD.begin(SD_ChipSelectPin);
  audio.CSPin = SD_ChipSelectPin;
}

void loop() {
  char buffer[50];
  sprintf(buffer, "%i.wav", i++);
  reading = digitalRead(inPin);
  /////////////////////////////////////////////////////////////////////////////////
  while (d < 300000) {
    d++;
  }
  d = 0;
  /////////////////////////////////////////////////////////////////////////////////
  if (reading == LOW) {
    if (recmode == 0) {
      recmode = 1;

      //Serial.println("Запись");

      audio.startRecording(buffer, 1600, A0);
      //Serial.println(буфер);
    }
  }
  /////////////////////////////////////////////////////////////////////////////////
  else if (reading == HIGH) {
    recmode = 0;

    //Serial.println("Зависание");

    audio.stopRecording(buffer);
  }
}

, 👍1


1 ответ


Лучший ответ:

2

Старый код:

audio.startRecording("1.wav", 16000, A0);

Новый код:

audio.startRecording(buffer, 1600, A0);

Заметили опечатку?

,

Спасибо, понятия не имею, как я это пропустил (16000), @TSauer52

Легко сделать. Просто нужен свежий взгляд., @Majenko