{"id":17922275,"url":"https://github.com/kulp/tynsel","last_synced_at":"2025-03-24T02:32:28.297Z","repository":{"id":5953593,"uuid":"7174612","full_name":"kulp/tynsel","owner":"kulp","description":"A Bell 103 dataset encoder and decoder","archived":false,"fork":false,"pushed_at":"2024-06-23T23:58:59.000Z","size":342,"stargazers_count":8,"open_issues_count":0,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-06-24T01:08:42.931Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kulp.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":"2012-12-15T01:36:41.000Z","updated_at":"2024-06-23T23:59:02.000Z","dependencies_parsed_at":"2024-06-24T00:59:23.953Z","dependency_job_id":"54342a66-7f19-437c-b13e-6009e3e9ad18","html_url":"https://github.com/kulp/tynsel","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kulp%2Ftynsel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kulp%2Ftynsel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kulp%2Ftynsel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kulp%2Ftynsel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kulp","download_url":"https://codeload.github.com/kulp/tynsel/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":221932082,"owners_count":16903857,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":[],"created_at":"2024-10-28T20:38:29.024Z","updated_at":"2024-10-28T20:38:29.408Z","avatar_url":"https://github.com/kulp.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# tynsel\n\n**tynsel** tries to be a space- and time-efficient software modem allowing data to be transmitted and received by 300-baud [FSK] using the [Bell 103 dataset]. This is an obsolete technology from the 1980s, and is not meant to be used in new projects, but it could in principle be used to enable the use of ancient hardware.\n\n**Before you use tynsel, look at [minimodem] instead; it is much more capable software than tynsel.**\n\n## Rationale\n\nThis code is intentionally written to fit in an AVR [ATTINY412] microcontroller and therefore to use less than 256 bytes of RAM and 4KiB of program space.\n\nThe (non-working) implementation in the `avr-top` binary allows for manual checking that the program size is appropriately small. The (working) UNIX implementation in the `gen` and `listen` binaries can interact with the physical (audio) world via tools like [SoX], as shown in examples below.\n\nSomeday, the tynsel software might be hosted within a hardware design like [soylent].\n\n## Building\n\nIn order to compute the notch filter coefficients, you will need the `signal` package installed for [GNU Octave]:\n\n    octave --eval \"pkg install -forge signal control\"\n\nUnless you are building for an AVR target like the [ATTINY412], you probably want to build just the `gen` and `listen` targets:\n\n    make gen listen\n\n## Basic functionality\n\nThe `gen` binary takes ASCII data on `stdin` and produces raw monoaural audio on `stdout` as 16-bit signed integers at 8000Hz by default. The `listen` binary does the reverse, so they can be chained together, as illustrated in the examples below.\n\nUntil more documentation is written, you can get an idea of the available options by reviewing the `parse_opts` functions in `src/gen.c` and `src/listen.c`.\n\n## Example usage\n\nThe following command will emit \"hello\":\n\n    echo \"hello\" | ./gen | ./listen\n\nYou can listen to the output using [SoX]'s `play` command:\n\n    echo \"hello, world\" | ./gen |\n        play --rate 8000 --encoding signed --bits 16 --type raw -\n\nBy default, `gen` produces produces only enough samples to represent its input, plus a bit of carrier padding at the beginning and end of transmission.\n\nYou can use `gen` to generate data in real time, using the `-r 1` option; in this case, input received from the keyboard will be translated and played out your default sound device:\n\n    ./gen -r 1 |\n        play --rate 8000 --encoding signed --bits 16 --type raw --no-show-progress -\n\n### Interoperating with [minimodem]\n\nSending from [minimodem] and receiving in tynsel:\n\n    echo 'hello from minimodem' |\n        minimodem --tx 300 --volume 0.5 --file minimodem.wav --samplerate 8000 --stopbits 2\n    sox minimodem.wav --encoding signed --bits 16 --type raw - |\n        ./listen -C 0\n\nSending from tynsel and receiving in [minimodem]:\n\n    echo 'hello from tynsel' |\n        ./gen -C 0 |\n        sox --rate 8000 --encoding signed --bits 16 --type raw - gen.wav\n    minimodem --rx 300 --file gen.wav\n\n[FSK]: https://en.wikipedia.org/wiki/Frequency-shift_keying\n[Bell 103 dataset]: https://en.wikipedia.org/wiki/Bell_103_modem\n[ATTINY412]: https://www.microchip.com/wwwproducts/en/ATTINY412\n[SoX]: http://sox.sourceforge.net\n[soylent]: https://github.com/kulp/soylent\n[minimodem]: http://www.whence.com/minimodem/\n[GNU Octave]: https://octave.org\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkulp%2Ftynsel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkulp%2Ftynsel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkulp%2Ftynsel/lists"}