Как получить звук из каждого микрофона на массивном микрофоне
Я должен построить устройство, которое может локализовать источник громкого шума. Я уже знаю математику, но у меня проблемы с написанием кода. Я получил 16-канальный матричный микрофон (UMA-16 miniDSP), из которого я хочу прочитать громкость звука для каждого микрофона в массиве каждые 100 микросекунд, чтобы я мог использовать разницу во времени между микрофонами, чтобы получить угол. Итак, как мне получить громкость звука из микрофонов? Код, который я сейчас имею, сообщает мне некоторую общую информацию о громкости, но не указывает ее для каждого микрофона. Спасибо большое.
Я понял, что мое решение не работает, потому что, когда я наклоняю только один микрофон, все хранящиеся в нем подушки были такими же высокими, как и микрофон, на котором я держал чаевые.
import csv
import pyaudio
import time
import numpy as np
# method for reading the mics and writing the csv-file
def reading_mics_write_csv():
CHUNK = 64
RATE = 44100
amount_mics = 16
p = pyaudio.PyAudio()
stream = p.open(format=pyaudio.paInt16, channels=amount_mics, rate=RATE, input=True, frames_per_buffer=amount_mics * CHUNK)
print("recording started")
data_list = []
for i in range(int(5 * (RATE / CHUNK))): #go for 5 seconds
data = np.frombuffer(stream.read(CHUNK, exception_on_overflow=False), dtype=np.int16)
peak = 16 * [0]
peak_time = time.perf_counter()
for j in range(amount_mics): #I thought this would do the job, but it doesn't
start_data = CHUNK * j
end_data = (CHUNK * (j + 1)) - 1
peak[j] = np.average(np.abs(data[start_data:end_data])) #eg data[0:63]
data_list.append([i, peak_time, peak[0], peak[1], peak[2], peak[3],
peak[4], peak[5], peak[6], peak[7], peak[8],
peak[9], peak[10], peak[11], peak[12], peak[13],
peak[14], peak[15]])
print("recording finished")
with open('datafile.csv', mode='a') as csv_file:
csv_writer = csv.writer(csv_file, delimiter=';')
for i in range(len(data_list)):
csv_writer.writerow(data_list[i])
#main
reading_mics_write_csv()
Я хотел бы понять, как информация о микрофоне хранится в данных. В моей следующей работе я постараюсь получить уровень звука в дБ (А), если кто-то знает, как это сделать, это было бы также здорово, хотя это не моя главная проблема, хорошо знаю.