语音加混响
参考:https://blog.csdn.net/qq_42233059/article/details/126444994。
·
import numpy as np
import matplotlib.pyplot as plt
from scipy.io import wavfile
from scipy.signal import fftconvolve
import IPython
import pyroomacoustics as pra
import soundfile as sf
#/****************************/
# 创建一个尺寸为(7,5)的矩阵房间
corner = np.array([[0, 0], [7, 0], [7, 5], [0, 5]]).T
#corner = np.array([[0, 0], [3.15, 0], [3.15, 3.15], [0, 3.15]]).T
room = pra.Room.from_corners(corner)
'''
corner: 房间的四个角。`pra.Room.from_corners()`的函数文档中表示四个角的声明顺序必须逆时针。
'''
plt.figure(1)
fig, ax = room.plot()
ax.set_xlim([-1, 10])
ax.set_ylim([-1, 10])
plt.show()
#/***********************************/
plt.figure(2)
corner = np.array([[0, 0], [7, 0], [7, 5], [0, 5]]).T # 房间的长宽为7米,5米
#corner = np.array([[0, 0], [3.15, 0], [3.15, 3.15], [0, 3.15]]).T
room = pra.Room.from_corners(corner)
#room.extrude(3.) # 高为3米的房间
room.extrude(4.) # 高为4米的房间
fig, ax = room.plot()
ax.set_xlim([-1, 10])
ax.set_ylim([-1, 10])
ax.set_zlim([-1, 4])
plt.show()
#/********************************/
audio, sr = sf.read('HPYJY01.wav')
corners = np.array([[0, 0], [7, 0], [7, 5], [0, 5]]).T
#corners = np.array([[0, 0], [3.15, 0], [3.15, 3.15], [0, 3.15]]).T
room1 = pra.Room.from_corners(corners, fs=sr,
max_order=3,
materials=pra.Material(0.2, 0.15),# 0.2,0.15 / 0.45,0.33
ray_tracing=True, air_absorption=True)
room1.add_source([1, 1], signal=audio) # 人的位置
'add microphone'
#添加麦克风M表示麦克风数量
R = pra.circular_2D_array(center=[2.,2.], M=1, phi0=0, radius=0.3)
#R = pra.circular_2D_array(center=[2.,2.], M=1, phi0=0, radius=0.0)
# 人和麦克风距离是[(2-1)^2+(2-1)^2]开根号 = 根号下(2) = 1.414m
room1.add_microphone_array(pra.MicrophoneArray(R, room1.fs))
fig, ax = room1.plot()
ax.set_xlim([-1, 10])
ax.set_ylim([-1, 10])
#/********************************/
room1.image_source_model()
fig, ax = room.plot(img_order=3)
# fig.set_size_inches(18.5, 10.5)
#/***********************************/
room1.plot_rir()
fig = plt.gcf()
fig.set_size_inches(20, 10)
# t60 = pra.experimental.measure_rt60(room1.rir[0][0], fs=room1.fs, plot=True)
# print(f"The RT60 is {t60 * 1000:.0f} ms")
plt.show()
room1.simulate()
sf.write('HPYJY_wav.wav', room1.mic_array.signals.T, samplerate=sr)
参考:https://blog.csdn.net/qq_42233059/article/details/126444994
更多推荐
所有评论(0)