Я пытаюсь создать систему, часть которой требует подключения микрофона к Arduino. Я не много работал с микрофонами.
Я подключил микрофон ( Электретный усилитель микрофона Adafruit - MAX9814 с автоматическим регулированием усиления ) к arduino nano. Я хочу записать аудиоданные с этого.
void setup() {
Serial.begin(9600);
pinMode(A2, INPUT);
}
void loop() {
if(Serial.available())
{
Serial.println(analogRead(A2));
}
}
Я отправляю данные на компьютер и записываю их, используя скрипт python, и преобразую их в файл WAV, чтобы убедиться, что микрофон работает правильно , Я пробовал несколько вещей, используя значение AD C, масштабируя значение AD C между -1 и 1, преобразовывая в напряжение и затем масштабируя его, но, похоже, ничего не работает. При воспроизведении все, что я слышу, это stati c с несколькими щелчками мыши, где должен быть голос.
Ниже приведен код python, который я написал для конфигурации, куда я отправляю значение AD C с использованием println. Здесь я собираю данные, используя библиотеку pyserial, и конвертирую их в число с плавающей точкой. Затем я нормализую его в диапазоне от -1 до 1. Затем я сохраняю его в файле wav.
import serial
import matplotlib.pyplot as plt
import sounddevice as sd
import numpy as np
from scipy.io.wavfile import write
import pyaudio
import wave
def audnorm(aud):
normaud= -1+2*((aud-np.amin(aud))/(np.amax(aud)-np.amin(aud)))
return normaud
ser = serial.Serial('/dev/ttyACM0',115200)
ser.flushInput()
sound=[]
sound2=[]
while True:
try:
ser_bytes = ser.readline()
ser_bytes2= float(ser_bytes)
sound.append(ser_bytes2)
sound2.append(ser_bytes)
print(ser_bytes+"\t"+str(ser_bytes2))
print(type(ser_bytes))
except:
print("Keyboard Interrupt")
break
print(str(len(sound)))
soundnp= np.asarray(sound)
soundnp= soundnp - np.mean(soundnp)
soundnorm= audnorm(soundnp)
soundnormstr= [str(x) for x in soundnorm]
plt.plot(soundnp)
plt.show()
plt.plot(soundnorm)
plt.show()
wf = wave.open("output.wav", 'wb')
wf.setnchannels(1)
wf.setsampwidth(2)
wf.setframerate(10000)
wf.writeframes(b''.join(soundnormstr))
wf.close()
Я приложил 2 изображения данных, которые я записал с использованием этого кода.
Что такое Я делаю не так?
Необработанные данные Нормализованные данные