Commit 58631a4c authored by janssontoftg's avatar janssontoftg
Browse files

Add TD object rendering modeling tool

- Modeling tool with example for IVAS default set
- Change prefix for default HR filter set to "defaultHRIR" and update folder name for default hrtf_data
- Tune default model in hrfilter_model_v003 and ROM
- Update binaural_renderers_hrtf_data to include new default model
parent 2c374d03
Loading
Loading
Loading
Loading
+43 −43
Original line number Diff line number Diff line
@@ -390,37 +390,37 @@ static ivas_error DefaultBSplineModel(
    /* int16_t parameters */
    model->UseItdModel = 1;
    model->SplineDegree = 4;
    model->elevDim2 = 20;
    model->elevDim3 = 18;
    model->AlphaN = 578;
    model->elevDim2 = 17;
    model->elevDim3 = 15;
    model->AlphaN = 470;
    model->num_unique_azim_splines = 1;
    model->elevSegSamples = 3;
    model->elevBsLen[0] = 4;
    model->elevBsLen[1] = 7;
    model->elevBsLen[2] = 10;
    model->elevBsLen[3] = 7;
    model->elevSegSamples = 4;
    model->elevBsLen[0] = 5;
    model->elevBsLen[1] = 9;
    model->elevBsLen[2] = 13;
    model->elevBsLen[3] = 9;
    model->elevBsStart[0] = 0;
    model->elevBsStart[1] = 4;
    model->elevBsStart[2] = 11;
    model->elevBsStart[3] = 21;
    model->elevBsStart[1] = 5;
    model->elevBsStart[2] = 14;
    model->elevBsStart[3] = 27;

    model->azimDim2 = orange53_rom_azimDim2;
    model->azimDim3 = orange53_rom_azimDim3;
    model->azim_start_idx = orange53_rom_azim_start_idx;
    model->azimSegSamples = orange53_rom_azimSegSamples;
    model->azimShapeIdx = orange53_rom_azimShapeIdx;
    model->azimShapeSampFactor = orange53_rom_azimShapeSampFactor;
    model->azimDim2 = defaultHRIR_rom_azimDim2;
    model->azimDim3 = defaultHRIR_rom_azimDim3;
    model->azim_start_idx = defaultHRIR_rom_azim_start_idx;
    model->azimSegSamples = defaultHRIR_rom_azimSegSamples;
    model->azimShapeIdx = defaultHRIR_rom_azimShapeIdx;
    model->azimShapeSampFactor = defaultHRIR_rom_azimShapeSampFactor;

    /* float parameters */
    model->elevKSeq = (const float *) orange53_rom_elevKSeq;
    model->elevBsShape = (const float *) orange53_rom_elevBsShape;
    model->elevKSeq = (const float *) defaultHRIR_rom_elevKSeq;
    model->elevBsShape = (const float *) defaultHRIR_rom_elevBsShape;

    if ( ( model->azimBsShape = (const float **) malloc( model->num_unique_azim_splines * sizeof( float * ) ) ) == NULL )
    {
        return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural TD renderer\n" ) );
    }

    model->azimBsShape[0] = (const float *) orange53_rom_azimBsShape;
    model->azimBsShape[0] = (const float *) defaultHRIR_rom_azimBsShape;
    if ( ( model->azimKSeq = (float **) malloc( 18 * sizeof( float * ) ) ) == NULL )
    {
        return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural TD renderer\n" ) );
@@ -429,16 +429,16 @@ static ivas_error DefaultBSplineModel(
    {
        return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural TD renderer\n" ) );
    }
    if ( ( model->azimKSeq[17] = (float *) malloc( 2 * sizeof( float * ) ) ) == NULL )
    if ( ( model->azimKSeq[model->elevDim3 - 1] = (float *) malloc( 2 * sizeof( float * ) ) ) == NULL )
    {
        return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural TD renderer\n" ) );
    }
    model->azimKSeq[0][0] = 0.0f;
    model->azimKSeq[17][0] = 0.0f;
    model->azimKSeq[model->elevDim3 - 1][0] = 0.0f;
    model->azimKSeq[0][1] = 360.0f;
    model->azimKSeq[17][1] = 360.0f;
    model->azimKSeq[model->elevDim3 - 1][1] = 360.0f;

    for ( i = 1; i < 17; i++ )
    for ( i = 1; i < model->elevDim3 - 1; i++ )
    {
        if ( ( model->azimKSeq[i] = (float *) malloc( model->azimDim2[i] * sizeof( float * ) ) ) == NULL ) /* azimDim2[i] = 91, i=2..15 */
        {
@@ -446,17 +446,17 @@ static ivas_error DefaultBSplineModel(
        }
        for ( j = 0; j < model->azimDim2[i]; j++ )
        {
            model->azimKSeq[i][j] = (float) orange53_rom_azimSegSamples[0] * j;
            model->azimKSeq[i][j] = (float) defaultHRIR_rom_azimSegSamples[0] * j;
        }
    }

    switch ( output_Fs )
    {
        case 48000:
            model->AlphaL = (const float *) orange53_rom_AlphaL48;
            model->AlphaR = (const float *) orange53_rom_AlphaR48;
            model->EL = (const float *) orange53_rom_EL48;
            model->ER = (const float *) orange53_rom_ER48;
            model->AlphaL = (const float *) defaultHRIR_rom_AlphaL48;
            model->AlphaR = (const float *) defaultHRIR_rom_AlphaR48;
            model->EL = (const float *) defaultHRIR_rom_EL48;
            model->ER = (const float *) defaultHRIR_rom_ER48;
            model->K = 128;
            if ( HrFiltSet_p->ModelParams.UseItdModel )
            {
@@ -464,10 +464,10 @@ static ivas_error DefaultBSplineModel(
            }
            break;
        case 32000:
            model->AlphaL = (const float *) orange53_rom_AlphaL32;
            model->AlphaR = (const float *) orange53_rom_AlphaR32;
            model->EL = (const float *) orange53_rom_EL32;
            model->ER = (const float *) orange53_rom_ER32;
            model->AlphaL = (const float *) defaultHRIR_rom_AlphaL32;
            model->AlphaR = (const float *) defaultHRIR_rom_AlphaR32;
            model->EL = (const float *) defaultHRIR_rom_EL32;
            model->ER = (const float *) defaultHRIR_rom_ER32;
            model->K = 86;
            if ( HrFiltSet_p->ModelParams.UseItdModel )
            {
@@ -475,10 +475,10 @@ static ivas_error DefaultBSplineModel(
            }
            break;
        case 16000:
            model->AlphaL = (const float *) orange53_rom_AlphaL16;
            model->AlphaR = (const float *) orange53_rom_AlphaR16;
            model->EL = (const float *) orange53_rom_EL16;
            model->ER = (const float *) orange53_rom_ER16;
            model->AlphaL = (const float *) defaultHRIR_rom_AlphaL16;
            model->AlphaR = (const float *) defaultHRIR_rom_AlphaR16;
            model->EL = (const float *) defaultHRIR_rom_EL16;
            model->ER = (const float *) defaultHRIR_rom_ER16;
            model->K = 43;
            if ( HrFiltSet_p->ModelParams.UseItdModel )
            {
@@ -504,7 +504,7 @@ static ivas_error DefaultBSplineModel(
    modelITD->elevBsStart[2] = 11;
    modelITD->elevBsStart[3] = 21;

    modelITD->elevKSeq = model->elevKSeq;
    modelITD->elevKSeq = defaultHRIR_rom_ITD_elevKSeq;

    modelITD->azimBsLen[0] = 11;
    modelITD->azimBsLen[1] = 21;
@@ -517,14 +517,14 @@ static ivas_error DefaultBSplineModel(

    modelITD->azimSegSamples = 10;

    modelITD->azimKSeq = orange53_rom_ITD_azimKSeq;
    modelITD->W = (const float *) orange53_rom_ITD_W;
    modelITD->azimBsShape = (const float *) orange53_rom_ITD_azimBsShape;
    modelITD->elevBsShape = (const float *) orange53_rom_ITD_elevBsShape;
    modelITD->azimKSeq = defaultHRIR_rom_ITD_azimKSeq;
    modelITD->W = (const float *) defaultHRIR_rom_ITD_W;
    modelITD->azimBsShape = (const float *) defaultHRIR_rom_ITD_azimBsShape;
    modelITD->elevBsShape = (const float *) defaultHRIR_rom_ITD_elevBsShape;

    HRTF_model_precalc( model );

    HrFiltSet_p->latency_s = orange53_rom_latency_s;
    HrFiltSet_p->latency_s = defaultHRIR_rom_latency_s;
    HrFiltSet_p->SampleRate = output_Fs;
    HrFiltSet_p->FiltLength = HrFiltSet_p->ModelParams.K;

+3 −3
Original line number Diff line number Diff line
@@ -998,9 +998,9 @@ static void set_reverb_acoustic_data(
    }
    else
    {
        pParams->pHrtf_avg_pwr_response_l_const = orange53_left_avg_power;
        pParams->pHrtf_avg_pwr_response_r_const = orange53_right_avg_power;
        pParams->pHrtf_inter_aural_coherence_const = orange53_coherence;
        pParams->pHrtf_avg_pwr_response_l_const = defaultHRIR_left_avg_power;
        pParams->pHrtf_avg_pwr_response_r_const = defaultHRIR_right_avg_power;
        pParams->pHrtf_inter_aural_coherence_const = defaultHRIR_coherence;
    }

    /* interpolate input table data for T60 and DSR to the FFT filter grid */
+10072 −12369

File changed.

Preview size limit exceeded, changes collapsed.

+28 −27
Original line number Diff line number Diff line
@@ -41,30 +41,31 @@
/*-------------------------------------------------------------------------
 * TD Binaural rendering related ROM tables
 *------------------------------------------------------------------------*/
/* TD renderer HRTF default model Orange53 */
extern const float orange53_rom_latency_s;
extern const int16_t orange53_rom_azimDim2[18];
extern const int16_t orange53_rom_azimDim3[18];
extern const int16_t orange53_rom_azim_start_idx[18];
extern const int16_t orange53_rom_azimSegSamples[1];
extern const int16_t orange53_rom_azimShapeIdx[18];
extern const int16_t orange53_rom_azimShapeSampFactor[18];
extern const float orange53_rom_elevKSeq[16];
extern const uint32_t orange53_rom_AlphaL48[578 * 128];
extern const uint32_t orange53_rom_AlphaR48[578 * 128];
extern const uint32_t orange53_rom_AlphaL32[578 * 86];
extern const uint32_t orange53_rom_AlphaR32[578 * 86];
extern const uint32_t orange53_rom_AlphaL16[578 * 43];
extern const uint32_t orange53_rom_AlphaR16[578 * 43];
extern const uint32_t orange53_rom_EL48[HRTF_MODEL_N_SECTIONS * 578];
extern const uint32_t orange53_rom_ER48[HRTF_MODEL_N_SECTIONS * 578];
extern const uint32_t orange53_rom_EL32[HRTF_MODEL_N_SECTIONS * 578];
extern const uint32_t orange53_rom_ER32[HRTF_MODEL_N_SECTIONS * 578];
extern const uint32_t orange53_rom_EL16[HRTF_MODEL_N_SECTIONS * 578];
extern const uint32_t orange53_rom_ER16[HRTF_MODEL_N_SECTIONS * 578];
extern const uint32_t orange53_rom_elevBsShape[28];
extern const uint32_t orange53_rom_azimBsShape[21];
extern const uint32_t orange53_rom_ITD_W[658];
extern const uint32_t orange53_rom_ITD_azimBsShape[84];
extern const float orange53_rom_ITD_azimKSeq[19];
extern const uint32_t orange53_rom_ITD_elevBsShape[28];
/* TD renderer default HRIR model */
extern const float defaultHRIR_rom_latency_s;
extern const int16_t defaultHRIR_rom_azimDim2[15];
extern const int16_t defaultHRIR_rom_azimDim3[15];
extern const int16_t defaultHRIR_rom_azim_start_idx[15];
extern const int16_t defaultHRIR_rom_azimSegSamples[1];
extern const int16_t defaultHRIR_rom_azimShapeIdx[15];
extern const int16_t defaultHRIR_rom_azimShapeSampFactor[15];
extern const float defaultHRIR_rom_elevKSeq[13];
extern const uint32_t defaultHRIR_rom_AlphaL48[470 * 128];
extern const uint32_t defaultHRIR_rom_AlphaR48[470 * 128];
extern const uint32_t defaultHRIR_rom_AlphaL32[470 * 86];
extern const uint32_t defaultHRIR_rom_AlphaR32[470 * 86];
extern const uint32_t defaultHRIR_rom_AlphaL16[470 * 43];
extern const uint32_t defaultHRIR_rom_AlphaR16[470 * 43];
extern const uint32_t defaultHRIR_rom_EL48[HRTF_MODEL_N_SECTIONS * 470];
extern const uint32_t defaultHRIR_rom_ER48[HRTF_MODEL_N_SECTIONS * 470];
extern const uint32_t defaultHRIR_rom_EL32[HRTF_MODEL_N_SECTIONS * 470];
extern const uint32_t defaultHRIR_rom_ER32[HRTF_MODEL_N_SECTIONS * 470];
extern const uint32_t defaultHRIR_rom_EL16[HRTF_MODEL_N_SECTIONS * 470];
extern const uint32_t defaultHRIR_rom_ER16[HRTF_MODEL_N_SECTIONS * 470];
extern const uint32_t defaultHRIR_rom_elevBsShape[36];
extern const uint32_t defaultHRIR_rom_azimBsShape[21];
extern const uint32_t defaultHRIR_rom_ITD_W[658];
extern const uint32_t defaultHRIR_rom_ITD_azimBsShape[84];
extern const float defaultHRIR_rom_ITD_azimKSeq[19];
extern const uint32_t defaultHRIR_rom_ITD_elevBsShape[28];
extern const float defaultHRIR_rom_ITD_elevKSeq[16];
+3 −3
Original line number Diff line number Diff line
@@ -157,7 +157,7 @@ const float SincTable[321] =
     0.00000000f
};

const float orange53_left_avg_power[257] = {
const float defaultHRIR_left_avg_power[257] = {
    0.999231100f, 0.992580175f, 0.969233215f, 0.925614893f, 0.871408045f, 0.826101780f, 0.803222895f, 0.800087631f, 0.802672029f,
    0.801490188f, 0.796555817f, 0.790879488f, 0.784882724f, 0.777585745f, 0.769326210f, 0.761789441f, 0.756145239f, 0.752754092f,
    0.751703024f, 0.752594173f, 0.754317880f, 0.755515277f, 0.754378498f, 0.748860359f, 0.738919020f, 0.727488697f, 0.718792558f,
@@ -189,7 +189,7 @@ const float orange53_left_avg_power[257] = {
    0.266522497f, 0.266185820f, 0.266298562f, 0.266692907f, 0.266907692f
};

const float orange53_right_avg_power[257] = {
const float defaultHRIR_right_avg_power[257] = {
    0.999231100f, 0.992580175f, 0.969233215f, 0.925614893f, 0.871408045f, 0.826101780f, 0.803222895f, 0.800087631f, 0.802672029f,
    0.801490188f, 0.796555817f, 0.790879488f, 0.784882724f, 0.777585745f, 0.769326210f, 0.761789441f, 0.756145239f, 0.752754092f,
    0.751703024f, 0.752594173f, 0.754317880f, 0.755515277f, 0.754378498f, 0.748860359f, 0.738919020f, 0.727488697f, 0.718792558f,
@@ -221,7 +221,7 @@ const float orange53_right_avg_power[257] = {
    0.266522497f, 0.266185820f, 0.266298562f, 0.266692907f, 0.266907692f
};

const float orange53_coherence[257] = {
const float defaultHRIR_coherence[257] = {
    0.929530263f, 0.921171963f, 0.900268972f, 0.876067519f, 0.855227590f, 0.837884128f, 0.823401272f, 0.818804145f, 0.835025251f,
    0.871971071f, 0.911253273f, 0.929330528f, 0.921199203f, 0.900894165f, 0.882577479f, 0.867001534f, 0.849280477f, 0.832460761f,
    0.824062645f, 0.823441386f, 0.820908070f, 0.811902404f, 0.802339375f, 0.798648477f, 0.797345281f, 0.791158736f, 0.779512227f,
Loading