Commit 1df5b7e9 authored by emerit's avatar emerit
Browse files

add missing python files

parent 4a73f3f6
Loading
Loading
Loading
Loading
+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


+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