Loading scripts/binauralRenderer_interface/SofaReader.py 0 → 100644 +106 −0 Original line number Diff line number Diff line import numpy as np import pyaudio3dtools from scipy import signal from netCDF4 import Dataset from typing import Tuple def load(filename)-> Tuple[str, str, np.ndarray, np.ndarray, np.ndarray,np.ndarray, np.ndarray, np.ndarray, np.ndarray, np.ndarray]: hrtf = Dataset(filename, "r", format="NETCDF4") Database_Name = hrtf.DatabaseName Listener_Short_Name = hrtf.ListenerShortName latencys = None if "latencys" in hrtf.variables.keys(): latencys = np.array(hrtf.variables["latencys"]) Sampling_Rate = np.array(hrtf.variables["Data.SamplingRate"]) ind_dir = 0 Source_Position =np.array(hrtf.variables["SourcePosition"]) Source_Position_Cartesian = np.copy(Source_Position) for ind_dir_ptr in Source_Position: Source_Position_Cartesian[ind_dir][0] = ( ind_dir_ptr[2] * np.cos(ind_dir_ptr[0] * np.pi / 180) * np.cos(ind_dir_ptr[1] * np.pi / 180) ) Source_Position_Cartesian[ind_dir][1] = ( ind_dir_ptr[2] * np.sin(ind_dir_ptr[0] * np.pi / 180) * np.cos(ind_dir_ptr[1] * np.pi / 180) ) Source_Position_Cartesian[ind_dir][2] = ind_dir_ptr[2] * np.sin( ind_dir_ptr[1] * np.pi / 180 ) ind_dir = ind_dir + 1 Data_Delay = np.array(hrtf.variables["Data.Delay"]) Data_IR_48khz = np.array(hrtf.variables["Data.IR"]) Data_IR_32khz = np.zeros( ( Data_IR_48khz.shape[0], Data_IR_48khz.shape[1], int(np.ceil(Data_IR_48khz.shape[2] * 32 / 48)), ) ) Data_IR_16khz = np.zeros( ( Data_IR_48khz.shape[0], Data_IR_48khz.shape[1], int(np.ceil(Data_IR_48khz.shape[2] * 16/ 48)), ) ) ind_dir = 0 for ind_dir_ptr in Data_IR_48khz: ind_ear = 0 for ind_ear_ptr in ind_dir_ptr: tmp = np.copy(ind_ear_ptr) Data_IR_32khz[ind_dir][ind_ear][:] = pyaudio3dtools.audioarray.resample( tmp, 48000, 32000 ) tmp = np.copy(ind_ear_ptr) Data_IR_16khz[ind_dir][ind_ear][:] = pyaudio3dtools.audioarray.resample( tmp,48000, 16000 ) ind_ear = ind_ear + 1 ind_dir = ind_dir + 1 return Database_Name, Listener_Short_Name, Sampling_Rate, latencys, Data_Delay, Data_IR_48khz, Data_IR_32khz, Data_IR_16khz, Source_Position, Source_Position_Cartesian def find_pos_cart( Source_Position_Cartesian, dir_cart): valmax = 0 indmax = -1 ind_dir = 0 for ind_dir_ptr in Source_Position_Cartesian: tmp = np.dot(ind_dir_ptr, dir_cart) if tmp > valmax: valmax = tmp indmax = ind_dir ind_dir = ind_dir + 1 return indmax def find_pos_spheric( Source_Position_Cartesian, dir_spheric): valmax = 0 indmax = -1 ind_dir = 0 dir_cart = np.copy(dir_spheric) dir_cart[0] = ( dir_spheric[2] * np.cos(dir_spheric[0] * np.pi / 180) * np.cos(dir_spheric[1] * np.pi / 180) ) dir_cart[1] = ( dir_spheric[2] * np.sin(dir_spheric[0] * np.pi / 180) * np.cos(dir_spheric[1] * np.pi / 180) ) dir_cart[2] = dir_spheric[2] * np.sin(dir_spheric[1] * np.pi / 180) for ind_dir_ptr in Source_Position_Cartesian: tmp = np.dot(ind_dir_ptr, dir_cart) if tmp > valmax: valmax = tmp indmax = ind_dir ind_dir = ind_dir + 1 return indmax scripts/binauralRenderer_interface/run.py 0 → 100644 +26 −0 Original line number Diff line number Diff line import SofaReader as sr import numpy as np import matplotlib.pyplot as plt filename = "./HRIRs_sofa/HRIR_128_Meth5_IRC_53_Q10_symL_Itrp1_48000.sofa" # filename = "./HRIRs_sofa/HRIR_128_48000_dolby_SBA3.sofa" [baseName, listName, sampleRate, latency,Data_Delay, Data_IR_48khz,Data_IR_32khz,Data_IR_16khz, srcPos, srcPosCart ] = sr.load(filename) ind = sr.find_pos_spheric(srcPosCart, [30., 0., 2.]) y_16k = Data_IR_16khz[ind][0] y_32k = Data_IR_32khz[ind][0] y_48k = Data_IR_48khz[ind][0] t_16k = np.linspace(0, y_48k.shape[0] / 48000, y_16k.shape[0], endpoint=False) t_32k = np.linspace(0, y_48k.shape[0] / 48000, y_32k.shape[0], endpoint=False) t_48k = np.linspace(0, y_48k.shape[0] / 48000, y_48k.shape[0], endpoint=False) plt.plot(t_48k, y_48k, label="Signal échantillonné") plt.plot(t_32k, y_32k, label="Signal échantillonné") plt.plot(t_16k, y_16k, label="Signal échantillonné") plt.grid() plt.show() exit No newline at end of file Loading
scripts/binauralRenderer_interface/SofaReader.py 0 → 100644 +106 −0 Original line number Diff line number Diff line import numpy as np import pyaudio3dtools from scipy import signal from netCDF4 import Dataset from typing import Tuple def load(filename)-> Tuple[str, str, np.ndarray, np.ndarray, np.ndarray,np.ndarray, np.ndarray, np.ndarray, np.ndarray, np.ndarray]: hrtf = Dataset(filename, "r", format="NETCDF4") Database_Name = hrtf.DatabaseName Listener_Short_Name = hrtf.ListenerShortName latencys = None if "latencys" in hrtf.variables.keys(): latencys = np.array(hrtf.variables["latencys"]) Sampling_Rate = np.array(hrtf.variables["Data.SamplingRate"]) ind_dir = 0 Source_Position =np.array(hrtf.variables["SourcePosition"]) Source_Position_Cartesian = np.copy(Source_Position) for ind_dir_ptr in Source_Position: Source_Position_Cartesian[ind_dir][0] = ( ind_dir_ptr[2] * np.cos(ind_dir_ptr[0] * np.pi / 180) * np.cos(ind_dir_ptr[1] * np.pi / 180) ) Source_Position_Cartesian[ind_dir][1] = ( ind_dir_ptr[2] * np.sin(ind_dir_ptr[0] * np.pi / 180) * np.cos(ind_dir_ptr[1] * np.pi / 180) ) Source_Position_Cartesian[ind_dir][2] = ind_dir_ptr[2] * np.sin( ind_dir_ptr[1] * np.pi / 180 ) ind_dir = ind_dir + 1 Data_Delay = np.array(hrtf.variables["Data.Delay"]) Data_IR_48khz = np.array(hrtf.variables["Data.IR"]) Data_IR_32khz = np.zeros( ( Data_IR_48khz.shape[0], Data_IR_48khz.shape[1], int(np.ceil(Data_IR_48khz.shape[2] * 32 / 48)), ) ) Data_IR_16khz = np.zeros( ( Data_IR_48khz.shape[0], Data_IR_48khz.shape[1], int(np.ceil(Data_IR_48khz.shape[2] * 16/ 48)), ) ) ind_dir = 0 for ind_dir_ptr in Data_IR_48khz: ind_ear = 0 for ind_ear_ptr in ind_dir_ptr: tmp = np.copy(ind_ear_ptr) Data_IR_32khz[ind_dir][ind_ear][:] = pyaudio3dtools.audioarray.resample( tmp, 48000, 32000 ) tmp = np.copy(ind_ear_ptr) Data_IR_16khz[ind_dir][ind_ear][:] = pyaudio3dtools.audioarray.resample( tmp,48000, 16000 ) ind_ear = ind_ear + 1 ind_dir = ind_dir + 1 return Database_Name, Listener_Short_Name, Sampling_Rate, latencys, Data_Delay, Data_IR_48khz, Data_IR_32khz, Data_IR_16khz, Source_Position, Source_Position_Cartesian def find_pos_cart( Source_Position_Cartesian, dir_cart): valmax = 0 indmax = -1 ind_dir = 0 for ind_dir_ptr in Source_Position_Cartesian: tmp = np.dot(ind_dir_ptr, dir_cart) if tmp > valmax: valmax = tmp indmax = ind_dir ind_dir = ind_dir + 1 return indmax def find_pos_spheric( Source_Position_Cartesian, dir_spheric): valmax = 0 indmax = -1 ind_dir = 0 dir_cart = np.copy(dir_spheric) dir_cart[0] = ( dir_spheric[2] * np.cos(dir_spheric[0] * np.pi / 180) * np.cos(dir_spheric[1] * np.pi / 180) ) dir_cart[1] = ( dir_spheric[2] * np.sin(dir_spheric[0] * np.pi / 180) * np.cos(dir_spheric[1] * np.pi / 180) ) dir_cart[2] = dir_spheric[2] * np.sin(dir_spheric[1] * np.pi / 180) for ind_dir_ptr in Source_Position_Cartesian: tmp = np.dot(ind_dir_ptr, dir_cart) if tmp > valmax: valmax = tmp indmax = ind_dir ind_dir = ind_dir + 1 return indmax
scripts/binauralRenderer_interface/run.py 0 → 100644 +26 −0 Original line number Diff line number Diff line import SofaReader as sr import numpy as np import matplotlib.pyplot as plt filename = "./HRIRs_sofa/HRIR_128_Meth5_IRC_53_Q10_symL_Itrp1_48000.sofa" # filename = "./HRIRs_sofa/HRIR_128_48000_dolby_SBA3.sofa" [baseName, listName, sampleRate, latency,Data_Delay, Data_IR_48khz,Data_IR_32khz,Data_IR_16khz, srcPos, srcPosCart ] = sr.load(filename) ind = sr.find_pos_spheric(srcPosCart, [30., 0., 2.]) y_16k = Data_IR_16khz[ind][0] y_32k = Data_IR_32khz[ind][0] y_48k = Data_IR_48khz[ind][0] t_16k = np.linspace(0, y_48k.shape[0] / 48000, y_16k.shape[0], endpoint=False) t_32k = np.linspace(0, y_48k.shape[0] / 48000, y_32k.shape[0], endpoint=False) t_48k = np.linspace(0, y_48k.shape[0] / 48000, y_48k.shape[0], endpoint=False) plt.plot(t_48k, y_48k, label="Signal échantillonné") plt.plot(t_32k, y_32k, label="Signal échantillonné") plt.plot(t_16k, y_16k, label="Signal échantillonné") plt.grid() plt.show() exit No newline at end of file