diff --git a/.github/build_profiles/clang17d b/.github/build_profiles/clang17d new file mode 100644 index 0000000..1b9ab61 --- /dev/null +++ b/.github/build_profiles/clang17d @@ -0,0 +1,13 @@ +[settings] +arch=x86_64 +build_type=Debug +compiler=clang +compiler.cppstd=17 +compiler.libcxx=libstdc++11 +compiler.version=17 +os=Linux + +[conf] +tools.build:compiler_executables={'c': 'clang', 'cpp': 'clang++' } +tools.cmake.cmaketoolchain:generator=Ninja +tools.cmake.cmake_layout:build_folder_vars=["settings.compiler", "settings.compiler.cppstd", "settings.build_type"] diff --git a/.github/build_profiles/clang17r b/.github/build_profiles/clang17r new file mode 100644 index 0000000..63fb7b3 --- /dev/null +++ b/.github/build_profiles/clang17r @@ -0,0 +1,13 @@ +[settings] +arch=x86_64 +build_type=Release +compiler=clang +compiler.cppstd=17 +compiler.libcxx=libstdc++11 +compiler.version=17 +os=Linux + +[conf] +tools.build:compiler_executables={'c': 'clang', 'cpp': 'clang++' } +tools.cmake.cmaketoolchain:generator=Ninja +tools.cmake.cmake_layout:build_folder_vars=["settings.compiler", "settings.compiler.cppstd", "settings.build_type"] diff --git a/.github/build_profiles/clang20d b/.github/build_profiles/clang20d new file mode 100644 index 0000000..efb2c5c --- /dev/null +++ b/.github/build_profiles/clang20d @@ -0,0 +1,13 @@ +[settings] +arch=x86_64 +build_type=Debug +compiler=clang +compiler.cppstd=20 +compiler.libcxx=libstdc++11 +compiler.version=17 +os=Linux + +[conf] +tools.build:compiler_executables={'c': 'clang', 'cpp': 'clang++' } +tools.cmake.cmaketoolchain:generator=Ninja +tools.cmake.cmake_layout:build_folder_vars=["settings.compiler", "settings.compiler.cppstd", "settings.build_type"] diff --git a/.github/build_profiles/clang20r b/.github/build_profiles/clang20r new file mode 100644 index 0000000..873f96d --- /dev/null +++ b/.github/build_profiles/clang20r @@ -0,0 +1,13 @@ +[settings] +arch=x86_64 +build_type=Release +compiler=clang +compiler.cppstd=20 +compiler.libcxx=libstdc++11 +compiler.version=17 +os=Linux + +[conf] +tools.build:compiler_executables={'c': 'clang', 'cpp': 'clang++' } +tools.cmake.cmaketoolchain:generator=Ninja +tools.cmake.cmake_layout:build_folder_vars=["settings.compiler", "settings.compiler.cppstd", "settings.build_type"] diff --git a/.github/build_profiles/gcc17d b/.github/build_profiles/gcc17d new file mode 100644 index 0000000..c70d3fd --- /dev/null +++ b/.github/build_profiles/gcc17d @@ -0,0 +1,13 @@ +[settings] +arch=x86_64 +build_type=Debug +compiler=gcc +compiler.cppstd=17 +compiler.libcxx=libstdc++11 +compiler.version=13 +os=Linux + +[conf] +tools.build:compiler_executables={'c': 'gcc', 'cpp': 'g++' } +tools.cmake.cmaketoolchain:generator=Ninja +tools.cmake.cmake_layout:build_folder_vars=["settings.compiler", "settings.compiler.cppstd", "settings.build_type"] diff --git a/.github/build_profiles/gcc17r b/.github/build_profiles/gcc17r new file mode 100644 index 0000000..d13e19b --- /dev/null +++ b/.github/build_profiles/gcc17r @@ -0,0 +1,13 @@ +[settings] +arch=x86_64 +build_type=Release +compiler=gcc +compiler.cppstd=17 +compiler.libcxx=libstdc++11 +compiler.version=13 +os=Linux + +[conf] +tools.build:compiler_executables={'c': 'gcc', 'cpp': 'g++' } +tools.cmake.cmaketoolchain:generator=Ninja +tools.cmake.cmake_layout:build_folder_vars=["settings.compiler", "settings.compiler.cppstd", "settings.build_type"] diff --git a/.github/build_profiles/gcc20d b/.github/build_profiles/gcc20d new file mode 100644 index 0000000..d30d055 --- /dev/null +++ b/.github/build_profiles/gcc20d @@ -0,0 +1,13 @@ +[settings] +arch=x86_64 +build_type=Debug +compiler=gcc +compiler.cppstd=20 +compiler.libcxx=libstdc++11 +compiler.version=13 +os=Linux + +[conf] +tools.build:compiler_executables={'c': 'gcc', 'cpp': 'g++' } +tools.cmake.cmaketoolchain:generator=Ninja +tools.cmake.cmake_layout:build_folder_vars=["settings.compiler", "settings.compiler.cppstd", "settings.build_type"] diff --git a/.github/build_profiles/gcc20r b/.github/build_profiles/gcc20r new file mode 100644 index 0000000..543bdb9 --- /dev/null +++ b/.github/build_profiles/gcc20r @@ -0,0 +1,13 @@ +[settings] +arch=x86_64 +build_type=Release +compiler=gcc +compiler.cppstd=20 +compiler.libcxx=libstdc++11 +compiler.version=13 +os=Linux + +[conf] +tools.build:compiler_executables={'c': 'gcc', 'cpp': 'g++' } +tools.cmake.cmaketoolchain:generator=Ninja +tools.cmake.cmake_layout:build_folder_vars=["settings.compiler", "settings.compiler.cppstd", "settings.build_type"] diff --git a/.github/build_profiles/msvc17d b/.github/build_profiles/msvc17d new file mode 100644 index 0000000..571c8a4 --- /dev/null +++ b/.github/build_profiles/msvc17d @@ -0,0 +1,13 @@ +[settings] +arch=x86_64 +build_type=Debug +compiler=msvc +compiler.cppstd=17 +compiler.version=193 +compiler.runtime=dynamic +os=Windows + +[conf] +tools.build:compiler_executables={'c': 'cl.exe', 'cpp': 'cl.exe' } +tools.cmake.cmaketoolchain:generator=Ninja +tools.cmake.cmake_layout:build_folder_vars=["settings.compiler", "settings.compiler.cppstd", "settings.build_type"] diff --git a/.github/build_profiles/msvc17r b/.github/build_profiles/msvc17r new file mode 100644 index 0000000..c4db893 --- /dev/null +++ b/.github/build_profiles/msvc17r @@ -0,0 +1,13 @@ +[settings] +arch=x86_64 +build_type=Release +compiler=msvc +compiler.cppstd=17 +compiler.version=193 +compiler.runtime=dynamic +os=Windows + +[conf] +tools.build:compiler_executables={'c': 'cl.exe', 'cpp': 'cl.exe' } +tools.cmake.cmaketoolchain:generator=Ninja +tools.cmake.cmake_layout:build_folder_vars=["settings.compiler", "settings.compiler.cppstd", "settings.build_type"] diff --git a/.github/build_profiles/msvc20d b/.github/build_profiles/msvc20d new file mode 100644 index 0000000..ce1cc2d --- /dev/null +++ b/.github/build_profiles/msvc20d @@ -0,0 +1,13 @@ +[settings] +arch=x86_64 +build_type=Debug +compiler=msvc +compiler.cppstd=20 +compiler.version=193 +compiler.runtime=dynamic +os=Windows + +[conf] +tools.build:compiler_executables={'c': 'cl.exe', 'cpp': 'cl.exe' } +tools.cmake.cmaketoolchain:generator=Ninja +tools.cmake.cmake_layout:build_folder_vars=["settings.compiler", "settings.compiler.cppstd", "settings.build_type"] diff --git a/.github/build_profiles/msvc20r b/.github/build_profiles/msvc20r new file mode 100644 index 0000000..be765da --- /dev/null +++ b/.github/build_profiles/msvc20r @@ -0,0 +1,13 @@ +[settings] +arch=x86_64 +build_type=Release +compiler=msvc +compiler.cppstd=20 +compiler.version=193 +compiler.runtime=dynamic +os=Windows + +[conf] +tools.build:compiler_executables={'c': 'cl.exe', 'cpp': 'cl.exe' } +tools.cmake.cmaketoolchain:generator=Ninja +tools.cmake.cmake_layout:build_folder_vars=["settings.compiler", "settings.compiler.cppstd", "settings.build_type"] diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index 9129484..423248a 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -14,79 +14,101 @@ jobs: strategy: fail-fast: false matrix: - os: [windows-latest, ubuntu-latest] - c_compiler: [gcc, clang, cl] - build_type: [Debug, Release] - cxx_standard: ["17", "20"] + build_profile: [clang20d, clang20r, gcc20d, gcc20r, msvc20d, msvc20r, clang17d, clang17r, gcc17d, gcc17r, msvc17d, msvc17r] include: - - c_compiler: gcc - cxx_compiler: g++ - - c_compiler: clang - cxx_compiler: clang++ - - c_compiler: cl - cxx_compiler: cl - - os: windows-latest - test_name: .\Bin\UnitTest.exe - - os: ubuntu-latest - test_name: ./Bin/UnitTest - - build_type: Debug - conan_preset: "conan-debug" - - build_type: Release - conan_preset: "conan-release" - exclude: - - os: windows-latest - c_compiler: gcc - - os: windows-latest - c_compiler: clang - - os: ubuntu-latest - c_compiler: cl + - build_profile: clang20d + conan_preset: clang-20-debug + os: ubuntu-latest + - build_profile: clang20r + conan_preset: clang-20-release + os: ubuntu-latest + - build_profile: gcc20d + conan_preset: gcc-20-debug + os: ubuntu-latest + - build_profile: gcc20r + conan_preset: gcc-20-release + os: ubuntu-latest + - build_profile: msvc20d + conan_preset: msvc-20-debug + os: windows-latest + - build_profile: msvc20r + conan_preset: msvc-20-release + os: windows-latest + - build_profile: clang17d + conan_preset: clang-17-debug + os: ubuntu-latest + - build_profile: clang17r + conan_preset: clang-17-release + os: ubuntu-latest + - build_profile: gcc17d + conan_preset: gcc-17-debug + os: ubuntu-latest + - build_profile: gcc17r + conan_preset: gcc-17-release + os: ubuntu-latest + - build_profile: msvc17d + conan_preset: msvc-17-debug + os: windows-latest + - build_profile: msvc17r + conan_preset: msvc-17-release + os: windows-latest - name: ${{ matrix.c_compiler }} - ${{ matrix.build_type }} - ${{ matrix.os }} - c++${{ matrix.cxx_standard }} + name: ${{ matrix.build_profile }} runs-on: ${{matrix.os}} + + env: + CMAKE_EXTRA: "-DDSPBB_BUILD_TESTS:BOOL=ON -DDSPBB_BUILD_EXAMPLES:BOOL=ON -DDSPBB_BUILD_BENCHMARKS:BOOL=ON" steps: - - uses: actions/checkout@v2 - - uses: seanmiddleditch/gha-setup-ninja@v3 + - uses: actions/checkout@v4 + - uses: seanmiddleditch/gha-setup-ninja@v4 - uses: seanmiddleditch/gha-setup-vsdevenv@master - - name: Install conan - shell: bash - env: - CC: "${{ matrix.c_compiler != 'cl' && matrix.c_compiler || '' }}" - CXX: "${{ matrix.cxx_compiler != 'cl' && matrix.cxx_compiler || '' }}" + - run: pip install conan + + - name: Install native compilers + if: ${{ matrix.os == 'ubuntu-latest' }} run: | - pip install conan - conan profile detect --name ci --force - python $GITHUB_WORKSPACE/support/update-conan-profile.py $(conan profile path ci) ${{matrix.build_type}} ${{matrix.c_compiler}} ${{matrix.cxx_compiler}} ${{matrix.cxx_standard}} + sudo add-apt-repository ppa:ubuntu-toolchain-r/test + sudo apt update + + sudo apt install gcc-13 g++-13 + sudo update-alternatives --remove-all gcc || true + sudo update-alternatives --remove-all g++ || true + sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-13 10 --slave /usr/bin/g++ g++ /usr/bin/g++-13 + + wget https://apt.llvm.org/llvm.sh + chmod +x llvm.sh + sudo ./llvm.sh 17 clang + + sudo update-alternatives --remove-all clang || true + sudo update-alternatives --remove-all clang++ || true + sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-17 10 --slave /usr/bin/clang++ clang++ /usr/bin/clang++-17 - name: Cache conan packages id: cache-conan uses: actions/cache@v3 with: path: ~/.conan2/p - key: conan-cache-packages-${{ matrix.os }}-${{ matrix.c_compiler }}-${{ matrix.build_type }}-${{ matrix.cxx_standard }} + key: conan-cache-packages-${{ matrix.build_profile }} - name: Create Build Environment - run: cmake -E make_directory ${{runner.workspace}}/build + run: cmake -E make_directory ${{github.workspace}}/build - name: Configure CMake shell: bash - working-directory: ${{runner.workspace}}/build env: - CC: ${{matrix.c_compiler}} - CXX: ${{matrix.cxx_compiler}} + PR: "${{github.workspace}}/.github/build_profiles/${{matrix.build_profile}}" run: | - conan install $GITHUB_WORKSPACE --output-folder=. --build=missing -pr ci -pr:b ci -s build_type=${{ matrix.build_type }} + cmake -E make_directory "${{github.workspace}}/build" + conan install "${{github.workspace}}" --build=missing -pr $PR -pr:b $PR conan cache clean - cmake $GITHUB_WORKSPACE --preset ${{ matrix.conan_preset }} + cmake ${{env.CMAKE_EXTRA}} -S "${{github.workspace}}" --preset conan-${{ matrix.conan_preset }} - name: Build - working-directory: ${{runner.workspace}}/build - shell: bash - run: cmake --build . --config ${{matrix.build_type}} + run: | + cmake --build --preset conan-${{ matrix.conan_preset }} - name: Test - working-directory: ${{runner.workspace}}/build - shell: bash - run: ./Bin/UnitTest + run: ${{github.workspace}}/build/${{ matrix.conan_preset }}/bin/UnitTest diff --git a/.github/workflows/clang_format.yml b/.github/workflows/clang_format.yml index 9145649..b8796d4 100644 --- a/.github/workflows/clang_format.yml +++ b/.github/workflows/clang_format.yml @@ -7,18 +7,21 @@ on: types: [opened, synchronize, reopened] jobs: verify: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 with: fetch-depth: 1 - - uses: seanmiddleditch/gha-setup-vsdevenv@master - with: - fetch-depth: 1 - - uses: KyleMayes/install-llvm-action@v1 - with: - version: "12.0" - directory: ${{ runner.temp }}/llvm + - name: Install clang-format + run: | + wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | sudo tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc + sudo add-apt-repository -y "deb http://apt.llvm.org/noble/ llvm-toolchain-noble-18 main" + sudo apt-get update + sudo apt-get install clang-format-18 + which clang-format-18 + + sudo update-alternatives --remove-all clang-format || true + sudo update-alternatives --install /usr/bin/clang-format clang-format /usr/bin/clang-format-18 10 - name: Verify formatting run: | python ./support/run-clang-format.py -r --exclude "*pocketfft*" include diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml deleted file mode 100644 index 6fd39a0..0000000 --- a/.github/workflows/deploy.yml +++ /dev/null @@ -1,26 +0,0 @@ -name: Deploy - -on: - push: - tags: - - 'v*.*.*' - -jobs: - gh-releases: - name: Create tagged release - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v2 - - name: Package project - id: create_release - uses: actions/create-release@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token - with: - tag_name: ${{ github.ref }} - release_name: Release ${{ github.ref }} - body: | - For changes, check the commit log. - draft: false - prerelease: false \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..6fd3d6d --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,26 @@ +name: Release + +on: + workflow_run: + workflows: [Build & test] + branches: [v**.**] + types: [completed] + +jobs: + create_release: + permissions: + actions: read + contents: write + env: + GH_TOKEN: ${{ github.token }} + runs-on: ubuntu-latest + if: ${{ github.event.workflow_run.conclusion == 'success' && github.event.workflow_run.head_branch != null }} + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ github.event.workflow_run.head_branch }} + + - name: Create release + shell: bash + run: | + gh release create ${{ github.event.workflow_run.head_branch }} \ No newline at end of file diff --git a/.github/workflows/sonarqube.yml b/.github/workflows/sonarqube.yml index d79c210..9ae4e6c 100644 --- a/.github/workflows/sonarqube.yml +++ b/.github/workflows/sonarqube.yml @@ -6,91 +6,93 @@ on: pull_request: types: [opened, synchronize, reopened] jobs: - build: + sonarcloud: runs-on: ubuntu-latest env: - SONAR_SCANNER_VERSION: 4.4.0.2170 - SONAR_SERVER_URL: "https://sonarcloud.io" BUILD_WRAPPER_OUT_DIR: build_wrapper_output_directory # Directory where build-wrapper output will be placed + build_profile: "clang17d" + conan_preset: "clang-17-debug" + steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 with: fetch-depth: 0 - - uses: seanmiddleditch/gha-setup-ninja@v3 - - uses: seanmiddleditch/gha-setup-vsdevenv@master - with: - fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis - - uses: KyleMayes/install-llvm-action@v1 - with: - version: "15.0" - directory: ${{ runner.temp }}/llvm - - name: Set up JDK 11 - uses: actions/setup-java@v1 - with: - java-version: 11 - - name: Install conan - shell: bash - env: - CC: clang - CXX: clang++ + - uses: seanmiddleditch/gha-setup-ninja@v4 + + - run: pip install conan + + - name: Install native compilers run: | - pip install conan - conan profile detect --name ci --force - python $GITHUB_WORKSPACE/support/update-conan-profile.py $(conan profile path ci) Debug $CC $CXX 17 + sudo add-apt-repository ppa:ubuntu-toolchain-r/test + sudo apt update + + sudo apt install gcc-13 g++-13 + sudo update-alternatives --remove-all gcc || true + sudo update-alternatives --remove-all g++ || true + sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-13 10 --slave /usr/bin/g++ g++ /usr/bin/g++-13 + + wget https://apt.llvm.org/llvm.sh + chmod +x llvm.sh + sudo ./llvm.sh 17 clang llvm + sudo update-alternatives --remove-all clang || true + sudo update-alternatives --remove-all clang++ || true + sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-17 10 --slave /usr/bin/clang++ clang++ /usr/bin/clang++-17 + + - name: Install sonar-scanner and build-wrapper + uses: SonarSource/sonarcloud-github-c-cpp@v3 + - name: Cache conan packages id: cache-conan uses: actions/cache@v3 with: path: ~/.conan2/p - key: conan-cache-packages-sonarqube - - - name: Download and set up sonar-scanner - env: - SONAR_SCANNER_DOWNLOAD_URL: https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-${{ env.SONAR_SCANNER_VERSION }}-linux.zip - run: | - mkdir -p $HOME/.sonar - curl -sSLo $HOME/.sonar/sonar-scanner.zip ${{ env.SONAR_SCANNER_DOWNLOAD_URL }} - unzip -o $HOME/.sonar/sonar-scanner.zip -d $HOME/.sonar/ - echo "$HOME/.sonar/sonar-scanner-${{ env.SONAR_SCANNER_VERSION }}-linux/bin" >> $GITHUB_PATH - - - name: Download and set up build-wrapper - env: - BUILD_WRAPPER_DOWNLOAD_URL: ${{ env.SONAR_SERVER_URL }}/static/cpp/build-wrapper-linux-x86.zip - run: | - curl -sSLo $HOME/.sonar/build-wrapper-linux-x86.zip ${{ env.BUILD_WRAPPER_DOWNLOAD_URL }} - unzip -o $HOME/.sonar/build-wrapper-linux-x86.zip -d $HOME/.sonar/ - echo "$HOME/.sonar/build-wrapper-linux-x86" >> $GITHUB_PATH - + key: conan-cache-packages-${{ env.build_profile }} + - name: Create Build Environment - run: cmake -E make_directory ${{runner.workspace}}/build - + run: cmake -E make_directory ${{github.workspace}}/build + - name: Configure CMake shell: bash - working-directory: ${{runner.workspace}}/build env: - CC: clang - CXX: clang++ + PR: "${{github.workspace}}/.github/build_profiles/${{env.build_profile}}" run: | - conan install $GITHUB_WORKSPACE --output-folder=. --build=missing -pr ci -pr:b ci -s build_type=Debug + cmake -E make_directory "${{github.workspace}}/build" + conan install "${{github.workspace}}" --build=missing -pr $PR -pr:b $PR conan cache clean - cmake $GITHUB_WORKSPACE --preset conan-debug -DENABLE_LLVM_COV:BOOL=ON + cmake -S "${{github.workspace}}" --preset conan-${{ env.conan_preset }} -DENABLE_LLVM_COV:BOOL=ON + + - name: Build using Sonar wrapper + run: | + build-wrapper-linux-x86-64 --out-dir ${{ env.BUILD_WRAPPER_OUT_DIR }} cmake --build --preset conan-${{ env.conan_preset }} - - name: Run build-wrapper + - name: Template coverage run: | - build-wrapper-linux-x86-64 --out-dir ${{ env.BUILD_WRAPPER_OUT_DIR }} cmake --build ${{runner.workspace}}/build --clean-first --config Debug + wget https://github.com/petiaccja/TemplateCoverage/releases/download/v1.4.0/TemplateCoverage_Linux_x86_64.zip + unzip TemplateCoverage_Linux_x86_64.zip + chmod +x ./TemplateCoverage_Linux_x86_64/template-coverage + export RESOURCE_DIR=$(clang++ -print-resource-dir) + sed -i 's/-x c++//g' ${{github.workspace}}/build/${{env.conan_preset}}/compile_commands.json + python3 ./TemplateCoverage_Linux_x86_64/run_on_compile_commands.py -p ${{github.workspace}}/build/${{env.conan_preset}}/compile_commands.json ./TemplateCoverage_Linux_x86_64/template-coverage -- --format=lcov --out-file=${{github.workspace}}/template_coverage.info -extra-arg=-resource-dir=$RESOURCE_DIR - - name: Generate Test and Code Coverage - working-directory: ${{runner.workspace}}/build + - name: Test & code coverage + working-directory: ${{github.workspace}}/build/${{ env.conan_preset }}/bin shell: bash run: | - ./Bin/UnitTest --reporter junit --out ${{runner.workspace}}/build/tests.xml - llvm-profdata merge -sparse default.profraw -o coverage.profdata - llvm-cov show ./Bin/UnitTest -instr-profile=coverage.profdata > ${{runner.workspace}}/build/coverage.txt + ./UnitTest --reporter junit --out ${{github.workspace}}/tests.xml + llvm-profdata-17 merge -sparse default.profraw -o coverage.profdata + llvm-cov-17 export -format=lcov -object ./UnitTest -instr-profile=coverage.profdata > ${{github.workspace}}/test_coverage.info + + - name: Merge coverage reports + uses: danielpalme/ReportGenerator-GitHub-Action@5.2.4 + with: + reports: template_coverage.info;test_coverage.info + targetdir: coverage + reporttypes: SonarQube - name: Run sonar-scanner env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} run: | - sonar-scanner --define sonar.host.url="${{ env.SONAR_SERVER_URL }}" --define sonar.cfamily.build-wrapper-output="${{ env.BUILD_WRAPPER_OUT_DIR }}" \ No newline at end of file + sonar-scanner --define sonar.cfamily.compile-commands="${{ env.BUILD_WRAPPER_OUT_DIR }}/compile_commands.json" diff --git a/CMakeLists.txt b/CMakeLists.txt index b545f0d..50618d9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,8 +11,8 @@ enable_language(CXX) option(ENABLE_LLVM_COV "Adds compiler flags to generate LLVM source-based code coverage. Only works with Clang." OFF) option(ENABLE_LLVM_ADDRESS_SANITIZER "Adds compiler flags to generate LLVM source-based code coverage. Only works with Clang." OFF) option(ENABLE_LLVM_MEMORY_SANITIZER "Adds compiler flags to generate LLVM source-based code coverage. Only works with Clang." OFF) -option(BUILD_EXAMPLES "Include or exclude examples in the project." ON) -option(BUILD_BENCHMARKS "Include or exclude benchmarks in the project." ON) +option(DSPBB_BUILD_EXAMPLES "Include or exclude examples in the project." ON) +option(DSPBB_BUILD_BENCHMARKS "Include or exclude benchmarks in the project." ON) if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") if (ENABLE_LLVM_COV) @@ -52,17 +52,17 @@ find_package(Threads REQUIRED) link_libraries(Threads::Threads) # Output directories -set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/Bin) -set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/Bin) -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/Bin) +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) # Subdirectories add_subdirectory(include/dspbb) add_subdirectory(test) -if (${BUILD_EXAMPLES}) +if (${DSPBB_BUILD_EXAMPLES}) add_subdirectory(examples) endif() -if (${BUILD_BENCHMARKS}) +if (${DSPBB_BUILD_BENCHMARKS}) add_subdirectory(benchmark) endif() diff --git a/benchmark/Bench_ApplyFilter.cpp b/benchmark/Bench_ApplyFilter.cpp index 097449e..dbba10a 100644 --- a/benchmark/Bench_ApplyFilter.cpp +++ b/benchmark/Bench_ApplyFilter.cpp @@ -32,17 +32,17 @@ static std::uniform_real_distribution randomFloat(-1, 1); template class FirFilterFixture : public celero::TestFixture { public: - std::vector getExperimentValues() const override { - std::vector experimentValues; + std::vector> getExperimentValues() const override { + std::vector> experimentValues; for (size_t filterOrder = MinOrder; filterOrder <= MaxOrder; filterOrder *= 2) { size_t iterations = std::clamp(int64_t(complexityLimit / (filterOrder * signalSize)), int64_t(1), MaxIter); - experimentValues.emplace_back(int64_t(filterOrder), iterations); + experimentValues.emplace_back(std::make_shared(int64_t(filterOrder), iterations)); }; return experimentValues; } - void setUp(const ExperimentValue& experimentValue) override { - size_t filterOrder = experimentValue.Value; + void setUp(const ExperimentValue* experimentValue) override { + size_t filterOrder = experimentValue->Value; out = Signal(ConvolutionLength(signalSize, filterOrder + 1, CONV_FULL)); signal = Signal(signalSize); filter = Signal(filterOrder + 1); @@ -70,17 +70,17 @@ class FirFilterFixture : public celero::TestFixture { template class DesignFilterFixture : public celero::TestFixture { public: - std::vector getExperimentValues() const override { - std::vector experimentValues; + std::vector> getExperimentValues() const override { + std::vector> experimentValues; for (size_t filterOrder = 1; filterOrder <= MaxOrder; filterOrder += 1) { size_t iterations = 50 / filterOrder; - experimentValues.emplace_back(int64_t(filterOrder), iterations); + experimentValues.emplace_back(std::make_shared(int64_t(filterOrder), iterations)); }; return experimentValues; } - void setUp(const ExperimentValue& experimentValue) override { - size_t filterOrder = experimentValue.Value; + void setUp(const ExperimentValue* experimentValue) override { + size_t filterOrder = experimentValue->Value; out = Signal(signalSize); signal = Signal(signalSize); std::array pattern; diff --git a/benchmark/Bench_Convolution.cpp b/benchmark/Bench_Convolution.cpp index bed2f22..8ee1a76 100644 --- a/benchmark/Bench_Convolution.cpp +++ b/benchmark/Bench_Convolution.cpp @@ -49,20 +49,20 @@ static std::uniform_real_distribution randomFloat(-1, 1); template class ConvolutionFixture : public celero::TestFixture { public: - std::vector getExperimentValues() const override { - std::vector experimentValues; + std::vector> getExperimentValues() const override { + std::vector> experimentValues; for (auto& filterSize : filterSizes) { const auto complexity = filterSize * SignalSize; const auto iterations = complexityLimit / complexity; if (iterations > 0) { - experimentValues.emplace_back(int64_t(filterSize), std::max(int64_t(1), int64_t(iterations))); + experimentValues.emplace_back(std::make_shared(int64_t(filterSize), std::max(int64_t(1), int64_t(iterations)))); } }; return experimentValues; } - void setUp(const ExperimentValue& experimentValue) override { - size_t filterSize = experimentValue.Value; + void setUp(const ExperimentValue* experimentValue) override { + size_t filterSize = experimentValue->Value; out = std::vector(ConvolutionLength(SignalSize, filterSize, CONV_FULL)); signal = std::vector(SignalSize); filter = std::vector(filterSize); diff --git a/benchmark/Bench_VectorizedAlgorithms.cpp b/benchmark/Bench_VectorizedAlgorithms.cpp index 47d0cd2..aafef75 100644 --- a/benchmark/Bench_VectorizedAlgorithms.cpp +++ b/benchmark/Bench_VectorizedAlgorithms.cpp @@ -55,16 +55,16 @@ static std::uniform_real_distribution randomFloat(-1, 1); template class RandomArrayFixture : public celero::TestFixture { public: - std::vector getExperimentValues() const override { - std::vector experimentValues; + std::vector> getExperimentValues() const override { + std::vector> experimentValues; std::transform(reductionSizes.begin(), reductionSizes.end(), std::back_inserter(experimentValues), [](size_t size) { - return ExperimentValue{ int64_t(size), std::max(int64_t(1), int64_t(5 * 1048576 / size)) }; + return std::make_shared(int64_t(size), std::max(int64_t(1), int64_t(5 * 1048576 / size))); }); return experimentValues; } - void setUp(const ExperimentValue& experimentValue) override { - size_t arraySize = experimentValue.Value; + void setUp(const ExperimentValue* experimentValue) override { + size_t arraySize = experimentValue->Value; array = std::vector(arraySize); std::array pattern; for (auto& v : pattern) { @@ -83,16 +83,16 @@ class RandomArrayFixture : public celero::TestFixture { template class RandomArray2Fixture : public celero::TestFixture { public: - std::vector getExperimentValues() const override { - std::vector experimentValues; + std::vector> getExperimentValues() const override { + std::vector> experimentValues; std::transform(reductionSizes.begin(), reductionSizes.end(), std::back_inserter(experimentValues), [](size_t size) { - return ExperimentValue{ int64_t(size), std::max(int64_t(1), int64_t(5 * 1048576 / size)) }; + return std::make_shared(int64_t(size), std::max(int64_t(1), int64_t(5 * 1048576 / size))); }); return experimentValues; } - void setUp(const ExperimentValue& experimentValue) override { - size_t arraySize = experimentValue.Value; + void setUp(const ExperimentValue* experimentValue) override { + size_t arraySize = experimentValue->Value; array1 = std::vector(arraySize); array2 = std::vector(arraySize); std::array pattern; @@ -117,16 +117,16 @@ class RandomArray2Fixture : public celero::TestFixture { template class RandomArray3Fixture : public celero::TestFixture { public: - std::vector getExperimentValues() const override { - std::vector experimentValues; + std::vector> getExperimentValues() const override { + std::vector> experimentValues; std::transform(reductionSizes.begin(), reductionSizes.end(), std::back_inserter(experimentValues), [](size_t size) { - return ExperimentValue{ int64_t(size), std::max(int64_t(1), int64_t(5 * 1048576 / size)) }; + return std::make_shared(int64_t(size), std::max(int64_t(1), int64_t(5 * 1048576 / size))); }); return experimentValues; } - void setUp(const ExperimentValue& experimentValue) override { - size_t arraySize = experimentValue.Value; + void setUp(const ExperimentValue* experimentValue) override { + size_t arraySize = experimentValue->Value; array1 = std::vector(arraySize); array2 = std::vector(arraySize); array3 = std::vector(arraySize, T(0)); diff --git a/conanfile.txt b/conanfile.txt index 897ecf6..75b4816 100644 --- a/conanfile.txt +++ b/conanfile.txt @@ -1,10 +1,12 @@ [requires] -xsimd/11.1.0 +xsimd/13.0.0 eigen/3.4.0 -catch2/3.3.2 -celero/2.8.2 -libsndfile/1.2.0 +catch2/3.7.0 +celero/2.9.0 [generators] CMakeDeps -CMakeToolchain \ No newline at end of file +CMakeToolchain + +[layout] +cmake_layout \ No newline at end of file diff --git a/examples/04_FIR_Filtering.cpp b/examples/04_FIR_Filtering.cpp deleted file mode 100644 index 1ae90d8..0000000 --- a/examples/04_FIR_Filtering.cpp +++ /dev/null @@ -1,131 +0,0 @@ -//------------------------------------------------------------------------------ -// 04. FIR filtering -// -// This demo implements a simple bass/mid/treble equalizer using FIR filters. -// You can adjust the three parameters at you desire, and listen to how they -// make music sound. -//------------------------------------------------------------------------------ - -#include "Tools/LoadSound.hpp" -#include "Tools/PlaySound.hpp" - -#include "dspbb/Filtering/MeasureFilter.hpp" -#include - -#include - -using namespace dspbb; - -// The transition bands determine the frequency regions where the bass and treble -// adjustments kick in. Bass can be considered to be below 200 Hz, while -// treble can be anything above 5000 Hz. -constexpr std::pair transitionBass{ 160.0f, 320.f }; // Bass below 160 Hz. -constexpr std::pair transitionTreble{ 5000.0f, 6500.f }; // Treble above 6000 Hz. - -// A function that is zero for x<0 and 1 for x>1, with a smooth transition in between. -float Smoothstep(float x) { - x = std::clamp(x, 0.0f, 1.0f); - return 3 * x * x - 2 * x * x * x; -} - -// Returns the amplification of the equalizing filter at a specific frequency, given the -// amplification levels for bass, mid and treble. -float EqualizedResponse(float frequency, float bass, float mid, float treble) { - const float bassCurve = Smoothstep((transitionBass.second - frequency) / (transitionBass.second - transitionBass.first)); - const float midCurve = Smoothstep((transitionTreble.second - frequency) / (transitionTreble.second - transitionTreble.first)) - + Smoothstep((frequency - transitionBass.first) / (transitionBass.second - transitionBass.first)) - - 1.0f; - const float trebleCurve = Smoothstep((frequency - transitionTreble.first) / (transitionTreble.second - transitionTreble.first)); - return bass * bassCurve + mid * midCurve + treble * trebleCurve; -} - -class Equalizer { -public: - Equalizer(size_t filterSize, uint64_t sampleRate) - : m_filter(filterSize), - m_leftState(filterSize - 1), - m_rightState(filterSize - 1), - m_sampleRate(sampleRate) {} - - // Generates a new FIR filter to apply the equalization as given by the bass/mid/treble amplification levels. - void SetLevels(float bass, float mid, float treble) { - const auto normalizedResponse = [&](float nf) { return EqualizedResponse(nf * float(m_sampleRate) / 2.0f, bass, mid, treble); }; - // We will use a least squares FIR filter with no weighting and default grid size. - DesignFilter(m_filter, Fir.Arbitrary.LeastSquares.Response(normalizedResponse)); - } - - void Filter(SignalView leftIn, SignalView rightIn, SignalView leftOut, SignalView rightOut) { - // The states here work the very same way as they do for the IIR filters (go check out the example). - // We could have used plain convolution, but overlap-add seemed faster in debug mode. - dspbb::Filter(leftOut, leftIn, m_filter, m_leftState, FILTER_OLA, 2048); - dspbb::Filter(rightOut, rightIn, m_filter, m_rightState, FILTER_OLA, 2048); - } - - void Reset() { - // Filter state can be reset by filling it with zeros, just like IIR filters. - std::fill(m_leftState.begin(), m_leftState.end(), 0.0f); - std::fill(m_rightState.begin(), m_rightState.end(), 0.0f); - } - - SignalView GetFilter() const { return AsConstView(m_filter); } - -private: - Signal m_filter; - Signal m_leftState; - Signal m_rightState; - const uint64_t m_sampleRate; -}; - -// A simple loop that let's you type the EQ parameters: bass, mid and treble. -// Keep in mind the values are not in decibels, but in ratios. You should not type -// values larger than 1, as those will just cause clipping in the output. -// Suppressing the mid and high frequencies only might also cause clipping, you may want to -// reduce bass just a bit too to avoid that. -int main() { - try { - // Feel free to replace this sample with whatever clip you like. - const auto [left, right, sampleRate] = LoadStereoSound(DSPBB_EXAMPLES_DATA "sample.ogg"); - - std::cout << "Welcome to the FIR filtering demo.\n" - << "Type three space-separated numbers for the bass/mid/treble levels.\n" - << "The values should be between 0 and 1.\n" - << "Don't forget to turn up the volume!\n" - << "You can quit by typing 'exit'.\n" - << std::endl; - - while (true) { - std::cout << "EQ parameters: "; - std::string userInput; - std::getline(std::cin, userInput); - if (userInput == "exit") { - break; - } - - std::stringstream ss(userInput); - float bass = 1.0f; - float mid = 1.0f; - float treble = 1.0f; - ss >> bass; - ss >> mid; - ss >> treble; - - Equalizer equalizer{ 513, sampleRate }; - equalizer.SetLevels(bass, mid, treble); - - size_t currentSample = 0; - PlayStereo(sampleRate, [left = AsView(left), right = AsView(right), ¤tSample, &equalizer](SignalView leftOut, SignalView rightOut) -> size_t { - assert(leftOut.size() == rightOut.size()); - const size_t validSize = std::min(left.size() - currentSample, leftOut.size()); - equalizer.Filter(left.subsignal(currentSample, validSize), - right.subsignal(currentSample, validSize), - leftOut.subsignal(0, validSize), - rightOut.subsignal(0, validSize)); - currentSample += validSize; - return validSize; - }); - } - } - catch (std::exception& ex) { - std::cout << ex.what() << std::endl; - } -} \ No newline at end of file diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 0aef36a..37483b4 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -1,7 +1,6 @@ add_executable(01_Basics "01_Basics.cpp") add_executable(02_FFT "02_FFT.cpp") add_executable(03_IIR_Filtering "03_IIR_Filtering.cpp" "RtAudio/RtAudio.cpp" "Tools/PlaySound.cpp") -add_executable(04_FIR_Filtering "04_FIR_Filtering.cpp" "RtAudio/RtAudio.cpp" "Tools/LoadSound.cpp" "Tools/PlaySound.cpp") list(APPEND CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR}/examples) list(APPEND CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR}/examples) @@ -10,19 +9,14 @@ if (${CMAKE_CXX_COMPILER} MATCHES "MSVC") target_compile_options(01_Basics PRIVATE "/bigobj") target_compile_options(02_FFT PRIVATE "/bigobj") target_compile_options(03_IIR_Filtering PRIVATE "/bigobj") - target_compile_options(04_FIR_Filtering PRIVATE "/bigobj") endif() -find_package(SndFile REQUIRED) - target_link_libraries(01_Basics DSPBB) target_link_libraries(02_FFT DSPBB) target_link_libraries(03_IIR_Filtering DSPBB) -target_link_libraries(04_FIR_Filtering DSPBB SndFile::sndfile) set(DSPBB_EXAMPLES_DATA "\"${CMAKE_CURRENT_SOURCE_DIR}/data/\"") target_compile_definitions(02_FFT PRIVATE "-DDSPBB_EXAMPLES_DATA=${DSPBB_EXAMPLES_DATA}") -target_compile_definitions(04_FIR_Filtering PRIVATE "-DDSPBB_EXAMPLES_DATA=${DSPBB_EXAMPLES_DATA}") if (${WIN32}) set(RTAUDIO_API "__WINDOWS_WASAPI__") @@ -41,5 +35,4 @@ else() set(RTAUDIO_API "__RTAUDIO_DUMMY__") endif() -target_compile_definitions(03_IIR_Filtering PRIVATE "-D${RTAUDIO_API}=1") -target_compile_definitions(04_FIR_Filtering PRIVATE "-D${RTAUDIO_API}=1") \ No newline at end of file +target_compile_definitions(03_IIR_Filtering PRIVATE "-D${RTAUDIO_API}=1") \ No newline at end of file diff --git a/examples/data/SN_m_tot_V2.0.txt b/examples/data/SN_m_tot_V2.0.txt deleted file mode 100644 index 211de49..0000000 --- a/examples/data/SN_m_tot_V2.0.txt +++ /dev/null @@ -1,3275 +0,0 @@ - 96.7 - 104.3 - 116.7 - 92.8 - 141.7 - 139.2 - 158.0 - 110.5 - 126.5 - 125.8 - 264.3 - 142.0 - 122.2 - 126.5 - 148.7 - 147.2 - 150.0 - 166.7 - 142.3 - 171.7 - 152.0 - 109.5 - 105.5 - 125.7 - 116.7 - 72.5 - 75.5 - 94.0 - 101.2 - 84.5 - 110.5 - 99.7 - 39.2 - 38.7 - 47.5 - 73.3 - 58.3 - 83.3 - 118.3 - 98.8 - 99.5 - 66.0 - 130.7 - 48.8 - 45.2 - 77.7 - 62.7 - 66.7 - 73.3 - 53.3 - 76.2 - 63.3 - 60.0 - 52.8 - 36.7 - 65.0 - 46.7 - 41.7 - 33.3 - 11.2 - 0.0 - 5.0 - 2.8 - 22.8 - 34.5 - 44.5 - 31.3 - 20.5 - 13.7 - 40.2 - 22.0 - 7.0 - 17.0 - 18.7 - 11.3 - 10.8 - 0.0 - 0.0 - 14.3 - 5.3 - 29.7 - 39.5 - 11.3 - 33.3 - 20.8 - 11.8 - 9.0 - 15.7 - 20.8 - 21.5 - 6.0 - 10.7 - 19.7 - 23.8 - 28.3 - 15.7 - 23.5 - 35.3 - 43.7 - 50.0 - 63.5 - 21.3 - 41.7 - 85.5 - 66.2 - 54.2 - 107.8 - 55.8 - 62.7 - 86.7 - 81.7 - 120.5 - 77.3 - 75.0 - 73.3 - 64.5 - 104.2 - 62.8 - 71.7 - 71.7 - 80.5 - 73.3 - 78.0 - 78.3 - 81.7 - 83.3 - 85.0 - 118.8 - 128.7 - 99.5 - 77.2 - 95.0 - 112.2 - 99.2 - 124.5 - 97.2 - 120.0 - 80.5 - 110.0 - 126.0 - 102.2 - 84.3 - 99.5 - 101.7 - 116.7 - 151.7 - 134.5 - 119.5 - 178.7 - 165.5 - 156.8 - 151.8 - 167.8 - 147.8 - 149.5 - 76.7 - 73.0 - 121.3 - 76.2 - 100.3 - 66.5 - 128.5 - 56.3 - 112.8 - 114.2 - 115.5 - 129.7 - 128.7 - 94.2 - 53.2 - 57.0 - 54.8 - 54.5 - 59.7 - 90.3 - 44.2 - 113.5 - 77.2 - 101.5 - 102.3 - 99.5 - 99.5 - 67.0 - 57.3 - 73.8 - 50.0 - 50.0 - 50.0 - 47.0 - 46.7 - 43.3 - 42.8 - 40.0 - 43.3 - 41.7 - 36.7 - 33.7 - 33.3 - 45.0 - 49.5 - 26.7 - 23.3 - 23.3 - 21.7 - 20.0 - 18.3 - 61.0 - 10.0 - 44.7 - 5.0 - 5.5 - 6.7 - 7.2 - 8.3 - 9.5 - 32.0 - 45.7 - 50.0 - 71.7 - 54.8 - 49.7 - 55.5 - 36.5 - 68.0 - 71.2 - 73.5 - 91.2 - 88.8 - 89.2 - 110.2 - 77.2 - 71.2 - 129.5 - 129.0 - 87.7 - 111.3 - 124.7 - 129.7 - 151.0 - 186.3 - 123.2 - 107.0 - 107.2 - 161.2 - 122.7 - 157.3 - 197.7 - 200.5 - 248.0 - 263.7 - 246.8 - 186.7 - 173.3 - 237.5 - 133.5 - 85.0 - 116.8 - 138.8 - 183.0 - 210.5 - 174.0 - 172.7 - 220.3 - 170.5 - 60.0 - 77.0 - 77.8 - 108.2 - 254.5 - 199.2 - 112.8 - 97.5 - 169.0 - 150.0 - 166.2 - 159.5 - 168.2 - 151.3 - 51.8 - 153.7 - 63.3 - 95.0 - 128.8 - 93.7 - 84.2 - 131.0 - 102.2 - 106.7 - 91.0 - 48.3 - 85.3 - 54.8 - 68.5 - 47.3 - 46.2 - 21.2 - 48.8 - 43.8 - 68.2 - 72.0 - 78.0 - 109.0 - 92.8 - 73.0 - 85.5 - 47.5 - 29.2 - 11.0 - 13.2 - 23.3 - 29.5 - 20.3 - 7.3 - 0.0 - 19.3 - 18.7 - 6.5 - 20.5 - 1.7 - 13.2 - 5.3 - 9.3 - 25.2 - 13.2 - 36.2 - 19.3 - 10.5 - 36.3 - 18.7 - 31.7 - 1.7 - 40.3 - 26.7 - 50.0 - 58.3 - 66.7 - 75.0 - 60.8 - 65.0 - 159.2 - 133.8 - 134.5 - 158.3 - 186.7 - 193.7 - 177.5 - 243.3 - 262.2 - 295.5 - 182.2 - 223.3 - 241.7 - 398.2 - 286.0 - 255.0 - 233.3 - 286.2 - 260.5 - 250.5 - 175.0 - 191.2 - 276.2 - 196.7 - 241.7 - 233.3 - 189.5 - 238.3 - 186.7 - 185.0 - 206.7 - 190.0 - 183.3 - 116.7 - 163.3 - 163.3 - 158.3 - 178.7 - 146.7 - 143.3 - 143.3 - 156.2 - 128.3 - 100.0 - 97.8 - 164.5 - 124.5 - 88.3 - 113.8 - 174.5 - 162.8 - 122.5 - 110.0 - 85.0 - 45.5 - 111.7 - 58.7 - 90.0 - 62.5 - 61.7 - 68.3 - 90.5 - 63.3 - 61.7 - 73.3 - 56.7 - 38.7 - 52.5 - 50.0 - 46.7 - 64.5 - 44.5 - 47.2 - 38.3 - 42.0 - 53.7 - 33.3 - 30.0 - 13.3 - 25.0 - 17.5 - 21.7 - 13.3 - 18.3 - 16.7 - 10.0 - 15.0 - 10.0 - 16.7 - 16.7 - 13.3 - 28.3 - 23.3 - 10.8 - 13.3 - 15.0 - 26.2 - 34.5 - 43.8 - 60.5 - 33.3 - 53.3 - 78.7 - 67.0 - 45.5 - 62.0 - 79.3 - 79.5 - 142.3 - 153.8 - 98.3 - 138.3 - 149.5 - 185.8 - 187.2 - 193.3 - 187.8 - 224.5 - 176.7 - 145.7 - 212.0 - 224.7 - 165.3 - 213.3 - 228.7 - 262.2 - 261.7 - 235.8 - 290.0 - 230.0 - 215.3 - 238.8 - 180.8 - 188.3 - 257.0 - 235.8 - 226.7 - 235.0 - 236.7 - 157.8 - 215.8 - 190.0 - 208.8 - 200.0 - 205.5 - 205.8 - 200.0 - 195.0 - 171.7 - 186.7 - 149.5 - 223.3 - 225.8 - 171.7 - 212.5 - 160.5 - 156.7 - 155.0 - 151.7 - 115.5 - 145.0 - 128.8 - 140.5 - 136.7 - 123.3 - 121.2 - 103.3 - 123.3 - 128.7 - 122.8 - 107.0 - 118.3 - 71.7 - 110.8 - 102.8 - 111.7 - 110.0 - 96.7 - 106.7 - 105.0 - 126.2 - 103.3 - 101.7 - 76.3 - 100.0 - 98.3 - 98.3 - 95.0 - 93.3 - 93.3 - 91.7 - 92.5 - 88.3 - 87.2 - 85.0 - 83.3 - 48.8 - 40.0 - 78.3 - 73.3 - 76.2 - 75.0 - 73.3 - 63.3 - 47.3 - 92.8 - 69.2 - 68.3 - 66.7 - 18.5 - 47.5 - 112.3 - 85.7 - 35.7 - 66.5 - 21.0 - 31.0 - 51.7 - 28.5 - 21.5 - 42.8 - 22.5 - 32.5 - 41.7 - 30.0 - 36.7 - 39.7 - 26.2 - 52.8 - 35.0 - 11.2 - 44.8 - 2.5 - 30.7 - 18.3 - 14.0 - 8.5 - 24.0 - 7.0 - 6.7 - 6.7 - 12.2 - 18.5 - 7.2 - 10.0 - 9.5 - 11.5 - 9.7 - 5.0 - 3.3 - 6.7 - 20.7 - 1.8 - 0.0 - 0.0 - 0.0 - 5.0 - 4.0 - 2.5 - 20.8 - 16.5 - 2.7 - 21.0 - 36.2 - 14.0 - 13.7 - 17.7 - 3.5 - 0.0 - 0.0 - 7.7 - 4.5 - 14.3 - 11.5 - 15.5 - 23.2 - 0.0 - 8.3 - 39.5 - 35.0 - 32.5 - 19.2 - 20.5 - 17.5 - 66.8 - 45.0 - 48.3 - 50.0 - 51.7 - 53.3 - 52.0 - 58.3 - 64.5 - 55.8 - 54.3 - 66.3 - 80.3 - 79.7 - 78.3 - 68.0 - 70.0 - 73.3 - 76.7 - 80.0 - 83.3 - 86.3 - 64.2 - 57.5 - 83.3 - 83.3 - 84.7 - 49.2 - 41.7 - 73.8 - 60.0 - 80.5 - 56.8 - 75.5 - 90.5 - 85.0 - 80.0 - 75.5 - 80.5 - 80.0 - 84.3 - 55.7 - 58.0 - 49.7 - 71.8 - 88.3 - 103.8 - 101.7 - 100.0 - 101.7 - 73.5 - 85.7 - 62.5 - 65.0 - 67.5 - 62.7 - 71.2 - 74.0 - 49.0 - 68.3 - 63.8 - 65.0 - 49.3 - 54.5 - 46.2 - 44.0 - 42.7 - 50.0 - 43.8 - 40.0 - 45.0 - 41.7 - 40.0 - 20.0 - 20.3 - 16.0 - 39.7 - 16.7 - 20.0 - 21.2 - 20.0 - 9.5 - 13.3 - 4.3 - 0.0 - 0.0 - 7.5 - 0.0 - 20.5 - 22.5 - 22.5 - 11.2 - 13.3 - 19.5 - 7.8 - 17.5 - 20.5 - 12.0 - 15.3 - 1.5 - 4.2 - 3.3 - 12.8 - 0.5 - 0.3 - 0.7 - 0.0 - 0.0 - 0.0 - 0.0 - 0.0 - 0.0 - 0.0 - 0.0 - 0.0 - 0.0 - 0.0 - 0.0 - 0.0 - 0.0 - 0.0 - 0.0 - 0.0 - 0.0 - 0.0 - 0.0 - 0.0 - 11.0 - 0.0 - 4.0 - 10.2 - 1.3 - 1.8 - 18.8 - 3.2 - 1.2 - 0.0 - 1.7 - 2.2 - 0.8 - 26.0 - 8.7 - 6.5 - 13.2 - 16.8 - 0.0 - 17.2 - 3.2 - 27.7 - 9.2 - 18.7 - 30.5 - 14.0 - 25.5 - 46.3 - 27.8 - 23.8 - 37.0 - 20.0 - 9.5 - 39.7 - 9.7 - 24.8 - 30.8 - 3.8 - 13.5 - 32.2 - 24.2 - 33.5 - 32.0 - 53.7 - 43.7 - 52.7 - 16.3 - 93.2 - 59.2 - 78.7 - 52.5 - 55.8 - 62.0 - 108.3 - 43.8 - 114.7 - 122.8 - 98.0 - 73.8 - 72.7 - 64.7 - 38.7 - 79.7 - 94.0 - 63.5 - 49.8 - 60.7 - 96.5 - 160.3 - 44.0 - 35.3 - 66.7 - 83.3 - 75.0 - 61.2 - 42.7 - 48.2 - 47.3 - 58.1 - 37.4 - 42.4 - 57.5 - 88.5 - 60.8 - 46.8 - 52.6 - 43.4 - 52.8 - 18.3 - 43.0 - 54.7 - 34.6 - 6.3 - 33.7 - 32.6 - 58.3 - 52.5 - 43.5 - 24.8 - 45.9 - 41.8 - 50.9 - 32.0 - 44.4 - 7.5 - 32.3 - 48.9 - 17.9 - 34.1 - 43.1 - 8.6 - 14.9 - 13.2 - 15.1 - 36.0 - 7.0 - 9.5 - 15.2 - 2.8 - 3.0 - 4.3 - 8.0 - 7.3 - 31.4 - 7.3 - 0.4 - 0.0 - 1.5 - 26.9 - 21.7 - 2.4 - 9.3 - 13.2 - 3.4 - 0.0 - 0.6 - 0.0 - 0.0 - 0.0 - 0.0 - 1.0 - 0.0 - 0.0 - 0.0 - 0.8 - 0.0 - 0.0 - 0.0 - 0.0 - 34.0 - 36.0 - 18.0 - 0.0 - 32.3 - 4.6 - 0.0 - 0.0 - 2.3 - 34.3 - 42.0 - 0.0 - 1.4 - 8.4 - 25.9 - 37.4 - 6.2 - 25.8 - 25.6 - 51.5 - 42.8 - 26.2 - 26.0 - 19.6 - 36.7 - 29.4 - 30.2 - 61.3 - 40.0 - 53.9 - 61.7 - 87.5 - 66.0 - 31.6 - 84.4 - 65.8 - 113.6 - 57.7 - 79.0 - 96.3 - 76.7 - 93.8 - 94.4 - 70.4 - 89.4 - 82.6 - 93.5 - 80.4 - 76.8 - 88.0 - 107.3 - 108.5 - 101.9 - 148.6 - 163.4 - 90.4 - 127.3 - 83.9 - 91.1 - 95.0 - 78.1 - 71.6 - 82.3 - 120.6 - 158.4 - 112.3 - 123.2 - 151.5 - 129.3 - 88.0 - 95.3 - 112.7 - 94.1 - 87.0 - 120.1 - 141.0 - 177.3 - 110.5 - 108.4 - 73.2 - 84.6 - 103.4 - 140.6 - 135.4 - 136.8 - 79.0 - 83.6 - 155.8 - 90.9 - 63.4 - 55.6 - 75.4 - 91.6 - 63.2 - 77.1 - 72.5 - 48.3 - 51.5 - 92.6 - 91.9 - 44.8 - 68.9 - 44.5 - 23.3 - 14.8 - 13.7 - 35.2 - 23.8 - 45.8 - 18.7 - 24.9 - 19.6 - 4.6 - 21.5 - 1.7 - 11.6 - 9.5 - 19.3 - 12.5 - 9.8 - 16.6 - 8.2 - 30.1 - 6.5 - 2.4 - 14.8 - 13.1 - 14.4 - 6.6 - 19.2 - 41.3 - 50.9 - 57.5 - 12.4 - 40.7 - 32.7 - 102.4 - 72.6 - 55.2 - 99.6 - 98.5 - 168.0 - 158.6 - 166.7 - 129.3 - 147.6 - 179.4 - 163.7 - 238.0 - 185.7 - 207.9 - 194.6 - 179.6 - 158.5 - 228.9 - 201.5 - 343.8 - 313.4 - 292.6 - 224.3 - 230.3 - 186.1 - 263.4 - 271.2 - 223.5 - 160.4 - 206.2 - 178.4 - 216.1 - 241.5 - 141.3 - 234.5 - 211.1 - 229.4 - 157.6 - 180.4 - 131.3 - 122.7 - 151.5 - 129.2 - 132.9 - 175.9 - 170.8 - 129.5 - 102.9 - 89.6 - 91.2 - 141.3 - 218.8 - 221.1 - 151.5 - 114.7 - 106.2 - 135.4 - 146.1 - 112.9 - 109.8 - 115.4 - 80.9 - 101.0 - 96.4 - 123.3 - 91.7 - 90.4 - 89.5 - 40.1 - 49.9 - 49.6 - 66.9 - 112.4 - 92.8 - 51.4 - 65.4 - 60.9 - 47.4 - 32.9 - 64.8 - 34.0 - 36.8 - 36.2 - 44.9 - 41.4 - 34.2 - 21.0 - 44.4 - 30.6 - 63.5 - 67.5 - 29.3 - 22.2 - 5.9 - 13.9 - 15.8 - 35.1 - 17.6 - 15.9 - 19.6 - 6.9 - 8.9 - 31.7 - 21.2 - 15.7 - 24.5 - 22.5 - 34.6 - 19.2 - 6.2 - 35.2 - 39.7 - 11.6 - 35.9 - 17.9 - 36.0 - 42.8 - 72.8 - 72.1 - 95.0 - 79.7 - 51.8 - 51.0 - 53.9 - 49.3 - 67.8 - 65.7 - 99.5 - 64.6 - 84.9 - 106.5 - 115.5 - 99.9 - 108.4 - 77.5 - 91.3 - 178.6 - 93.4 - 100.6 - 109.1 - 104.4 - 74.9 - 143.0 - 74.6 - 125.7 - 142.2 - 87.1 - 234.3 - 268.2 - 300.6 - 231.5 - 182.6 - 265.2 - 186.4 - 181.2 - 178.6 - 170.5 - 214.9 - 232.0 - 220.9 - 167.3 - 220.6 - 191.0 - 265.8 - 298.3 - 250.3 - 182.7 - 194.7 - 153.2 - 154.2 - 148.2 - 128.6 - 178.0 - 135.7 - 188.2 - 184.3 - 148.2 - 169.8 - 156.8 - 83.8 - 117.0 - 133.0 - 74.3 - 117.0 - 163.7 - 134.9 - 104.1 - 115.9 - 143.5 - 200.1 - 122.8 - 107.3 - 118.9 - 120.0 - 68.6 - 109.0 - 128.9 - 118.7 - 96.8 - 135.5 - 129.9 - 126.2 - 116.2 - 124.3 - 104.3 - 89.0 - 80.0 - 75.3 - 71.2 - 127.9 - 103.1 - 86.1 - 77.9 - 81.5 - 71.6 - 90.4 - 65.9 - 76.0 - 87.2 - 95.8 - 63.7 - 80.5 - 54.7 - 44.5 - 29.3 - 38.0 - 39.4 - 50.3 - 45.6 - 40.1 - 35.5 - 30.1 - 42.6 - 24.1 - 53.5 - 41.1 - 23.4 - 21.6 - 33.0 - 8.4 - 17.3 - 10.0 - 0.7 - 5.9 - 0.0 - 18.3 - 7.9 - 5.8 - 1.0 - 9.3 - 0.7 - 12.4 - 0.0 - 9.8 - 8.8 - 11.3 - 8.4 - 8.5 - 14.7 - 13.7 - 26.0 - 14.2 - 10.0 - 21.1 - 54.2 - 30.5 - 42.2 - 32.0 - 80.6 - 77.1 - 59.6 - 70.7 - 74.2 - 66.3 - 109.2 - 72.8 - 78.6 - 84.5 - 107.7 - 104.9 - 152.2 - 173.2 - 98.6 - 127.0 - 159.0 - 166.4 - 171.5 - 162.9 - 172.8 - 165.2 - 180.7 - 203.0 - 200.9 - 217.8 - 184.6 - 153.9 - 156.6 - 167.9 - 188.0 - 135.7 - 203.5 - 206.3 - 221.9 - 190.5 - 175.2 - 171.1 - 186.0 - 181.7 - 118.5 - 147.5 - 192.0 - 187.1 - 107.8 - 167.5 - 148.2 - 156.7 - 151.9 - 127.7 - 102.0 - 152.8 - 119.9 - 122.4 - 82.7 - 102.1 - 122.4 - 159.7 - 139.5 - 118.7 - 126.4 - 79.8 - 96.0 - 77.6 - 91.8 - 107.7 - 126.0 - 77.1 - 102.1 - 77.6 - 62.0 - 91.3 - 41.7 - 75.7 - 71.6 - 78.1 - 109.7 - 89.5 - 125.9 - 68.1 - 77.1 - 109.9 - 103.8 - 104.1 - 54.2 - 64.4 - 109.3 - 54.3 - 92.5 - 74.6 - 75.0 - 55.9 - 65.6 - 63.8 - 50.8 - 71.8 - 41.0 - 32.5 - 46.7 - 24.3 - 60.0 - 72.9 - 46.6 - 33.5 - 24.6 - 31.4 - 17.6 - 24.2 - 13.9 - 26.8 - 17.2 - 2.9 - 0.0 - 1.4 - 17.4 - 9.7 - 5.5 - 2.8 - 9.5 - 9.1 - 18.7 - 25.5 - 18.1 - 47.9 - 25.9 - 26.3 - 44.0 - 61.1 - 44.5 - 51.8 - 48.3 - 57.3 - 78.7 - 102.8 - 98.7 - 112.8 - 101.6 - 99.9 - 88.0 - 68.4 - 173.4 - 180.7 - 98.8 - 132.7 - 134.5 - 99.0 - 130.2 - 174.1 - 129.0 - 191.7 - 262.7 - 266.9 - 293.6 - 226.3 - 220.9 - 256.5 - 226.8 - 244.3 - 246.0 - 216.7 - 147.2 - 209.0 - 238.7 - 270.9 - 242.6 - 152.9 - 171.8 - 183.7 - 133.9 - 148.5 - 175.7 - 150.8 - 132.7 - 200.3 - 147.5 - 170.4 - 179.5 - 183.3 - 176.0 - 155.0 - 191.1 - 171.2 - 186.8 - 139.9 - 144.6 - 178.4 - 164.0 - 127.1 - 80.0 - 74.8 - 111.7 - 113.8 - 78.7 - 78.6 - 92.5 - 82.0 - 101.4 - 107.1 - 77.5 - 53.5 - 74.6 - 63.8 - 113.2 - 102.3 - 46.8 - 57.4 - 48.2 - 48.8 - 24.4 - 35.9 - 56.4 - 48.6 - 19.2 - 39.9 - 20.9 - 24.4 - 4.0 - 21.3 - 29.6 - 16.5 - 23.9 - 25.1 - 51.1 - 3.9 - 8.5 - 2.7 - 25.5 - 14.8 - 16.6 - 23.9 - 16.6 - 13.6 - 40.6 - 14.5 - 19.9 - 26.3 - 36.1 - 23.6 - 10.0 - 10.5 - 28.1 - 11.2 - 23.6 - 3.5 - 5.5 - 11.0 - 13.1 - 0.2 - 9.9 - 10.7 - 0.2 - 0.0 - 8.8 - 1.9 - 6.8 - 0.9 - 1.6 - 0.9 - 0.0 - 10.4 - 4.0 - 8.0 - 12.6 - 17.9 - 10.1 - 20.4 - 21.9 - 12.2 - 40.1 - 45.4 - 32.1 - 32.4 - 39.1 - 56.9 - 36.5 - 80.3 - 110.1 - 71.7 - 51.1 - 49.4 - 60.6 - 88.6 - 85.8 - 86.1 - 72.5 - 100.8 - 128.2 - 97.3 - 88.6 - 107.3 - 91.5 - 78.8 - 75.0 - 115.9 - 111.5 - 159.6 - 106.9 - 75.4 - 75.7 - 67.5 - 96.1 - 98.6 - 140.6 - 69.7 - 101.0 - 78.2 - 71.3 - 136.8 - 52.5 - 127.2 - 134.4 - 76.6 - 87.8 - 139.6 - 140.8 - 126.5 - 152.6 - 144.8 - 145.8 - 126.9 - 110.9 - 85.3 - 88.5 - 93.1 - 103.1 - 79.6 - 60.9 - 78.6 - 71.4 - 119.7 - 82.9 - 91.7 - 121.6 - 139.5 - 110.9 - 83.5 - 66.0 - 64.5 - 51.6 - 36.3 - 49.8 - 43.2 - 95.5 - 72.9 - 51.2 - 45.3 - 50.4 - 28.1 - 35.7 - 14.4 - 0.6 - 21.7 - 17.0 - 22.0 - 7.1 - 11.6 - 33.4 - 26.1 - 38.9 - 35.7 - 12.4 - 11.0 - 11.5 - 34.5 - 21.2 - 11.8 - 13.1 - 8.5 - 11.7 - 11.8 - 5.0 - 4.6 - 14.6 - 3.4 - 17.9 - 11.1 - 1.3 - 14.2 - 11.1 - 7.3 - 4.0 - 10.8 - 15.8 - 34.3 - 10.9 - 3.4 - 0.3 - 11.2 - 8.8 - 1.1 - 8.5 - 2.7 - 7.9 - 2.2 - 19.3 - 14.2 - 28.6 - 18.6 - 15.9 - 13.1 - 22.5 - 36.9 - 17.2 - 34.2 - 68.5 - 80.4 - 98.0 - 55.1 - 89.7 - 86.0 - 69.8 - 54.3 - 115.2 - 126.1 - 83.3 - 116.0 - 132.7 - 127.3 - 127.6 - 169.0 - 104.7 - 117.5 - 108.9 - 131.0 - 125.0 - 121.6 - 109.5 - 146.8 - 141.3 - 149.8 - 147.6 - 215.4 - 129.9 - 133.3 - 125.2 - 156.4 - 138.6 - 141.0 - 87.1 - 136.0 - 168.7 - 164.8 - 176.7 - 117.1 - 110.0 - 125.7 - 94.3 - 100.1 - 105.4 - 112.0 - 101.6 - 128.2 - 112.5 - 119.1 - 79.7 - 114.9 - 96.1 - 113.2 - 78.6 - 117.9 - 48.4 - 95.7 - 86.5 - 73.0 - 46.1 - 81.7 - 75.2 - 45.4 - 102.2 - 47.9 - 63.3 - 71.0 - 67.6 - 49.0 - 48.7 - 51.7 - 33.3 - 18.9 - 46.1 - 36.4 - 80.4 - 23.9 - 14.0 - 55.5 - 50.4 - 60.7 - 63.9 - 24.2 - 43.0 - 37.1 - 15.0 - 52.3 - 58.1 - 57.1 - 51.6 - 21.1 - 32.4 - 15.3 - 30.3 - 23.6 - 12.9 - 34.1 - 22.5 - 4.9 - 14.0 - 21.7 - 13.0 - 17.6 - 15.7 - 22.8 - 14.4 - 26.8 - 25.3 - 20.1 - 13.9 - 7.1 - 13.9 - 21.6 - 7.5 - 0.5 - 0.4 - 4.0 - 7.4 - 0.0 - 17.0 - 9.7 - 1.2 - 1.7 - 0.9 - 6.3 - 6.4 - 0.0 - 9.3 - 0.0 - 20.7 - 0.0 - 4.7 - 2.4 - 1.5 - 3.8 - 12.6 - 27.2 - 17.2 - 1.8 - 13.9 - 28.4 - 22.5 - 43.5 - 24.3 - 27.2 - 46.4 - 48.0 - 18.5 - 64.8 - 74.2 - 76.2 - 52.6 - 40.8 - 61.9 - 71.6 - 65.7 - 69.8 - 84.3 - 97.1 - 50.2 - 90.4 - 63.4 - 91.1 - 91.2 - 143.0 - 94.3 - 65.5 - 79.9 - 81.6 - 121.6 - 98.1 - 91.8 - 131.2 - 178.7 - 92.5 - 75.8 - 52.3 - 107.4 - 92.2 - 96.2 - 105.3 - 172.7 - 79.6 - 93.5 - 29.7 - 64.8 - 108.0 - 127.4 - 180.3 - 101.1 - 87.6 - 71.4 - 67.2 - 82.9 - 90.5 - 141.7 - 109.1 - 102.5 - 78.9 - 65.4 - 56.6 - 47.9 - 96.1 - 68.0 - 80.2 - 65.8 - 150.9 - 144.9 - 53.9 - 75.9 - 65.9 - 94.6 - 77.6 - 110.5 - 53.7 - 60.0 - 37.8 - 59.6 - 38.5 - 64.7 - 97.4 - 93.0 - 90.2 - 44.0 - 52.5 - 35.7 - 14.1 - 36.9 - 20.5 - 23.5 - 19.3 - 43.7 - 63.9 - 8.3 - 9.6 - 5.6 - 15.0 - 13.0 - 27.6 - 15.1 - 3.7 - 5.9 - 6.7 - 6.7 - 4.5 - 7.0 - 3.7 - 0.4 - 0.0 - 8.2 - 7.6 - 7.4 - 6.9 - 4.9 - 0.5 - 15.9 - 7.6 - 1.9 - 10.6 - 3.8 - 4.8 - 0.8 - 1.6 - 0.0 - 0.0 - 2.9 - 0.4 - 2.0 - 5.2 - 1.2 - 6.3 - 4.7 - 4.4 - 5.3 - 28.9 - 8.7 - 19.1 - 9.1 - 12.9 - 21.2 - 13.7 - 27.3 - 37.3 - 38.5 - 70.4 - 64.8 - 68.9 - 55.1 - 114.7 - 119.4 - 116.0 - 82.4 - 89.1 - 70.9 - 57.5 - 75.5 - 92.4 - 111.7 - 119.8 - 124.0 - 112.9 - 89.3 - 58.6 - 75.1 - 84.5 - 109.5 - 88.3 - 124.5 - 119.9 - 158.0 - 124.6 - 190.2 - 191.4 - 199.7 - 257.7 - 215.6 - 120.3 - 160.7 - 215.5 - 160.0 - 108.7 - 120.4 - 134.1 - 127.9 - 99.0 - 179.5 - 169.6 - 133.2 - 141.7 - 139.0 - 98.5 - 80.2 - 132.5 - 110.9 - 86.3 - 146.9 - 185.3 - 107.8 - 115.1 - 91.1 - 88.0 - 69.9 - 58.0 - 85.3 - 89.8 - 116.9 - 24.7 - 55.4 - 64.6 - 45.7 - 31.9 - 60.5 - 82.7 - 45.3 - 49.8 - 52.5 - 47.1 - 44.5 - 54.0 - 37.0 - 56.2 - 69.7 - 38.0 - 29.6 - 30.3 - 29.6 - 33.9 - 19.7 - 43.9 - 91.3 - 18.3 - 13.4 - 9.8 - 18.3 - 10.9 - 7.8 - 10.4 - 12.2 - 29.0 - 7.5 - 2.5 - 5.5 - 10.2 - 5.3 - 15.3 - 5.9 - 0.8 - 22.1 - 19.5 - 16.7 - 4.6 - 0.8 - 8.5 - 3.0 - 18.9 - 34.6 - 40.0 - 46.9 - 32.1 - 41.9 - 42.6 - 37.5 - 27.5 - 9.1 - 38.6 - 30.0 - 53.0 - 71.4 - 79.1 - 64.2 - 63.3 - 100.3 - 115.3 - 97.6 - 164.4 - 119.7 - 116.4 - 104.2 - 64.2 - 107.0 - 122.4 - 87.2 - 102.7 - 101.4 - 119.3 - 100.8 - 132.4 - 136.0 - 155.1 - 116.1 - 155.8 - 131.9 - 98.5 - 91.6 - 89.6 - 114.1 - 105.2 - 112.1 - 75.3 - 139.2 - 122.4 - 142.4 - 134.3 - 128.3 - 152.4 - 163.4 - 139.6 - 149.6 - 102.3 - 83.9 - 98.3 - 114.8 - 104.7 - 83.8 - 87.9 - 97.0 - 119.9 - 117.1 - 109.6 - 57.3 - 90.1 - 135.1 - 179.9 - 108.8 - 83.1 - 58.4 - 63.7 - 61.4 - 48.0 - 36.5 - 41.5 - 53.5 - 57.2 - 59.4 - 43.0 - 24.4 - 71.8 - 50.1 - 52.0 - 40.8 - 25.5 - 29.0 - 21.6 - 31.7 - 16.6 - 31.2 - 29.7 - 20.1 - 17.6 - 18.8 - 18.7 - 29.7 - 36.9 - 16.0 - 11.3 - 6.6 - 14.8 - 13.7 - 18.5 - 20.4 - 36.9 - 16.8 - 4.9 - 5.3 - 8.7 - 4.7 - 0.4 - 8.5 - 5.0 - 1.0 - 0.4 - 5.7 - 12.9 - 7.2 - 18.8 - 32.9 - 11.2 - 15.3 - 13.9 - 6.7 - 9.5 - 14.5 - 25.7 - 31.1 - 34.1 - 38.5 - 20.4 - 45.4 - 76.2 - 56.5 - 50.2 - 70.1 - 88.7 - 107.0 - 102.5 - 104.7 - 123.9 - 128.4 - 124.8 - 90.9 - 116.7 - 87.2 - 145.0 - 126.7 - 148.2 - 192.3 - 205.6 - 220.9 - 214.1 - 139.7 - 182.2 - 194.4 - 217.1 - 241.8 - 229.5 - 167.9 - 208.2 - 123.9 - 147.9 - 164.0 - 198.6 - 144.2 - 168.4 - 212.3 - 162.6 - 275.6 - 192.8 - 149.3 - 165.3 - 203.6 - 154.7 - 133.9 - 129.0 - 107.8 - 181.9 - 197.3 - 168.3 - 162.6 - 176.3 - 187.7 - 146.9 - 113.7 - 70.2 - 84.1 - 99.1 - 138.9 - 101.1 - 90.6 - 139.8 - 112.5 - 175.9 - 110.8 - 91.5 - 97.4 - 113.8 - 76.1 - 74.3 - 77.5 - 54.6 - 49.0 - 99.6 - 111.4 - 100.1 - 109.8 - 77.2 - 64.0 - 56.2 - 59.5 - 87.9 - 90.4 - 101.2 - 41.8 - 18.9 - 29.6 - 33.7 - 28.7 - 32.0 - 51.3 - 37.6 - 20.7 - 48.1 - 45.7 - 43.5 - 23.6 - 12.7 - 22.0 - 32.3 - 16.7 - 13.0 - 17.0 - 31.4 - 6.1 - 0.8 - 18.3 - 0.4 - 4.1 - 8.2 - 8.5 - 27.9 - 23.7 - 28.1 - 17.9 - 47.4 - 30.8 - 21.2 - 35.9 - 53.4 - 51.0 - 60.2 - 71.0 - 43.1 - 58.1 - 114.5 - 76.6 - 45.7 - 79.3 - 143.8 - 127.7 - 126.1 - 141.6 - 122.6 - 193.7 - 178.7 - 157.4 - 170.5 - 206.3 - 202.9 - 163.7 - 188.9 - 183.8 - 212.1 - 285.0 - 232.1 - 223.5 - 267.4 - 239.9 - 231.7 - 181.3 - 164.9 - 153.6 - 122.0 - 134.3 - 268.5 - 246.4 - 237.5 - 201.4 - 223.7 - 202.9 - 192.9 - 135.6 - 195.3 - 168.6 - 258.0 - 223.0 - 208.1 - 150.4 - 172.4 - 178.3 - 175.3 - 205.8 - 186.3 - 203.2 - 166.6 - 143.9 - 134.3 - 155.4 - 160.6 - 150.5 - 118.3 - 128.9 - 120.6 - 72.7 - 87.0 - 77.7 - 76.7 - 85.0 - 84.8 - 79.3 - 131.7 - 153.7 - 142.4 - 87.2 - 86.5 - 117.7 - 73.3 - 74.2 - 65.0 - 57.9 - 32.4 - 31.5 - 41.7 - 33.6 - 52.0 - 56.1 - 77.8 - 40.4 - 34.2 - 31.8 - 48.9 - 37.9 - 5.9 - 14.7 - 39.6 - 18.3 - 31.5 - 12.7 - 33.6 - 28.0 - 12.3 - 2.5 - 3.9 - 0.4 - 0.8 - 15.8 - 2.7 - 1.2 - 0.4 - 7.3 - 12.6 - 2.3 - 10.5 - 13.4 - 11.3 - 33.4 - 29.9 - 7.3 - 16.4 - 41.3 - 45.2 - 38.2 - 58.0 - 60.8 - 83.0 - 126.3 - 108.8 - 104.1 - 175.6 - 167.7 - 156.7 - 193.4 - 165.1 - 182.7 - 240.2 - 245.4 - 219.9 - 285.0 - 272.0 - 233.7 - 184.5 - 222.8 - 248.0 - 233.0 - 284.3 - 265.1 - 223.7 - 334.0 - 359.4 - 298.6 - 339.0 - 286.7 - 233.6 - 270.0 - 277.6 - 248.2 - 242.9 - 271.0 - 283.5 - 285.1 - 256.9 - 215.6 - 265.7 - 307.7 - 202.6 - 263.0 - 231.3 - 243.6 - 238.9 - 211.9 - 282.6 - 205.6 - 157.7 - 175.6 - 177.1 - 207.2 - 149.9 - 144.6 - 172.7 - 169.3 - 156.0 - 172.4 - 190.0 - 180.1 - 117.3 - 126.9 - 121.2 - 82.1 - 65.4 - 75.2 - 86.9 - 72.3 - 109.5 - 99.3 - 79.2 - 90.1 - 53.7 - 46.5 - 56.9 - 55.1 - 71.7 - 64.9 - 65.9 - 61.9 - 59.6 - 31.4 - 31.5 - 72.7 - 56.1 - 38.8 - 33.2 - 28.7 - 35.2 - 24.8 - 41.7 - 61.1 - 51.2 - 28.7 - 47.5 - 55.2 - 50.1 - 33.7 - 21.6 - 22.6 - 25.3 - 24.1 - 12.9 - 14.3 - 13.5 - 4.8 - 13.8 - 7.0 - 9.2 - 11.1 - 22.1 - 25.4 - 20.8 - 17.5 - 10.2 - 34.5 - 23.3 - 17.3 - 13.3 - 24.5 - 29.1 - 22.8 - 24.7 - 40.3 - 35.3 - 36.4 - 69.0 - 64.2 - 67.7 - 80.2 - 72.6 - 71.1 - 81.2 - 81.0 - 99.8 - 157.0 - 132.6 - 158.3 - 98.4 - 122.5 - 95.4 - 129.5 - 151.8 - 108.7 - 125.0 - 133.6 - 179.0 - 172.5 - 158.5 - 130.5 - 115.0 - 180.0 - 156.2 - 136.2 - 154.8 - 166.0 - 152.5 - 121.7 - 155.5 - 147.8 - 170.5 - 192.3 - 151.1 - 169.9 - 150.1 - 137.1 - 138.8 - 129.3 - 135.4 - 132.4 - 138.6 - 157.9 - 180.8 - 145.7 - 155.1 - 180.5 - 151.3 - 159.3 - 131.7 - 140.8 - 122.6 - 134.8 - 118.2 - 129.2 - 111.8 - 85.9 - 101.6 - 81.5 - 70.7 - 114.7 - 87.0 - 71.3 - 73.4 - 89.5 - 116.5 - 87.0 - 125.3 - 113.5 - 89.6 - 113.9 - 124.7 - 108.3 - 108.9 - 90.7 - 86.9 - 59.2 - 64.3 - 61.8 - 60.9 - 65.4 - 81.8 - 60.3 - 56.1 - 33.2 - 36.6 - 84.1 - 43.7 - 34.3 - 33.3 - 39.4 - 37.3 - 30.9 - 57.5 - 56.3 - 51.5 - 79.1 - 47.9 - 57.2 - 67.2 - 35.9 - 29.6 - 27.3 - 16.7 - 16.9 - 7.7 - 13.1 - 16.7 - 40.4 - 56.7 - 20.3 - 13.6 - 27.9 - 11.6 - 11.9 - 6.4 - 31.5 - 27.3 - 18.2 - 17.9 - 2.9 - 24.1 - 20.0 - 29.7 - 7.9 - 22.3 - 23.8 - 33.3 - 13.0 - 19.0 - 27.0 - 54.9 - 30.6 - 43.0 - 62.4 - 62.1 - 41.6 - 61.4 - 73.7 - 132.6 - 108.4 - 141.2 - 117.1 - 134.6 - 99.7 - 82.4 - 195.7 - 177.1 - 138.5 - 173.9 - 235.9 - 194.7 - 195.3 - 143.7 - 190.3 - 211.7 - 225.7 - 201.4 - 266.9 - 263.6 - 259.5 - 249.6 - 226.1 - 219.4 - 178.7 - 232.2 - 254.7 - 222.7 - 192.9 - 191.7 - 219.6 - 233.3 - 209.5 - 246.9 - 156.6 - 189.9 - 196.6 - 225.3 - 194.7 - 131.6 - 205.3 - 242.5 - 245.3 - 216.2 - 186.0 - 195.4 - 149.8 - 230.9 - 221.1 - 170.3 - 119.3 - 163.7 - 139.4 - 161.9 - 167.4 - 134.3 - 127.5 - 169.0 - 115.5 - 73.1 - 88.7 - 109.6 - 132.5 - 131.5 - 108.9 - 96.0 - 69.9 - 72.5 - 45.7 - 45.6 - 74.8 - 110.2 - 116.7 - 90.4 - 96.9 - 65.1 - 55.7 - 35.0 - 22.6 - 12.6 - 26.5 - 21.4 - 17.8 - 20.7 - 16.9 - 20.4 - 32.4 - 28.3 - 39.9 - 10.1 - 4.3 - 22.0 - 17.9 - 15.8 - 2.8 - 27.9 - 13.8 - 22.4 - 16.1 - 0.6 - 18.1 - 9.9 - 5.1 - 40.1 - 15.4 - 5.8 - 9.8 - 3.4 - 17.4 - 46.0 - 39.1 - 18.8 - 38.2 - 47.9 - 42.2 - 63.4 - 48.8 - 29.1 - 70.5 - 45.4 - 91.2 - 108.8 - 74.2 - 124.3 - 131.4 - 139.4 - 142.7 - 156.5 - 156.8 - 231.2 - 210.1 - 208.7 - 170.4 - 166.3 - 195.4 - 284.5 - 180.5 - 232.0 - 225.1 - 212.2 - 238.2 - 211.4 - 227.4 - 171.8 - 191.7 - 189.7 - 175.2 - 153.3 - 191.1 - 252.1 - 169.1 - 199.4 - 178.8 - 197.1 - 195.3 - 240.3 - 197.0 - 197.6 - 166.9 - 224.7 - 240.2 - 240.8 - 168.9 - 197.1 - 159.5 - 212.6 - 198.3 - 230.7 - 151.0 - 142.2 - 94.3 - 98.5 - 114.2 - 91.9 - 94.0 - 133.4 - 129.6 - 122.0 - 81.4 - 127.8 - 102.4 - 94.4 - 78.8 - 69.6 - 80.4 - 62.5 - 31.2 - 71.1 - 48.2 - 68.4 - 84.9 - 54.9 - 47.5 - 27.4 - 29.8 - 39.7 - 50.6 - 34.3 - 40.5 - 67.1 - 29.5 - 32.2 - 32.6 - 45.8 - 46.3 - 21.6 - 19.4 - 22.5 - 20.4 - 18.2 - 15.7 - 30.6 - 14.0 - 14.9 - 13.3 - 7.7 - 12.6 - 6.8 - 7.6 - 16.5 - 11.8 - 19.7 - 3.0 - 0.7 - 24.9 - 14.0 - 7.4 - 11.0 - 12.1 - 23.0 - 25.4 - 20.8 - 12.9 - 35.7 - 59.7 - 32.8 - 50.4 - 55.5 - 44.5 - 50.2 - 82.0 - 70.6 - 74.0 - 90.5 - 96.7 - 121.1 - 132.0 - 78.5 - 97.3 - 119.2 - 86.0 - 98.0 - 103.5 - 93.6 - 149.6 - 207.2 - 173.5 - 142.3 - 106.3 - 168.7 - 188.3 - 116.8 - 133.1 - 165.7 - 217.7 - 191.5 - 165.9 - 188.0 - 244.3 - 180.5 - 156.0 - 141.6 - 158.1 - 143.3 - 142.6 - 121.5 - 165.8 - 161.7 - 142.1 - 202.9 - 123.0 - 161.5 - 238.2 - 194.1 - 176.6 - 213.4 - 184.6 - 170.2 - 147.1 - 186.9 - 187.5 - 128.8 - 161.0 - 175.6 - 187.9 - 151.2 - 147.2 - 135.3 - 133.5 - 75.7 - 100.7 - 97.9 - 86.8 - 118.7 - 128.3 - 115.4 - 78.5 - 97.8 - 82.9 - 72.2 - 60.6 - 74.6 - 74.8 - 59.2 - 72.8 - 66.5 - 83.8 - 69.7 - 48.8 - 74.2 - 70.1 - 28.9 - 48.1 - 43.5 - 39.6 - 38.7 - 61.9 - 56.8 - 62.4 - 60.5 - 37.2 - 13.2 - 27.5 - 59.3 - 20.9 - 5.7 - 17.3 - 50.3 - 37.2 - 24.5 - 22.2 - 20.8 - 23.7 - 14.9 - 35.7 - 22.3 - 29.3 - 18.4 - 7.2 - 5.4 - 19.5 - 21.3 - 15.1 - 9.8 - 4.0 - 1.5 - 2.8 - 17.3 - 4.1 - 2.9 - 15.5 - 3.6 - 4.6 - 5.2 - 0.6 - 0.3 - 1.2 - 4.2 - 6.6 - 1.0 - 1.3 - 1.2 - 0.6 - 1.2 - 2.9 - 6.3 - 5.5 - 0.0 - 7.1 - 7.7 - 6.9 - 16.3 - 19.5 - 28.5 - 24.0 - 10.4 - 13.9 - 18.8 - 25.2 - 29.6 - 36.4 - 33.6 - 34.4 - 24.5 - 27.3 - 48.3 - 78.6 - 76.1 - 58.2 - 56.1 - 64.5 - 65.8 - 120.1 - 125.7 - 139.1 - 109.3 - 94.4 - 47.8 - 86.6 - 85.9 - 96.5 - 92.0 - 100.1 - 94.8 - 93.7 - 76.5 - 87.6 - 56.8 - 96.1 - 60.9 - 78.3 - 107.3 - 120.2 - 76.7 - 86.2 - 91.8 - 54.5 - 114.4 - 113.9 - 124.2 - 117.0 - 146.1 - 128.7 - 112.5 - 112.5 - 102.9 - 100.2 - 106.9 - 130.0 - 90.0 - 103.6 - 112.9 - 93.0 - 66.7 - 54.5 - 75.3 - 88.8 - 66.5 - 65.8 - 64.4 - 78.6 - 63.6 - 62.2 - 58.0 - 57.0 - 56.4 - 54.1 - 37.9 - 51.5 - 20.5 - 32.4 - 50.2 - 44.6 - 33.4 - 21.4 - 18.5 - 26.1 - 26.4 - 17.7 - 32.3 - 18.9 - 19.2 - 17.8 - 32.6 - 43.7 - 13.2 - 5.7 - 8.2 - 6.8 - 10.7 - 2.5 - 8.9 - 13.1 - 15.6 - 1.6 - 8.7 - 3.3 - 4.9 - 4.9 - 3.1 - 7.7 - 0.8 - 9.4 - 9.1 - 9.9 - 1.2 - 0.9 - 0.5 - 1.1 - 0.4 - 0.5 - 1.5 - 6.2 - 0.2 - 1.5 - 5.2 - 0.2 - 5.8 - 6.1 - 7.5 - 0.6 - 14.6 - 34.5 - 23.1 - 10.4 - 8.2 - 17.2 - 24.5 - 21.2 - 25.0 - 34.4 - 22.4 - 51.5 - 38.1 - 35.0 diff --git a/examples/data/sample.ogg b/examples/data/sample.ogg deleted file mode 100644 index 9bd9ec5..0000000 Binary files a/examples/data/sample.ogg and /dev/null differ diff --git a/include/dspbb/Math/FFT.hpp b/include/dspbb/Math/FFT.hpp index 8f612d7..c91fe22 100644 --- a/include/dspbb/Math/FFT.hpp +++ b/include/dspbb/Math/FFT.hpp @@ -4,7 +4,6 @@ #include "../Primitives/Signal.hpp" #include "../Primitives/SignalView.hpp" -#pragma warning #include "../PocketFFT/pocketfft_hdronly.h" #include