我应该制造一种可以定位大声噪声源的设备。我已经知道其背后的数学原理,但是在编写代码时遇到了问题。我得到了一个16通道的阵列麦克风(UMA-16 miniDSP),我想从麦克风中抽出每100微秒读取阵列中每个麦克风的音量,因此我可以使用麦克风之间的时间差来获得角度。 那么,如何使麦克风发出声音呢? 我现在拥有的代码可以告诉我有关音量的一些常规信息,但并不能保证每个麦克风的安全性。 非常感谢。
我发现我的解决方案不起作用,因为当我只给一个麦克风倾斜时,我存储的所有soudleves都跟我所指向的麦克风一样高。
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()
我很想了解麦克风的信息如何存储在数据中。 在接下来的工作中,我将尝试以dB(A)来获得声级,如果有人知道如何做到这一点,那也很好,尽管这不是我的主要问题。