Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/tropicbliss/symphonia
An audio playback library for Node.js
https://github.com/tropicbliss/symphonia
Last synced: 3 months ago
JSON representation
An audio playback library for Node.js
- Host: GitHub
- URL: https://github.com/tropicbliss/symphonia
- Owner: tropicbliss
- License: mit
- Created: 2022-12-08T12:22:06.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2023-04-17T02:07:20.000Z (about 1 year ago)
- Last Synced: 2024-03-17T21:22:22.033Z (3 months ago)
- Language: Rust
- Size: 1.75 MB
- Stars: 91
- Watchers: 2
- Forks: 0
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Lists
- awesome-stars - tropicbliss/symphonia - An audio playback library for Node.js (Rust)
- awesome-ak - symphonia - An audio playback library for Node.js (DevTools / Languages)
README
# symphonia.js
A "way too simple" cross-platform zero dependency audio playback library for Node.js
## Supported Platforms
- Windows (x86-64)
- Windows (i386) (32-bit)
- macOS (x86-64)
- macOS (arm64)
- Linux (x86-64)## Supported Audio Formats
- MP3
- WAV
- Vorbis
- FLAC
- MP4
- AAC## Note
Take note that the `node_modules` generated by npm when installing this package is non-portable across platforms in order to save space. Thus, you'll need to run `npm install` when transferring your project between platforms in order for this package to work correctly (you should not be committing your `node_modules` anyway so for most use cases this shouldn't be a problem).
Lastly, when you call the functions for the first time it might take a few seconds for the computer to respond. This is perfectly normal behaviour as it might be caused by Windows Defender.
## Credits
- [cpal](https://github.com/rustaudio/cpal)
- [napi-rs](https://github.com/napi-rs/napi-rs)
- [rodio](https://github.com/RustAudio/rodio)
- [symphonia](https://github.com/pdeljanov/Symphonia)## Usage
```js
const axios = require('axios')
const fs = require('fs')
const symphonia = require('@tropicbliss/symphonia')try {
const buf = fs.readFileSync('chime.ogg') // Gets a Buffer
symphonia.playFromBuf(buf, { speed: 1.0, volume: 1.0, isBlocking: true }) // The option object is optional. The speed and volume is both set to 1.0 and `isBlocking` is set to `true` by default.// You can also obtain buffers from a web request
axios
.get(URL)
.then((res) => Buffer.from(res.data, 'binary'))
.then((buf) => {
symphonia.playFromBuf(buf)
})// Play a sine wave at the frequency of 440Hz for 250ms
symphonia.playFromSine(440.0, 250)
} catch (e) {
console.log('Error playing audio: ', e)
}
```Note that calling `playFromX()` without setting the `isBlocking` option parameter blocks the main thread by default, so pass `false` to `isBlocking` to make the methods non-blocking.
```js
const fs = require('fs')
const symphonia = require('@tropicbliss/symphonia')function playStuff() {
const buf = fs.readFileSync('chime.ogg')
const data = symphonia.playFromBuf(buf, { isBlocking: false })
console.log("I'm not done yet, do something else to prevent this program from exiting!")
data.controller.pause()
data.controller.play()
data.controller.stop()
}try {
playStuff()
} catch (e) {
console.log('Error playing audio: ', e)
}
```