What?
Forked from tonistiigi/audiosprite to target other frameworks - all credit to original author
This is a ffmpeg
wrapper that will take in multiple audio files and combines them into a single file. The final file will be exported in mp3
, webm
, opus
, m4a
and caf
(IMA-ADPCM) to support as many devices as possible. This tool will also generate a JSON
file that is compatible with goldfire/howler.js framework.
This project is also targeting bp74/StageXL - implementation pending.
Why?
iOS, Windows Phone and some Android phones have very limited HTML5 audio support. They only support playing single file at a time and loading in new files requires user interaction and has a big latency. To overcome this there is a technique to combine all audio into single file and only play/loop certain parts of that file. goldfire/howler.js is a audio framework that uses this technique.
Installation
npm install -g soundsprite
Hints for Windows users
- You need to install Node.js
- Use Git Bash instead of Command Line or Powershell
- Download ffmpeg and include it in your path
export PATH=$PATH:path/to/ffmpeg/bin
- IMA-ADPCM(the fastest iPhone format) will only be generated if you are using OSX.
Usage
> soundsprite --help
info: Usage: soundsprite [options] file1.mp3 file2.mp3 *.wav
info: Options:
--output, -o Name for the output file. [default: "output"]
--export, -e Limit exported file types. Comma separated extension list. [default: ""]
--log, -l Log level (debug, info, notice, warning, error). [default: "info"]
--autoplay, -a Autoplay sprite name [default: null]
--silence, -s Add special "silence" track with specified duration. [default: 0]
--samplerate, -r Sample rate. [default: 44100]
--channels, -c Number of channels (1=mono, 2=stereo). [default: 1]
--rawparts, -p Include raw slices(for Web Audio API) in specified formats. [default: ""]
--help, -h Show this help message.
> soundsprite --autoplay bg_loop --output mygameaudio bg_loop.wav *.mp3
info: File added OK file=bg_loop.wav
info: 1.25s silence gap added OK
info: File added OK file=click.mp3
info: 1.70s silence gap added OK
info: Exported caf OK file=mygameaudio.caf
info: Exported ac3 OK file=mygameaudio.opus
info: Exported mp3 OK file=mygameaudio.mp3
info: Exported m4a OK file=mygameaudio.m4a
info: Exported ogg OK file=mygameaudio.webm
info: Exported json OK file=mygameaudio.json
info: All done
> cat mygameaudio.json
{
"urls": [
"mygameaudio.caf",
"mygameaudio.opus",
"mygameaudio.mp3",
"mygameaudio.m4a",
"mygameaudio.webm"
],
"sprite": {
"bg_loop": [0, 3.75, true],
"click": [4, 0.3]
}
}
Custom silent track
On some cases starting and pausing a file has bigger latency than just setting playhead position. You may get better results if your file is always playing. --silence <duration>
option will generate extra track named silence that you can play instead of pausing the file.
goldfire/howler.js framework.
Usage withGenerated JSON file can be passed straight into Howl
constructor. Check out Howler.js documentation for more info.
var settings = /* JSON generated by audiosprite*/;var sound = settings;