{"id":17861234,"url":"https://github.com/jonathanstowe/audio-libshout","last_synced_at":"2025-04-02T20:47:36.849Z","repository":{"id":66980380,"uuid":"37543959","full_name":"jonathanstowe/Audio-Libshout","owner":"jonathanstowe","description":"Raku binding to libshout - provide icecast/streaming client","archived":false,"fork":false,"pushed_at":"2022-08-07T08:43:36.000Z","size":98,"stargazers_count":0,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2023-04-22T17:06:59.503Z","etag":null,"topics":["audio","libshout","raku","streaming-client"],"latest_commit_sha":null,"homepage":"","language":"Raku","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"artistic-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jonathanstowe.png","metadata":{"files":{"readme":"README.md","changelog":"Changes","contributing":null,"funding":null,"license":null,"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":"2015-06-16T17:02:22.000Z","updated_at":"2022-08-07T08:43:39.000Z","dependencies_parsed_at":"2023-05-16T10:00:53.647Z","dependency_job_id":null,"html_url":"https://github.com/jonathanstowe/Audio-Libshout","commit_stats":null,"previous_names":[],"tags_count":14,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jonathanstowe%2FAudio-Libshout","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jonathanstowe%2FAudio-Libshout/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jonathanstowe%2FAudio-Libshout/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jonathanstowe%2FAudio-Libshout/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jonathanstowe","download_url":"https://codeload.github.com/jonathanstowe/Audio-Libshout/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246892795,"owners_count":20850846,"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":["audio","libshout","raku","streaming-client"],"created_at":"2024-10-28T08:43:28.126Z","updated_at":"2025-04-02T20:47:36.489Z","avatar_url":"https://github.com/jonathanstowe.png","language":"Raku","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Audio::Libshout\n\nRaku binding to libshout - provide icecast/streaming client\n\n![Build Status](https://github.com/jonathanstowe/Audio-Libshout/workflows/CI/badge.svg)\n\n## Synopsis\n\n```raku\nuse v6;\n\nuse Audio::Libshout;\n\nsub MAIN(IO(Str) $in-file) {\n    my $shout = Audio::Libshout.new(password =\u003e 'hackme', mount =\u003e '/foo', format =\u003e Audio::Libshout::Format::MP3);\n    my $fh = $in-file.open(:bin);\n    my $channel = $shout.send-channel;\n\n    while not $fh.eof {\n        my $buf = $fh.read(4096);\n        $channel.send($buf);\n    }\n\n    $fh.close;\n    $channel.close;\n    $shout.close;\n}\n```\n\n## Description\n\nThis provides a source client to stream to an icecast server.  It can\nstream Ogg/Vorbis or MP3 data but doesn't provide any transcoding so the\ndata will need to be provided from an appropriate source in the required\nencoding. This has been developed against version 2.2.2 of libshout,\nit is possible later versions may provide support for other encodings.\n\nThe API is somewhat simplified in comparison to libshout but provides\nan asynchronous mechanism whereby data can be fed as quickly as it is\nobtained to a worker thread via a channel so the client doesn't have\nto worry about the timing and synchronisation issues, though the lower\nlevel send and sync methods are available if your application requires\na different scheme.\n\nIn testing this proved quite capable of streaming a 320kb/s MP3 read from\na file to an icecast server on the local network, though of course network\nconditions may limit the rate that will work well to remote servers.\n\nThe \"examples\" directory in the distribution contains a simple streaming\nsource client that will allow you to send an Ogg or MP3 file to an\nicecast server.\n\nIf you're curious the first thing that I streamed using this library was\n\nhttps://www.mixcloud.com/mikestern-awakening/mike-stern-guest-mix-for-technotic-eire-radio-show/\n\nMike's a great DJ, great DJs and producers make making software\nworthwhile :)\n\nThe full documentation is available as [markdown](Documentation.md) or embedded POD.\n\n## Installation\n\nYou will need to have \"libshout\"  installed on your system in order to\nbe able to use this. Most Linux distributions offer it as a package.\n\n\nIf you are on some platform that doesn't provide libshout as a package\nthen you may be able to install it from source:\n\nhttps://github.com/xiph/Icecast-libshout\n\nI am however unlikely to be able to offer help with installing it this way, also bear in mind that\nif you install a newer version than I have to test with then this may not work.\n\nIn order to perform some of the tests you will need to have a working Icecast server available,\nthese tests will be skipped if one isn't found.  The tests use some default values for the server\nparameters that can be over-written by some environment variables:\n\n   * SHOUT_TEST_HOST - the host to connect to. The default is 'localhost'\n   * SHOUT_TEST_PORT - the port to connect to. The default is 8000.\n   * SHOUT_TEST_USER - the user to authenticate as. The default is 'source'.\n   * SHOUT_TEST_PASS - the password to authenticate with.  The default is 'hackme' but you changed that right?\n   * SHOUT_TEST_MOUNT - the mount point on the server to use.  The default is '/shout_test'\n\nAssuming you have a working Rakudo installation as well as a working icecast server you should be able to install this with *zef* :\n\n    # From the source directory\n   \n    zef install .\n\n    # Remote installation\n\n    zef install Audio::Libshout\n\n## Support\n\nSuggestions/patches are welcomed via [github](https://github.com/jonathanstowe/Audio-Libshout)\n\nI have tested this and found it to work with my installation of icecast,\nso it should work anywhere else, if however you experience a problem\nwith streaming please test with another source client such as ices or\ndarkice before reporting a bug as I am unlikely to be able to help you\nwith your streaming configuration.\n\nThere are some small variations in the behaviour of  `libshout` between\nversions and these are documented where known in [the Documentation](Documentation.md) however please supply the `libshout` version if you find unexpected behaviour.\n\n## Licence\n\nPlease see the [LICENCE](LICENCE) file in the distribution\n\n© Jonathan Stowe 2015, 2016, 2017, 2019, 2020, 2021\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjonathanstowe%2Faudio-libshout","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjonathanstowe%2Faudio-libshout","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjonathanstowe%2Faudio-libshout/lists"}