Commit 27408bd9 authored by emerit's avatar emerit
Browse files

Allows to have sofa files as input

parent cbf0eb35
Loading
Loading
Loading
Loading
Loading
+12 −7
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@ option(USE_PYTHON "Use SOFA python reader" OFF)
option(USE_MATLAB "Use SOFA matlab reader" ON)

if(USE_MATLAB)
    option(USE_MATLAB_ENG "Use matlab engine" OFF) # allows to use sofa file as input to the exe, but on windows requires to register matlab as a com server type in matlab "comserver('register')"" 
    find_package(Matlab REQUIRED)
    message("Matlab_VERSION = ${Matlab_VERSION}")
    message("Matlab_ROOT_DIR = ${Matlab_ROOT_DIR}")
@@ -32,6 +33,10 @@ if(USE_MATLAB)
    message("Matlab_DATAARRAY_LIBRARY = ${Matlab_DATAARRAY_LIBRARY}")
    add_definitions(-DUSE_MATLAB)
    include_directories(${Matlab_INCLUDE_DIRS} ${IVAS_TRUNK_UTIL_PATH} ${IVAS_TRUNK_ENC_PATH} ${IVAS_TRUNK_DEC_PATH} ${IVAS_TRUNK_REND_PATH} ${IVAS_TRUNK_COM_PATH} ${IVAS_TRUNK_DEBUG_PATH})
    if(USE_MATLAB_ENG)
        string(REPLACE "mex" "eng" Matlab_ENG_LIBRARY ${Matlab_MEX_LIBRARY})
        add_definitions(-DUSE_MATLAB_ENG)
    endif()
endif()

if(USE_PYTHON)
@@ -103,19 +108,19 @@ add_library(${PROJECT_NAME}_lib STATIC ${SOURCE_FILES_C} ${SOURCE_FILES_H})
add_executable(${PROJECT_NAME} generate_crend_ivas_tables_from_sofa.c)

if(USE_MATLAB)
    if(UNIX AND NOT APPLE)
        target_link_libraries(${PROJECT_NAME} ${PROJECT_NAME}_lib ${Matlab_MAT_LIBRARY} ${Matlab_MX_LIBRARY} libstdc++.so.6 -lm -ldl)
    else()
        message("Matlab_MX_LIBRARY = ${Matlab_MX_LIBRARY}")
    target_link_libraries(${PROJECT_NAME} ${PROJECT_NAME}_lib ${Matlab_MAT_LIBRARY} ${Matlab_MX_LIBRARY})
    if(UNIX AND NOT APPLE)
        target_link_libraries(${PROJECT_NAME} libstdc++.so.6 -lm -ldl)
    endif()
    if(USE_MATLAB_ENG)
        target_link_libraries(${PROJECT_NAME} ${Matlab_ENG_LIBRARY})
    endif()
endif()

if(USE_PYTHON)
    if(UNIX AND NOT APPLE)
        target_link_libraries(${PROJECT_NAME} ${PROJECT_NAME}_lib ${Python_LIBRARIES} -lm -ldl)
    else()
    target_link_libraries(${PROJECT_NAME} ${PROJECT_NAME}_lib ${Python_LIBRARIES})
    if(UNIX AND NOT APPLE)
        target_link_libraries(${PROJECT_NAME} -lm -ldl)
    endif()
endif()

+38 −1
Original line number Diff line number Diff line
@@ -61,6 +61,9 @@

#ifdef USE_MATLAB
#include "mat.h"
#ifdef USE_MATLAB_ENG
#include "engine.h"
#endif
#else
#include <Python.h>
#include "numpy/utils.h"       // Include any other Numpy headers, UFuncs for example.
@@ -788,6 +791,41 @@ int main( int argc, char *argv[] )
                }
            }
        }

#ifdef USE_MATLAB_ENG
        Engine *ep = NULL;
        char *tmpChar = strstr( argv[i], ".sofa" );
        if ( tmpChar != NULL )
        {
            if ( !( ep = engOpen( NULL ) ) )
            {
                printf( "Error starting matlab engine\n" );
                return -1;
            }
            const char addPathCmdStr[] = "addpath(['.' filesep() 'matlab_hrir_generation_scripts']);";
            const char startCmdStr[] = "SOFA_save_to_mat('";
            const char endCmdStr[] = "');";
            char *cdCmd;
            char *cmdStr;
            int ret;
            cdCmd = (char *) malloc( strlen( current_path ) + 4 );
            sprintf( cdCmd, "cd %s", current_path );
            cmdStr = (char *) malloc( strlen( startCmdStr ) + strlen( argv[i] ) + strlen( endCmdStr ) + 1 );
            sprintf( cmdStr, "%s%s%s", startCmdStr, argv[i], endCmdStr );

            ret = engEvalString( ep, cdCmd );
            ret = engEvalString( ep, addPathCmdStr );
            ret = engEvalString( ep, cmdStr );

            strcpy( tmpChar, ".mat" );
            tmpChar[4] = '\0';

            free( cdCmd );
            free( cmdStr );
            engClose( ep );
        }

#endif
        convert_backslash( argv[i] );

        err = generate_crend_ivas_tables_from_sofa( argv[i], &cfgBrirOptim );
@@ -1272,7 +1310,6 @@ int generate_crend_ivas_tables_from_sofa( const char *file_path, ConfigReader *c

    for ( indSR = 0; indSR < sizeof( sample_rates ) / sizeof( float ); indSR++ )
    {

        uint16_t frame_len = L_FRAME48k;
        int32_t maxDel = maxDel48kHz * DEFAULT_SAMPLERATE / sample_rates[indSR];
        switch ( sample_rates[indSR] )