Как получить звук из каждого микрофона на массивном микрофоне

Я должен построить устройство, которое может локализовать источник громкого шума. Я уже знаю математику, но у меня проблемы с написанием кода. Я получил 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()

Я хотел бы понять, как информация о микрофоне хранится в данных. В моей следующей работе я постараюсь получить уровень звука в дБ (А), если кто-то знает, как это сделать, это было бы также здорово, хотя это не моя главная проблема, хорошо знаю.

0 ответов

Другие вопросы по тегам