Воспроизведение аудио с SD - Get VU, или audio waveform

Я использую библиотеку SimpleSDAudio для воспроизведения песни с моей SD-карты на операционный усилитель позже в схеме. Я хотел бы взять образец с аудиовыхода (возможно, с аналоговым считыванием), Чтобы включить некоторые визуализации (VU и т. Д.), Хотя я получаю некоторые неожиданные показания с аудиовыхода.

Я попытался изменить звук, используя этот пост, но получил те же результаты.

Я не уверен, что двигаюсь здесь в неправильном направлении, любая помощь была бы потрясающей.

#include <SimpleSDAudio.h>
int ReadPin = A0;
int AudioValue = 0;

void setup() {
   Serial.begin(9600);
   while (!Serial) {
   }

  Serial.print(F("\nInitializing SD card..."));  

  if (!SdPlay.init(SSDA_MODE_FULLRATE | SSDA_MODE_MONO | SSDA_MODE_AUTOWORKER)) {
    Serial.println(SdPlay.getLastError());
    while(1);
    } else {
    Serial.println(F("Wiring is correct and a card is present.")); 
  }

  Serial.print(F("Looking for THRILLER.WAV... "));
  if(!SdPlay.setFile("THRILLER.WAV")) {
      Serial.println(F(" not found on card! Error code: "));
      Serial.println(SdPlay.getLastError());
      while(1);
  } else {
     Serial.println(F("found.")); 
  }    

  Serial.print(F("Playing... ")); 
  SdPlay.play();

}

  void loop() {
    AudioValue = analogRead(ReadPin);
    Serial.println(AudioValue);
    delay(50);

}

Output of analogRead

Мой ожидаемый результат выборки выходных данных из A0:

, 👍-1

Обсуждение

что это значит? некоторые неожиданные показания, @jsotola

Я ожидал бы увидеть что-то похожее на волновую форму. Как я бы увидел в "Дерзости". Когда звук воспроизводится, я вижу разные значения, основанные на уровне выходного сигнала. Извините, если это вас смущает., @Linuxx

это не сбивает с толку ... просто бессмысленно говорить, что что-то неожиданно, без объяснения причин, потому что никто другой не знает, чего вы ожидаете, @jsotola

@jsotola Я добавил "ожидаемое" изображение. Спасибо., @Linuxx


1 ответ


0

Вы отбираете аудиосигнал только с частотой 20 Гц. Это очень низкая частота для аудиосигнала, который люди могут слышать. Как правило, вам нужно пробовать сигнал с удвоенной максимальной частотой, содержащей минимум, или вы получите только ерунду (вы можете погуглить скорость Найквиста для получения дополнительной информации). Кроме того, у Nano нет реального ЦАП, поэтому звук генерируется с помощью ШИМ-сигнала, который очень быстро включает и выключает линию, поэтому вы видите только форму сигнала, если применяете фильтр нижних частот (как это сделает динамик, потому что он не может двигаться так быстро).

Но прямая выборка аудиосигнала слишком сложна, только для визуализации измерителя VU. Эти визуализации намного медленнее, чем фактический аудиосигнал. Поэтому вам нужно взять среднее значение за определенный интервал времени. Лучше всего вы можете достичь этого, построив фильтр нижних частот с использованием резистора и конденсатора. Вы можете выбрать выходной сигнал этого фильтра, который будет иметь только более низкие частоты. Тогда частота дискретизации должна быть как минимум вдвое больше частоты среза фильтра.

Конечно, все это также можно сделать в программном обеспечении, но для этого вам придется изменить библиотеку, и я думаю, вы не хотите этого делать.

,

Задержка была результатом того, что я устранил код. Когда я оставляю задержку, я получаю аналогичные результаты. У меня есть код, чтобы взять образец и создать VU, который я не включил, так как не думал, что получу что-то, что смогу использовать из необработанного аудиовыхода., @Linuxx

Тем не менее необработанный аудиовыход будет иметь только ШИМ-сигнал. Вы должны попробовать фильтр нижних частот и попробовать этот отфильтрованный сигнал., @chrisl

Если вы не думали, что получите что-то полезное от аудиовыхода, зачем вы его пробовали?, @chrisl

Извините, я отвечал с мобильного и старался быть кратким. Я отредактировал свой вопрос, чтобы включить график, более похожий на тот, который я ожидал. Если бы я получил сигнал от аудиовыхода, как показано выше, я бы запустил код через свою функцию "VU". Этот "ожидаемый" график был получен с помощью конденсаторного микрофона, соединенного с тем же кодом, с частотой дискретизации 20 Гц. Эта конденсаторная схема имеет операционный усилитель, который управляет выходом. Возможно, выходного аудиосигнала ШИМ недостаточно, чтобы управлять АЦП и создавать форму сигнала, которую я ожидал увидеть? Спасибо @chrisl за вашу помощь!, @Linuxx

Вы не показывали функцию VU, поэтому я не могу знать, поможет ли эта функция. Таким образом, вы получаете более ожидаемый результат, если берете звук с микрофоном и сэмплируете его? Как я уже пытался объяснить, уже существует (механический) фильтр нижних частот, поскольку мембрана динамиков не может двигаться достаточно быстро, чтобы следовать ШИМ-сигналу. Вместо этого он возьмет среднее. В этом весь смысл создания звука через ШИМ. Если вы не хотите использовать мекрофон для сэмплирования реального звука, но хотите использовать прямой электрический сигнал, вам нужен электрический фильтр нижних частот, чтобы отфильтровать частоту ШИМ, @chrisl

И конечно, ваши образцы mecrop ближе к реальному миру, но и не являются хорошим представлением реальной звуковой волны, @chrisl