Воспроизведение аудио с 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);
}
Мой ожидаемый результат выборки выходных данных из A0:
@Linuxx, 👍-1
Обсуждение1 ответ
Вы отбираете аудиосигнал только с частотой 20 Гц. Это очень низкая частота для аудиосигнала, который люди могут слышать. Как правило, вам нужно пробовать сигнал с удвоенной максимальной частотой, содержащей минимум, или вы получите только ерунду (вы можете погуглить скорость Найквиста для получения дополнительной информации). Кроме того, у Nano нет реального ЦАП, поэтому звук генерируется с помощью ШИМ-сигнала, который очень быстро включает и выключает линию, поэтому вы видите только форму сигнала, если применяете фильтр нижних частот (как это сделает динамик, потому что он не может двигаться так быстро).
Но прямая выборка аудиосигнала слишком сложна, только для визуализации измерителя VU. Эти визуализации намного медленнее, чем фактический аудиосигнал. Поэтому вам нужно взять среднее значение за определенный интервал времени. Лучше всего вы можете достичь этого, построив фильтр нижних частот с использованием резистора и конденсатора. Вы можете выбрать выходной сигнал этого фильтра, который будет иметь только более низкие частоты. Тогда частота дискретизации должна быть как минимум вдвое больше частоты среза фильтра.
Конечно, все это также можно сделать в программном обеспечении, но для этого вам придется изменить библиотеку, и я думаю, вы не хотите этого делать.
Задержка была результатом того, что я устранил код. Когда я оставляю задержку, я получаю аналогичные результаты. У меня есть код, чтобы взять образец и создать VU, который я не включил, так как не думал, что получу что-то, что смогу использовать из необработанного аудиовыхода., @Linuxx
Тем не менее необработанный аудиовыход будет иметь только ШИМ-сигнал. Вы должны попробовать фильтр нижних частот и попробовать этот отфильтрованный сигнал., @chrisl
Если вы не думали, что получите что-то полезное от аудиовыхода, зачем вы его пробовали?, @chrisl
Извините, я отвечал с мобильного и старался быть кратким. Я отредактировал свой вопрос, чтобы включить график, более похожий на тот, который я ожидал. Если бы я получил сигнал от аудиовыхода, как показано выше, я бы запустил код через свою функцию "VU". Этот "ожидаемый" график был получен с помощью конденсаторного микрофона, соединенного с тем же кодом, с частотой дискретизации 20 Гц. Эта конденсаторная схема имеет операционный усилитель, который управляет выходом. Возможно, выходного аудиосигнала ШИМ недостаточно, чтобы управлять АЦП и создавать форму сигнала, которую я ожидал увидеть? Спасибо @chrisl за вашу помощь!, @Linuxx
Вы не показывали функцию VU, поэтому я не могу знать, поможет ли эта функция. Таким образом, вы получаете более ожидаемый результат, если берете звук с микрофоном и сэмплируете его? Как я уже пытался объяснить, уже существует (механический) фильтр нижних частот, поскольку мембрана динамиков не может двигаться достаточно быстро, чтобы следовать ШИМ-сигналу. Вместо этого он возьмет среднее. В этом весь смысл создания звука через ШИМ. Если вы не хотите использовать мекрофон для сэмплирования реального звука, но хотите использовать прямой электрический сигнал, вам нужен электрический фильтр нижних частот, чтобы отфильтровать частоту ШИМ, @chrisl
И конечно, ваши образцы mecrop ближе к реальному миру, но и не являются хорошим представлением реальной звуковой волны, @chrisl
- Сопряжение наушников TRRS с Arduino Uno
- `.readFileCounts()` не работает в мини-модуле DFPlayer
- Почему все аналоговые выводы измеряют одно и то же значение?
- Как восстановить звук из серии аналоговых целочисленных входов?
- MP3-TF-16P работает только при подключении к последовательному монитору
- DFPlayer, воспроизведение звука при высоком значении pin
- Nano: все цифровые контакты ничего не выводят
- Стирание 1 байта внешней Flash памяти (winbond)
что это значит?
некоторые неожиданные показания
, @jsotolaЯ ожидал бы увидеть что-то похожее на волновую форму. Как я бы увидел в "Дерзости". Когда звук воспроизводится, я вижу разные значения, основанные на уровне выходного сигнала. Извините, если это вас смущает., @Linuxx
это не сбивает с толку ... просто бессмысленно говорить, что что-то неожиданно, без объяснения причин, потому что никто другой не знает, чего вы ожидаете, @jsotola
@jsotola Я добавил "ожидаемое" изображение. Спасибо., @Linuxx