diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index d1c33ee..bed401d 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Configure CMake # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. diff --git a/.github/workflows/matlab_examples.yml b/.github/workflows/matlab_examples.yml index 2b48aa5..d808e9b 100644 --- a/.github/workflows/matlab_examples.yml +++ b/.github/workflows/matlab_examples.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Set path to correct runtime lib so MATLAB does not use an outdated one run: echo 'LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6' >> $GITHUB_ENV diff --git a/.github/workflows/msbuild.yml b/.github/workflows/msbuild.yml index 65a1f8e..ab7c337 100644 --- a/.github/workflows/msbuild.yml +++ b/.github/workflows/msbuild.yml @@ -16,7 +16,7 @@ jobs: runs-on: windows-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Add MSBuild to PATH uses: microsoft/setup-msbuild@v1.0.2 diff --git a/.github/workflows/python_examples.yml b/.github/workflows/python_examples.yml index 41749c4..cf76a11 100644 --- a/.github/workflows/python_examples.yml +++ b/.github/workflows/python_examples.yml @@ -14,9 +14,9 @@ jobs: runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Set up Python 3.10 - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: python-version: "3.10" # We need blender to run example 6 diff --git a/include/VocalTractLabApi/VocalTractLabApi.h b/include/VocalTractLabApi/VocalTractLabApi.h index 0dd2e92..970252d 100644 --- a/include/VocalTractLabApi/VocalTractLabApi.h +++ b/include/VocalTractLabApi/VocalTractLabApi.h @@ -654,6 +654,7 @@ C_EXPORT int vtlGesturalScoreToEma(const char *gestureFileName, const char *emaF // Lower Cover (JAW) = 148) // o filePath: path leading to the directory where EMA and mesh files shall be stored. // o fileName: name of all exported datasets +// o frameSamplingRate: sampling rate of the frames, i. e. how many frames are in one second // // The return value is 0 if successful, and otherwise an error code >= 1. // Error codes: @@ -668,9 +669,10 @@ C_EXPORT int vtlGesturalScoreToEma(const char *gestureFileName, const char *emaF // 8: EMA file already exists: prevents overwriting // 9: EMA file could not be opened // 10: API has not been initialized +// 11: frameSamplingRate <= 0.0 // **************************************************************************** -C_EXPORT int vtlTractSequenceToEmaAndMesh(double *tractParams, double *glottisParams, int numTractParams, int numGlottisParams, int numFrames, int numEmaPoints, int *surf, int *vert, const char *filePath, const char *fileName); +C_EXPORT int vtlTractSequenceToEmaAndMesh(double *tractParams, double *glottisParams, int numTractParams, int numGlottisParams, int numFrames, int numEmaPoints, int *surf, int *vert, const char *filePath, const char *fileName, double frameSamplingRate); // **************************************************************************** diff --git a/src/VocalTractLabApi/VocalTractLabApi.cpp b/src/VocalTractLabApi/VocalTractLabApi.cpp index 70b907b..59776ca 100644 --- a/src/VocalTractLabApi/VocalTractLabApi.cpp +++ b/src/VocalTractLabApi/VocalTractLabApi.cpp @@ -1919,6 +1919,7 @@ int vtlGesturalScoreToEma(const char *gestureFileName, const char *emaFileName) // Lower Cover (JAW) = 148) // o filePath: path leading to the directory where EMA and mesh files shall be stored. // o fileName: name of all exported datasets +// o frameSamplingRate: sampling rate of the frames, i. e. how many frames are in one second // // The return value is 0 if successful, and otherwise an error code >= 1. // Error codes: @@ -1933,9 +1934,10 @@ int vtlGesturalScoreToEma(const char *gestureFileName, const char *emaFileName) // 8: EMA file already exists: prevents overwriting // 9: EMA file could not be opened // 10: API has not been initialized +// 11: frameSamplingRate <= 0.0 // **************************************************************************** -int vtlTractSequenceToEmaAndMesh(double *tractParams, double *glottisParams, int numTractParams, int numGlottisParams, int numFrames, int numEmaPoints, int *surf, int *vert, const char *filePath, const char *fileName) +int vtlTractSequenceToEmaAndMesh(double *tractParams, double *glottisParams, int numTractParams, int numGlottisParams, int numFrames, int numEmaPoints, int *surf, int *vert, const char *filePath, const char *fileName, double frameSamplingRate) { // Return if no EMA point is selected if (numEmaPoints <= 0) @@ -1944,6 +1946,13 @@ int vtlTractSequenceToEmaAndMesh(double *tractParams, double *glottisParams, int return 1; } + if (frameSamplingRate <= 0.0) + { + printf("Error in vtlTractSequenceToEmaAndMesh(): frameSamplingRate <= 0"); + return 11; + } + + if (surf == NULL) { printf("Error in vtlTractSequenceToEmaAndMesh(): surf == NULL"); @@ -2100,7 +2109,7 @@ int vtlTractSequenceToEmaAndMesh(double *tractParams, double *glottisParams, int for (int f = 0; f < numFrames; f++) { fs::path objFileName = objFilePath.string() + to_string(f) + ".obj" ; // name of current .obj file - emaFile << f*0.005 << " "; // Write current time (frame*0.005 currently) into file + emaFile << f * (1/frameSamplingRate) << " "; // time of the time step in seconds // Set the properties of the target tube. for (i = 0; i < numTractParams; i++) @@ -2246,7 +2255,7 @@ int vtlGesturalScoreToEmaAndMesh(const char *gestureFileName, const char *filePa int vertex[] = {115,225,335}; // Vertex Index of selected EMA point // Call of vtlTractSequenceToEmaAndMesh could also be done from outside! - return vtlTractSequenceToEmaAndMesh(tractParams.data(), glottisParams.data(), numTractParams, numGlottisParams, numFrames, 3, surf, vertex, filePath, fileName); + return vtlTractSequenceToEmaAndMesh(tractParams.data(), glottisParams.data(), numTractParams, numGlottisParams, numFrames, 3, surf, vertex, filePath, fileName, EMA_SAMPLING_RATE_HZ); } // **************************************************************************** diff --git a/test/VtlApiTests.cpp b/test/VtlApiTests.cpp index 756ba65..da2a17a 100644 --- a/test/VtlApiTests.cpp +++ b/test/VtlApiTests.cpp @@ -352,7 +352,7 @@ TEST(ApiTest, TractToEmaAndMesh) ret = vtlTractSequenceToEmaAndMesh(tractSeq.data(), glottisSeq.data(), numVocalTractParams, numGlottisParams, numFrames, numEmaPoints, surf, vert, - exportedMeshPath, exportMeshBaseName); + exportedMeshPath, exportMeshBaseName, 200.0); EXPECT_EQ(ret, 0);