{"id":18041849,"url":"https://github.com/schlenkr/flux","last_synced_at":"2026-03-12T19:35:57.156Z","repository":{"id":40730384,"uuid":"131639120","full_name":"SchlenkR/FluX","owner":"SchlenkR","description":"A convenient way of processing digital signals in F#","archived":false,"fork":false,"pushed_at":"2025-03-12T16:41:37.000Z","size":19584,"stargazers_count":21,"open_issues_count":1,"forks_count":6,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-09T19:46:53.123Z","etag":null,"topics":["audio-processing","fsharp","monadic","signal-processing"],"latest_commit_sha":null,"homepage":"","language":"F#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SchlenkR.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-04-30T19:43:40.000Z","updated_at":"2025-03-29T04:05:12.000Z","dependencies_parsed_at":"2025-04-09T19:47:04.280Z","dependency_job_id":null,"html_url":"https://github.com/SchlenkR/FluX","commit_stats":null,"previous_names":["schlenkr/flux"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/SchlenkR/FluX","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SchlenkR%2FFluX","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SchlenkR%2FFluX/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SchlenkR%2FFluX/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SchlenkR%2FFluX/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SchlenkR","download_url":"https://codeload.github.com/SchlenkR/FluX/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SchlenkR%2FFluX/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30440030,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-12T14:34:45.044Z","status":"ssl_error","status_checked_at":"2026-03-12T14:09:33.793Z","response_time":114,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["audio-processing","fsharp","monadic","signal-processing"],"created_at":"2024-10-30T16:13:04.047Z","updated_at":"2026-03-12T19:35:57.137Z","avatar_url":"https://github.com/SchlenkR.png","language":"F#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DISCONTINUED\n\n**FluX is discontinued. Before starting to work with this library or thinking about forking it, please have a look at [Vide](https://github.com/vide-collabo/Vide), which is a successor of FluX.**\n\n--------------------------\n\n# Synopsis\n\n[![Join the chat at https://gitter.im/FLooping/Lobby](https://badges.gitter.im/FLooping/Lobby.svg)](https://gitter.im/FLooping/Lobby?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge)\n\nFLooping is a signal processing library written in F#. It is designed for audio synthesis and effect processing, but can also be used for other purposes like simulation or control tasks (PLC). FLooping processes sample by sample, thus enabling to build low-level DSP structures such as filters, oscillators and other DSP building blocks.\n\nFLooping simplifies the way in that state based functions are composed. Unlike in imperative languages where instanciation and evaluation of components have to be handled in user code, FLooping handles per-component state and evaluation of components for you. This leads to a way of describing signal flows where you can define components in-line and treat them as if they were pure functions.\n\n# Code Examples\n\n## How to Execute the Samples\n\n* Clone or download the source.\n* Restore paket dependencies: In the root folder, run the following command:\n    * ```.paket/paket.exe install```\n    * (Windows cmd:) ```\".paket/paket.exe\" install```\n* The sample code below is a copy of the code in `./Demo.fsx`\n* Open that file and send it to F# Interactive by selecting the code and press Alt+Enter.\n\n```fsharp\n#load @\"./src/FLooping.fsx\"\n\nopen Microsoft.FSharp.Data.UnitSystems.SI.UnitSymbols\n\nopen FLooping.Core\nopen FLooping.Audio\nopen FLooping.BuildingBlocks\nopen FLooping.IO\n\n\n///\n/// Evaluate all code lines until here and start playing with the code below.\n///\n\n\n\n// increment a counter by 1, starting with 0 and print it to the output.\nloop {\n    let! x = counter 0.0 1.0\n    return x\n}\n|\u003e toList 20\n|\u003e List.iter (printfn \"%f\")\n\n\n// play a sin wave (5kHz) for 5 seconds\nloop {\n    let! x = sin 5000.0\n    return x\n}\n|\u003e playSync 5.0\u003cs\u003e\n\n\n// modulate the frequence of a sawtooth wave with an LFO (low frequency oscillator)\nloop {\n    let! modulator = sin 5.0\n    let amount = 0.05\n    let! s = saw (1000.0 * (1.0 - modulator * amount))\n    return s\n}\n|\u003e playSync 5.0\u003cs\u003e\n\n\n// \"tatü-tataa\": switch the waveform every 1/2 second\nloop {\n    // get environment\n    let! e = env()\n    let! v =\n        if (e.samplePos / e.sampleRate) % 1.0 \u003e 0.5 \n        then tri 2000.0 \n        else sin 2000.0\n    return v\n}\n|\u003e playSync 5.0\u003cs\u003e\n\n\n// A feedback loop: Feed the value of a counter back to the next evaluation.\n1.0 -=\u003e fun last -\u003e loop {\n    let current = last + 0.1\n    return { out=current; feedback=current }\n}\n|\u003e toList 5\n|\u003e List.iter (printfn \"%f\")\n\n```\n \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fschlenkr%2Fflux","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fschlenkr%2Fflux","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fschlenkr%2Fflux/lists"}