Nasty Popsicle Machine

    soundsprite

    0.2.7 • Public • Published

    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.

    Usage with goldfire/howler.js framework.

    Generated 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 = new Howl(settings);

    Install

    npm i soundsprite

    DownloadsWeekly Downloads

    4

    Version

    0.2.7

    License

    none

    Last publish

    Collaborators

    • realbluesky