Name: audiosprite
Owner: BBC
Description: Modified version of audiosprite
Created: 2016-08-19 15:31:30.0
Updated: 2016-09-14 09:45:58.0
Pushed: 2016-09-23 11:33:58.0
Size: 108
Language: JavaScript
GitHub Committers
User | Most Recent Commit | # Commits |
---|
Other Committers
User | Most Recent Commit | # Commits |
---|
This is a ffmpeg
wrapper that will take in multiple audio files and combines them into a single file. Silent gaps will be put between the parts so that every new part starts from full second and there is at least 1 second pause between every part. The final file will be exported in mp3
, ogg
, ac3
, m4a
and caf
(IMA-ADPCM) to support as many devices as possible. This tool will also generate a JSON
file that is compatible with Howler.js or zynga/jukebox framework.
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. zynga/jukebox is a audio framework that uses this technique. digitalfruit/limejs is a HTML5 game framework that includes Jukebox and lets you add audio to your games using audio sprites.
install -g audiosprite
You can install FFmpeg
and the ogg
codecs on OSX using brew
:
install ffmpeg --with-theora --with-libogg --with-libvorbis
export PATH=$PATH:path/to/ffmpeg/bin
diosprite --help
: Usage: audiosprite [options] file1.mp3 file2.mp3 *.wav
: Options:
output, -o Name for the output files. [default: "output"]
path, -u Path for files to be used on final JSON. [default: ""]
export, -e Limit exported file types. Comma separated extension list. [default: "ogg,m4a,mp3,ac3"]
format, -f Format of the output JSON file (jukebox, howler, createjs). [default: "jukebox"]
log, -l Log level (debug, info, notice, warning, error). [default: "info"]
autoplay, -a Autoplay sprite name. [default: null]
loop Loop sprite name, can be passed multiple times. [default: null]
silence, -s Add special "silence" track with specified duration. [default: 0]
gap, -g Silence gap between sounds (in seconds). [default: 1]
minlength, -m Minimum sound duration (in seconds). [default: 0]
bitrate, -b Bit rate. Works for: ac3, mp3, mp4, m4a, ogg. [default: 128]
vbr, -v VBR [0-9]. Works for: mp3. -1 disables VBR. [default: -1]
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.
diosprite --autoplay bg_loop --output mygameaudio bg_loop.wav *.mp3
: File added OK file=bg_loop.wav
: 1.25s silence gap added OK
: File added OK file=click.mp3
: 1.70s silence gap added OK
: Exported caf OK file=mygameaudio.caf
: Exported ac3 OK file=mygameaudio.ac3
: Exported mp3 OK file=mygameaudio.mp3
: Exported m4a OK file=mygameaudio.m4a
: Exported ogg OK file=mygameaudio.ogg
: Exported json OK file=mygameaudio.json
: All done
t mygameaudio.json
esources": [
"mygameaudio.caf",
"mygameaudio.ac3",
"mygameaudio.mp3",
"mygameaudio.m4a",
"mygameaudio.ogg"
pritemap": {
"bg_loop": {
"start": 0,
"end": 3.75,
"loop": true
},
"click": {
"start": 5,
"end": 5.3,
"loop": false
}
utoplay": "bg_loop"
You can use --autoplay
option to set a track that will start playing automatically. This track is then marked as autoplay and looping in the JSON. This syntax is Jukebox framework specific.
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.
Generated JSON file can be passed straight into jukebox.Player
constructor. Check out Jukebox documentation/demos for more info.
settings = {/* JSON generated by audiosprite*/};
his part needs to be in user event callback.
myPlayer = new jukebox.Player(settings);
ayer.play('click');
First generate LimeJS asset from the JSON file that you can require inside your code.
n/lime.py gensoy path/to/mygameaudio.json
Then use AudioMap
class to play the file.
.require('lime.audio.AudioMap');
.require('lime.ASSETS.mygameaudio.json');
audio = new lime.audio.AudioMap(lime.ASSETS.mygameaudio.json);
o.play('click');
Don't forget to use the --rawparts=mp3
option to benefit from the LimeJS feature to automatically switch to Web Audio API when it's supported by the client.