diff --git a/examples/haskell/README.md b/examples/haskell/README.md new file mode 100644 index 0000000..5d71767 --- /dev/null +++ b/examples/haskell/README.md @@ -0,0 +1,13 @@ +# Haskell example + +To run the example, make sure you put an ``example.wav`` in this directory, and then run the following: +```bash +stack run +``` + +The ``example.wav`` file must have the following requirements: +- Must be 16khz sample rate. +- Must be mono channel. +- Must be 16-bit audio. + +This uses the [silero-vad](https://hackage.haskell.org/package/silero-vad) package, a haskell implementation based on the C# example. \ No newline at end of file diff --git a/examples/haskell/app/Main.hs b/examples/haskell/app/Main.hs new file mode 100644 index 0000000..5295d32 --- /dev/null +++ b/examples/haskell/app/Main.hs @@ -0,0 +1,22 @@ +module Main (main) where + +import qualified Data.Vector.Storable as Vector +import Data.WAVE +import Data.Function +import Silero + +main :: IO () +main = + withModel $ \model -> do + wav <- getWAVEFile "example.wav" + let samples = + concat (waveSamples wav) + & Vector.fromList + & Vector.map (realToFrac . sampleToDouble) + let vad = + (defaultVad model) + { startThreshold = 0.5 + , endThreshold = 0.35 + } + segments <- detectSegments vad samples + print segments \ No newline at end of file diff --git a/examples/haskell/example.cabal b/examples/haskell/example.cabal new file mode 100644 index 0000000..a2714a4 --- /dev/null +++ b/examples/haskell/example.cabal @@ -0,0 +1,23 @@ +cabal-version: 1.12 + +-- This file has been generated from package.yaml by hpack version 0.37.0. +-- +-- see: https://github.com/sol/hpack + +name: example +version: 0.1.0.0 +build-type: Simple + +executable example-exe + main-is: Main.hs + other-modules: + Paths_example + hs-source-dirs: + app + ghc-options: -Wall -Wcompat -Widentities -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-export-lists -Wmissing-home-modules -Wpartial-fields -Wredundant-constraints -threaded -rtsopts -with-rtsopts=-N + build-depends: + WAVE + , base >=4.7 && <5 + , silero-vad + , vector + default-language: Haskell2010 diff --git a/examples/haskell/package.yaml b/examples/haskell/package.yaml new file mode 100644 index 0000000..db18ed2 --- /dev/null +++ b/examples/haskell/package.yaml @@ -0,0 +1,28 @@ +name: example +version: 0.1.0.0 + +dependencies: +- base >= 4.7 && < 5 +- silero-vad +- WAVE +- vector + +ghc-options: +- -Wall +- -Wcompat +- -Widentities +- -Wincomplete-record-updates +- -Wincomplete-uni-patterns +- -Wmissing-export-lists +- -Wmissing-home-modules +- -Wpartial-fields +- -Wredundant-constraints + +executables: + example-exe: + main: Main.hs + source-dirs: app + ghc-options: + - -threaded + - -rtsopts + - -with-rtsopts=-N \ No newline at end of file diff --git a/examples/haskell/stack.yaml b/examples/haskell/stack.yaml new file mode 100644 index 0000000..05497e7 --- /dev/null +++ b/examples/haskell/stack.yaml @@ -0,0 +1,11 @@ +snapshot: + url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/20/26.yaml + +packages: +- . + +extra-deps: + - silero-vad-0.1.0.4@sha256:2bff95be978a2782915b250edc795760d4cf76838e37bb7d4a965dc32566eb0f,5476 + - WAVE-0.1.6@sha256:f744ff68f5e3a0d1f84fab373ea35970659085d213aef20860357512d0458c5c,1016 + - derive-storable-0.3.1.0@sha256:bd1c51c155a00e2be18325d553d6764dd678904a85647d6ba952af998e70aa59,2313 + - vector-0.13.2.0@sha256:98f5cb3080a3487527476e3c272dcadaba1376539f2aa0646f2f19b3af6b2f67,8481 \ No newline at end of file diff --git a/examples/haskell/stack.yaml.lock b/examples/haskell/stack.yaml.lock new file mode 100644 index 0000000..893b6c0 --- /dev/null +++ b/examples/haskell/stack.yaml.lock @@ -0,0 +1,41 @@ +# This file was autogenerated by Stack. +# You should not edit this file by hand. +# For more information, please see the documentation at: +# https://docs.haskellstack.org/en/stable/lock_files + +packages: +- completed: + hackage: silero-vad-0.1.0.4@sha256:2bff95be978a2782915b250edc795760d4cf76838e37bb7d4a965dc32566eb0f,5476 + pantry-tree: + sha256: a62e813f978d32c87769796fded981d25fcf2875bb2afdf60ed6279f931ccd7f + size: 1391 + original: + hackage: silero-vad-0.1.0.4@sha256:2bff95be978a2782915b250edc795760d4cf76838e37bb7d4a965dc32566eb0f,5476 +- completed: + hackage: WAVE-0.1.6@sha256:f744ff68f5e3a0d1f84fab373ea35970659085d213aef20860357512d0458c5c,1016 + pantry-tree: + sha256: ee5ccd70fa7fe6ffc360ebd762b2e3f44ae10406aa27f3842d55b8cbd1a19498 + size: 405 + original: + hackage: WAVE-0.1.6@sha256:f744ff68f5e3a0d1f84fab373ea35970659085d213aef20860357512d0458c5c,1016 +- completed: + hackage: derive-storable-0.3.1.0@sha256:bd1c51c155a00e2be18325d553d6764dd678904a85647d6ba952af998e70aa59,2313 + pantry-tree: + sha256: 48e35a72d1bb593173890616c8d7efd636a650a306a50bb3e1513e679939d27e + size: 902 + original: + hackage: derive-storable-0.3.1.0@sha256:bd1c51c155a00e2be18325d553d6764dd678904a85647d6ba952af998e70aa59,2313 +- completed: + hackage: vector-0.13.2.0@sha256:98f5cb3080a3487527476e3c272dcadaba1376539f2aa0646f2f19b3af6b2f67,8481 + pantry-tree: + sha256: 2176fd677a02a4c47337f7dca5aeca2745dbb821a6ea5c7099b3a991ecd7f4f0 + size: 4478 + original: + hackage: vector-0.13.2.0@sha256:98f5cb3080a3487527476e3c272dcadaba1376539f2aa0646f2f19b3af6b2f67,8481 +snapshots: +- completed: + sha256: 5a59b2a405b3aba3c00188453be172b85893cab8ebc352b1ef58b0eae5d248a2 + size: 650475 + url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/20/26.yaml + original: + url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/20/26.yaml