{"id":30420247,"url":"https://github.com/duobeiyun/node-sdl-speaker","last_synced_at":"2025-08-22T08:14:14.850Z","repository":{"id":57211643,"uuid":"93827350","full_name":"duobeiyun/node-sdl-speaker","owner":"duobeiyun","description":"Output PCM stream data to the speaker with SDL2","archived":false,"fork":false,"pushed_at":"2018-06-03T15:11:53.000Z","size":3266,"stargazers_count":8,"open_issues_count":0,"forks_count":5,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-08-09T04:31:13.966Z","etag":null,"topics":["audio","node","pcm","realtime","sdl","speaker","stream"],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/duobeiyun.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-06-09T06:40:52.000Z","updated_at":"2024-10-20T09:47:33.000Z","dependencies_parsed_at":"2022-09-04T13:11:37.620Z","dependency_job_id":null,"html_url":"https://github.com/duobeiyun/node-sdl-speaker","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/duobeiyun/node-sdl-speaker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/duobeiyun%2Fnode-sdl-speaker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/duobeiyun%2Fnode-sdl-speaker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/duobeiyun%2Fnode-sdl-speaker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/duobeiyun%2Fnode-sdl-speaker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/duobeiyun","download_url":"https://codeload.github.com/duobeiyun/node-sdl-speaker/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/duobeiyun%2Fnode-sdl-speaker/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270912572,"owners_count":24666749,"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","status":"online","status_checked_at":"2025-08-17T02:00:09.016Z","response_time":129,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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","node","pcm","realtime","sdl","speaker","stream"],"created_at":"2025-08-22T08:14:13.452Z","updated_at":"2025-08-22T08:14:14.832Z","avatar_url":"https://github.com/duobeiyun.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"node-sdl-speaker \n======\n\u003e Output PCM stream data to speaker with SDL2. Especially for realtime audio stream. \n\n[![Build Status](https://travis-ci.org/0neSe7en/node-sdl-speaker.svg?branch=master)](https://travis-ci.org/0neSe7en/node-sdl-speaker)\n[![NPM](https://nodei.co/npm/sdl-speaker.png)](https://www.npmjs.com/package/sdl-speaker)\n\n## Features\n\n- Stream Support. You can pipe a pcm stream to audio channel.\n- Multi Channels Support. You can open multi channels, it will mix all channels via `SDL_MixAudioFormat`.\n- Low Latency.\n\n## Installing / Getting started\n\n```shell\n$ npm install sdl-speaker\n```\n\n## Example\n\n```javascript\nconst Speaker = require('sdl-speaker');\n// Init SDL Speaker.\nSpeaker.init();\n\n// Register a channel for write buf.\nconst testChannel = Speaker.register('test');\n\n// pipe a pcm data to stream;\nfs.createReadStream('test.pcm').pipe(testChannel);\n\n// When you are ready..\n// Start play audio\nSpeaker.start();\n```\n\n## Api Reference\n\n## Speaker.init([ option ])\n\nInit SDL. `option` is optional.\n\n- `channels`: Channel count. default: `2`.\n- `samplesRate`: Sample rate for every channel. default: `44100`.\n- `samplesPerFrame`: Samples per frame. default: `1024`.\n\n### Speaker.start()\n\nStart play audio. Read audio data from a ring buffer. If data in ring buffer less than `samplesPerFrame`, fill 0.\n\n### Speaker.stop()\n\nClose and Destroy SDL player.\n\n### Speaker.pause()\n\nPause SDL player.\n\n### Speaker.resume()\n\nResume SDL player.\n\n### Speaker.detach(name)\n\nDetach audio source from SDL.\n\n### Speaker.cleanAll()\n\nClean all audio sources's buffer.\n\n#### Speaker.register(name) -\u003e audioChannel\n\nRegister a audio source for write buffer. The `name` must unique.\n\n#### audioChannel.write(buffer)\n\nWrite audio buffer to ring buffer. You can write before speaker start.\n\n#### audioChannel.clean()\n\nClean this audio source's buffer.\n\n## TODO\n\n- [ ] More Test.\n- [ ] Fix Travis-CI build failed.\n- [x] Pipe stream to `audioSource`.\n- [ ] Customise `rbuf` capability.\n- [x] Self contained `SDL2`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fduobeiyun%2Fnode-sdl-speaker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fduobeiyun%2Fnode-sdl-speaker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fduobeiyun%2Fnode-sdl-speaker/lists"}