Javascript audio library for the modern web.

Overview

howler.js

Description

howler.js is an audio library for the modern web. It defaults to Web Audio API and falls back to HTML5 Audio. This makes working with audio in JavaScript easy and reliable across all platforms.

Additional information, live demos and a user showcase are available at howlerjs.com.

Follow on Twitter for howler.js and development-related discussion: @GoldFireStudios.

Features

  • Single API for all audio needs
  • Defaults to Web Audio API and falls back to HTML5 Audio
  • Handles edge cases and bugs across environments
  • Supports all codecs for full cross-browser support
  • Automatic caching for improved performance
  • Control sounds individually, in groups or globally
  • Playback of multiple sounds at once
  • Easy sound sprite definition and playback
  • Full control for fading, rate, seek, volume, etc.
  • Easily add 3D spatial sound or stereo panning
  • Modular - use what you want and easy to extend
  • No outside dependencies, just pure JavaScript
  • As light as 7kb gzipped

Browser Compatibility

Tested in the following browsers/versions:

  • Google Chrome 7.0+
  • Internet Explorer 9.0+
  • Firefox 4.0+
  • Safari 5.1.4+
  • Mobile Safari 6.0+ (after user input)
  • Opera 12.0+
  • Microsoft Edge

Live Demos

Documentation

Contents

Quick Start

Several options to get up and running:

  • Clone the repo: git clone https://github.com/goldfire/howler.js.git
  • Install with npm: npm install howler
  • Install with Yarn: yarn add howler
  • Install with Bower: bower install howler
  • Hosted CDN: cdnjs jsDelivr

In the browser:

<script src="/path/to/howler.js"></script>
<script>
    var sound = new Howl({
      src: ['sound.webm', 'sound.mp3']
    });
</script>

As a dependency:

import {Howl, Howler} from 'howler';
const {Howl, Howler} = require('howler');

Included distribution files:

  • howler: This is the default and fully bundled source the includes howler.core and howler.spatial. It inclues all functionality that howler comes with.
  • howler.core: This includes only the core functionality that aims to create parity between Web Audio and HTML5 Audio. It doesn't include any of the spatial/stereo audio functionality.
  • howler.spatial: This is a plugin that adds spatial/stereo audio functionality. It requires howler.core to operate as it is simply an add-on to the core.

Examples

Most basic, play an MP3:
var sound = new Howl({
  src: ['sound.mp3']
});

sound.play();
Streaming audio (for live audio or large files):
var sound = new Howl({
  src: ['stream.mp3'],
  html5: true
});

sound.play();
More playback options:
var sound = new Howl({
  src: ['sound.webm', 'sound.mp3', 'sound.wav'],
  autoplay: true,
  loop: true,
  volume: 0.5,
  onend: function() {
    console.log('Finished!');
  }
});
Define and play a sound sprite:
var sound = new Howl({
  src: ['sounds.webm', 'sounds.mp3'],
  sprite: {
    blast: [0, 3000],
    laser: [4000, 1000],
    winner: [6000, 5000]
  }
});

// Shoot the laser!
sound.play('laser');
Listen for events:
var sound = new Howl({
  src: ['sound.webm', 'sound.mp3']
});

// Clear listener after first call.
sound.once('load', function(){
  sound.play();
});

// Fires when the sound finishes playing.
sound.on('end', function(){
  console.log('Finished!');
});
Control multiple sounds:
var sound = new Howl({
  src: ['sound.webm', 'sound.mp3']
});

// Play returns a unique Sound ID that can be passed
// into any method on Howl to control that specific sound.
var id1 = sound.play();
var id2 = sound.play();

// Fade out the first sound and speed up the second.
sound.fade(1, 0, 1000, id1);
sound.rate(1.5, id2);
ES6:
import {Howl, Howler} from 'howler';

// Setup the new Howl.
const sound = new Howl({
  src: ['sound.webm', 'sound.mp3']
});

// Play the sound.
sound.play();

// Change global volume.
Howler.volume(0.5);

More in-depth examples (with accompanying live demos) can be found in the examples directory.

Core

Options

src Array/String [] required

The sources to the track(s) to be loaded for the sound (URLs or base64 data URIs). These should be in order of preference, howler.js will automatically load the first one that is compatible with the current browser. If your files have no extensions, you will need to explicitly specify the extension using the format property.

volume Number 1.0

The volume of the specific track, from 0.0 to 1.0.

html5 Boolean false

Set to true to force HTML5 Audio. This should be used for large audio files so that you don't have to wait for the full file to be downloaded and decoded before playing.

loop Boolean false

Set to true to automatically loop the sound forever.

preload Boolean|String true

Automatically begin downloading the audio file when the Howl is defined. If using HTML5 Audio, you can set this to 'metadata' to only preload the file's metadata (to get its duration without download the entire file, for example).

autoplay Boolean false

Set to true to automatically start playback when sound is loaded.

mute Boolean false

Set to true to load the audio muted.

sprite Object {}

Define a sound sprite for the sound. The offset and duration are defined in milliseconds. A third (optional) parameter is available to set a sprite as looping. An easy way to generate compatible sound sprites is with audiosprite.

new Howl({
  sprite: {
    key1: [offset, duration, (loop)]
  },
});

rate Number 1.0

The rate of playback. 0.5 to 4.0, with 1.0 being normal speed.

pool Number 5

The size of the inactive sounds pool. Once sounds are stopped or finish playing, they are marked as ended and ready for cleanup. We keep a pool of these to recycle for improved performance. Generally this doesn't need to be changed. It is important to keep in mind that when a sound is paused, it won't be removed from the pool and will still be considered active so that it can be resumed later.

format Array []

howler.js automatically detects your file format from the extension, but you may also specify a format in situations where extraction won't work (such as with a SoundCloud stream).

xhr Object null

When using Web Audio, howler.js uses an XHR request to load the audio files. If you need to send custom headers, set the HTTP method or enable withCredentials (see reference), include them with this parameter. Each is optional (method defaults to GET, headers default to null and withCredentials defaults to false). For example:

// Using each of the properties.
new Howl({
  xhr: {
    method: 'POST',
    headers: {
      Authorization: 'Bearer:' + token,
    },
    withCredentials: true,
  }
});

// Only changing the method.
new Howl({
  xhr: {
    method: 'POST',
  }
});

onload Function

Fires when the sound is loaded.

onloaderror Function

Fires when the sound is unable to load. The first parameter is the ID of the sound (if it exists) and the second is the error message/code.

The load error codes are defined in the spec:

  • 1 - The fetching process for the media resource was aborted by the user agent at the user's request.
  • 2 - A network error of some description caused the user agent to stop fetching the media resource, after the resource was established to be usable.
  • 3 - An error of some description occured while decoding the media resource, after the resource was established to be usable.
  • 4 - The media resource indicated by the src attribute or assigned media provider object was not suitable.

onplayerror Function

Fires when the sound is unable to play. The first parameter is the ID of the sound and the second is the error message/code.

onplay Function

Fires when the sound begins playing. The first parameter is the ID of the sound.

onend Function

Fires when the sound finishes playing (if it is looping, it'll fire at the end of each loop). The first parameter is the ID of the sound.

onpause Function

Fires when the sound has been paused. The first parameter is the ID of the sound.

onstop Function

Fires when the sound has been stopped. The first parameter is the ID of the sound.

onmute Function

Fires when the sound has been muted/unmuted. The first parameter is the ID of the sound.

onvolume Function

Fires when the sound's volume has changed. The first parameter is the ID of the sound.

onrate Function

Fires when the sound's playback rate has changed. The first parameter is the ID of the sound.

onseek Function

Fires when the sound has been seeked. The first parameter is the ID of the sound.

onfade Function

Fires when the current sound finishes fading in/out. The first parameter is the ID of the sound.

onunlock Function

Fires when audio has been automatically unlocked through a touch/click event.

Methods

play([sprite/id])

Begins playback of a sound. Returns the sound id to be used with other methods. Only method that can't be chained.

  • sprite/id: String/Number optional Takes one parameter that can either be a sprite or sound ID. If a sprite is passed, a new sound will play based on the sprite's definition. If a sound ID is passed, the previously played sound will be played (for example, after pausing it). However, if an ID of a sound that has been drained from the pool is passed, nothing will play.

pause([id])

Pauses playback of sound or group, saving the seek of playback.

  • id: Number optional The sound ID. If none is passed, all sounds in group are paused.

stop([id])

Stops playback of sound, resetting seek to 0.

  • id: Number optional The sound ID. If none is passed, all sounds in group are stopped.

mute([muted], [id])

Mutes the sound, but doesn't pause the playback.

  • muted: Boolean optional True to mute and false to unmute.
  • id: Number optional The sound ID. If none is passed, all sounds in group are stopped.

volume([volume], [id])

Get/set volume of this sound or the group. This method optionally takes 0, 1 or 2 arguments.

  • volume: Number optional Volume from 0.0 to 1.0.
  • id: Number optional The sound ID. If none is passed, all sounds in group have volume altered relative to their own volume.

fade(from, to, duration, [id])

Fade a currently playing sound between two volumes. Fires the fade event when complete.

  • from: Number Volume to fade from (0.0 to 1.0).
  • to: Number Volume to fade to (0.0 to 1.0).
  • duration: Number Time in milliseconds to fade.
  • id: Number optional The sound ID. If none is passed, all sounds in group will fade.

rate([rate], [id])

Get/set the rate of playback for a sound. This method optionally takes 0, 1 or 2 arguments.

  • rate: Number optional The rate of playback. 0.5 to 4.0, with 1.0 being normal speed.
  • id: Number optional The sound ID. If none is passed, playback rate of all sounds in group will change.

seek([seek], [id])

Get/set the position of playback for a sound. This method optionally takes 0, 1 or 2 arguments.

  • seek: Number optional The position to move current playback to (in seconds).
  • id: Number optional The sound ID. If none is passed, the first sound will seek.

loop([loop], [id])

Get/set whether to loop the sound or group. This method can optionally take 0, 1 or 2 arguments.

  • loop: Boolean optional To loop or not to loop, that is the question.
  • id: Number optional The sound ID. If none is passed, all sounds in group will have their loop property updated.

state()

Check the load status of the Howl, returns a unloaded, loading or loaded.

playing([id])

Check if a sound is currently playing or not, returns a Boolean. If no sound ID is passed, check if any sound in the Howl group is playing.

  • id: Number optional The sound ID to check.

duration([id])

Get the duration of the audio source (in seconds). Will return 0 until after the load event fires.

  • id: Number optional The sound ID to check. Passing an ID will return the duration of the sprite being played on this instance; otherwise, the full source duration is returned.

on(event, function, [id])

Listen for events. Multiple events can be added by calling this multiple times.

  • event: String Name of event to fire/set (load, loaderror, playerror, play, end, pause, stop, mute, volume, rate, seek, fade, unlock).
  • function: Function Define function to fire on event.
  • id: Number optional Only listen to events for this sound id.

once(event, function, [id])

Same as on, but it removes itself after the callback is fired.

  • event: String Name of event to fire/set (load, loaderror, playerror, play, end, pause, stop, mute, volume, rate, seek, fade, unlock).
  • function: Function Define function to fire on event.
  • id: Number optional Only listen to events for this sound id.

off(event, [function], [id])

Remove event listener that you've set. Call without parameters to remove all events.

  • event: String Name of event (load, loaderror, playerror, play, end, pause, stop, mute, volume, rate, seek, fade, unlock).
  • function: Function optional The listener to remove. Omit this to remove all events of type.
  • id: Number optional Only remove events for this sound id.

load()

This is called by default, but if you set preload to false, you must call load before you can play any sounds.

unload()

Unload and destroy a Howl object. This will immediately stop all sounds attached to this sound and remove it from the cache.

Global Options

usingWebAudio Boolean

true if the Web Audio API is available.

noAudio Boolean

true if no audio is available.

autoUnlock Boolean true

Automatically attempts to enable audio on mobile (iOS, Android, etc) devices and desktop Chrome/Safari.

html5PoolSize Number 10

Each HTML5 Audio object must be unlocked individually, so we keep a global pool of unlocked nodes to share between all Howl instances. This pool gets created on the first user interaction and is set to the size of this property.

autoSuspend Boolean true

Automatically suspends the Web Audio AudioContext after 30 seconds of inactivity to decrease processing and energy usage. Automatically resumes upon new playback. Set this property to false to disable this behavior.

ctx Boolean Web Audio Only

Exposes the AudioContext with Web Audio API.

masterGain Boolean Web Audio Only

Exposes the master GainNode with Web Audio API. This can be useful for writing plugins or advanced usage.

Global Methods

The following methods are used to modify all sounds globally, and are called from the Howler object.

mute(muted)

Mute or unmute all sounds.

  • muted: Boolean True to mute and false to unmute.

volume([volume])

Get/set the global volume for all sounds, relative to their own volume.

  • volume: Number optional Volume from 0.0 to 1.0.

stop()

Stop all sounds and reset their seek position to the beginning.

codecs(ext)

Check supported audio codecs. Returns true if the codec is supported in the current browser.

  • ext: String File extension. One of: "mp3", "mpeg", "opus", "ogg", "oga", "wav", "aac", "caf", "m4a", "m4b", "mp4", "weba", "webm", "dolby", "flac".

unload()

Unload and destroy all currently loaded Howl objects. This will immediately stop all sounds and remove them from cache.

Plugin: Spatial

Options

orientation Array [1, 0, 0]

Sets the direction the audio source is pointing in the 3D cartesian coordinate space. Depending on how directional the sound is, based on the cone attributes, a sound pointing away from the listener can be quiet or silent.

stereo Number null

Sets the stereo panning value of the audio source for this sound or group. This makes it easy to setup left/right panning with a value of -1.0 being far left and a value of 1.0 being far right.

pos Array null

Sets the 3D spatial position of the audio source for this sound or group relative to the global listener.

pannerAttr Object

Sets the panner node's attributes for a sound or group of sounds. See the pannerAttr method for all available options.

onstereo Function

Fires when the current sound has the stereo panning changed. The first parameter is the ID of the sound.

onpos Function

Fires when the current sound has the listener position changed. The first parameter is the ID of the sound.

onorientation Function

Fires when the current sound has the direction of the listener changed. The first parameter is the ID of the sound.

Methods

stereo(pan, [id])

Get/set the stereo panning of the audio source for this sound or all in the group.

  • pan: Number A value of -1.0 is all the way left and 1.0 is all the way right.
  • id: Number optional The sound ID. If none is passed, all in group will be updated.

pos(x, y, z, [id])

Get/set the 3D spatial position of the audio source for this sound or group relative to the global listener.

  • x: Number The x-position of the audio source.
  • y: Number The y-position of the audio source.
  • z: Number The z-position of the audio source.
  • id: Number optional The sound ID. If none is passed, all in group will be updated.

orientation(x, y, z, [id])

Get/set the direction the audio source is pointing in the 3D cartesian coordinate space. Depending on how directional the sound is, based on the cone attributes, a sound pointing away from the listener can be quiet or silent.

  • x: Number The x-orientation of the source.
  • y: Number The y-orientation of the source.
  • z: Number The z-orientation of the source.
  • id: Number optional The sound ID. If none is passed, all in group will be updated.

pannerAttr(o, [id])

Get/set the panner node's attributes for a sound or group of sounds.

  • o: Object All values to update.
    • coneInnerAngle 360 A parameter for directional audio sources, this is an angle, in degrees, inside of which there will be no volume reduction.
    • coneOuterAngle 360 A parameter for directional audio sources, this is an angle, in degrees, outside of which the volume will be reduced to a constant value of coneOuterGain.
    • coneOuterGain 0 A parameter for directional audio sources, this is the gain outside of the coneOuterAngle. It is a linear value in the range [0, 1].
    • distanceModel inverse Determines algorithm used to reduce volume as audio moves away from listener. Can be linear, inverse or exponential. You can find the implementations of each in the spec.
    • maxDistance 10000 The maximum distance between source and listener, after which the volume will not be reduced any further.
    • refDistance 1 A reference distance for reducing volume as source moves further from the listener. This is simply a variable of the distance model and has a different effect depending on which model is used and the scale of your coordinates. Generally, volume will be equal to 1 at this distance.
    • rolloffFactor 1 How quickly the volume reduces as source moves from listener. This is simply a variable of the distance model and can be in the range of [0, 1] with linear and [0, ∞] with inverse and exponential.
    • panningModel HRTF Determines which spatialization algorithm is used to position audio. Can be HRTF or equalpower.
  • id: Number optional The sound ID. If none is passed, all in group will be updated.

Global Methods

stereo(pan)

Helper method to update the stereo panning position of all current Howls. Future Howls will not use this value unless explicitly set.

  • pan: Number A value of -1.0 is all the way left and 1.0 is all the way right.

pos(x, y, z)

Get/set the position of the listener in 3D cartesian space. Sounds using 3D position will be relative to the listener's position.

  • x: Number The x-position of the listener.
  • y: Number The y-position of the listener.
  • z: Number The z-position of the listener.

orientation(x, y, z, xUp, yUp, zUp)

Get/set the direction the listener is pointing in the 3D cartesian space. A front and up vector must be provided. The front is the direction the face of the listener is pointing, and up is the direction the top of the listener is pointing. Thus, these values are expected to be at right angles from each other.

  • x: Number The x-orientation of listener.
  • y: Number The y-orientation of listener.
  • z: Number The z-orientation of listener.
  • xUp: Number The x-orientation of the top of the listener.
  • yUp: Number The y-orientation of the top of the listener.
  • zUp: Number The z-orientation of the top of the listener.

Group Playback

Each new Howl() instance is also a group. You can play multiple sounds from the Howl and control them individually or as a group. For example, the following plays two sounds from a sprite, changes their volume together and then pauses both of them at the same time.

var sound = new Howl({
  src: ['sound.webm', 'sound.mp3'],
  sprite: {
    track01: [0, 20000],
    track02: [21000, 41000]
  }
});

// Play each of the track.s
sound.play('track01');
sound.play('track02');

// Change the volume of both tracks.
sound.volume(0.5);

// After a second, pause both sounds in the group.
setTimeout(function() {
  sound.pause();
}, 1000);

Mobile/Chrome Playback

By default, audio on mobile browsers and Chrome/Safari is locked until a sound is played within a user interaction, and then it plays normally the rest of the page session (Apple documentation). The default behavior of howler.js is to attempt to silently unlock audio playback by playing an empty buffer on the first touchend event. This behavior can be disabled by calling:

Howler.autoUnlock = false;

If you try to play audio automatically on page load, you can listen to a playerror event and then wait for the unlock event to try and play the audio again:

var sound = new Howl({
  src: ['sound.webm', 'sound.mp3'],
  onplayerror: function() {
    sound.once('unlock', function() {
      sound.play();
    });
  }
});

sound.play();

Dolby Audio Playback

Full support for playback of the Dolby Audio format (currently support in Edge and Safari) is included. However, you must specify that the file you are loading is dolby since it is in a mp4 container.

var dolbySound = new Howl({
  src: ['sound.mp4', 'sound.webm', 'sound.mp3'],
  format: ['dolby', 'webm', 'mp3']
});

Facebook Instant Games

Howler.js provides audio support for the new Facebook Instant Games platform. If you encounter any issues while developing for Instant Games, open an issue with the tag [IG].

Format Recommendations

Howler.js supports a wide array of audio codecs that have varying browser support ("mp3", "opus", "ogg", "wav", "aac", "m4a", "m4b", "mp4", "webm", ...), but if you want full browser coverage you still need to use at least two of them. If your goal is to have the best balance of small filesize and high quality, based on extensive production testing, your best bet is to default to webm and fallback to mp3. webm has nearly full browser coverage with a great combination of compression and quality. You'll need the mp3 fallback for Internet Explorer.

It is important to remember that howler.js selects the first compatible sound from your array of sources. So if you want webm to be used before mp3, you need to put the sources in that order.

If you want your webm files to be seekable in Firefox, be sure to encode them with the cues element. One way to do this is by using the dash flag in ffmpeg:

ffmpeg -i sound1.wav -dash 1 sound1.webm

License

Copyright (c) 2013-2020 James Simpson and GoldFire Studios, Inc.

Released under the MIT License.

Issues
  • Auto play next track on mobile

    Auto play next track on mobile

    Have anyone manage to make a playlist play the next track on mobile IOS? I tried the demo version on mobile safari, the next track doesn't start unless I click again on 'Play'.

    opened by psntr 37
  • Call for Testing/Feedback: howler.js v2.0.0-beta

    Call for Testing/Feedback: howler.js v2.0.0-beta

    The 2.0 branch is finally to a point where it is ready for public testing and feedback! This is still very much beta, so use at your own risk (especially the effects plugin). The library has been rewritten from the ground up, taking into account all of the lessons learned since the very first commit. Be sure to check the changelog for the quite large list of additions/updates/fixes.

    Before this can be merged to master, I need help from the community testing and providing feedback on the API, features, etc. Please use this thread for general feedback and tag any issues or pull requests with 2.0. There's still a lot of work to be done, so check back with this thread often for updates.

    There's also a new audible testing script in the tests directory. I'd love to expand this further, so if anyone has ideas, please add them here or open a pull request. Be sure to run the tests on a webserver so that the Web Audio section doesn't fall back to HTML5 Audio.

    CHANGELOG

    BRANCH: 2.0

    TODO

    • [x] Determine what else is missing from effects plugin.
    • [x] Clear out rest of open 2.0 issues.
    • [x] Improvements to tests.
    • [x] Overhaul the documentation.
    • [x] Add more examples to documentation.
    • [x] New examples and demos.
    • [x] Create a migration guide.
    • [x] Should the logo get a refresh?

    ...am I forgetting anything?

    feedback 
    opened by goldfire 35
  • Loop/Multiple Playback Broken Chrome Canary 42.0.2303.3 canary (64-bit)

    Loop/Multiple Playback Broken Chrome Canary 42.0.2303.3 canary (64-bit)

    It appears the latest beta version of Howler2 doesn't work in the latest version of Chrome Canary (Version 42.0.2303.3). When playing a sound with 'loop: true' option, it only plays the first iteration - and does not loop. After that, any subsequent call to Play() results in no response also, until the page is reloaded.

    opened by motopete 26
  • Sound not playing on iPhone (5/6) on first visit ever

    Sound not playing on iPhone (5/6) on first visit ever

    Hey guys,

    we currently have some issues with our app on first visit:

    Whenever the website is opened the first time (really the first ever visit) on iPhone 5/6 we cannot play any sounds. When the page is reloaded it is suddenly working. I also checked that the iosautoenable Function is called successfully, it is.

    Furthermore I also put in Charles (proxy) inbetween to enable no caching. But somehow it is also not related to that. As soon as I switch the domain, the sound is not playing the first time.

    Did anybody experience similar issues?

    Also tried with version 2, still not working.

    ios 
    opened by markusf 24
  • elusive audio distortion bug ,because audioContext init is not expected correctly for the sampleRate is not set right  on IOS

    elusive audio distortion bug ,because audioContext init is not expected correctly for the sampleRate is not set right on IOS

    i also found a solution for this ,you can get answer here :https://github.com/Jam3/ios-safe-audio-context

    opened by underbayan 24
  • [2.0 beta] No sound in Android / Chrome

    [2.0 beta] No sound in Android / Chrome

    I have issues with sounds not playing at all in Android/Chrome, so I set up a simple test page with Howler 2.0.0 beta 5: http://v2.esviji.com/audio-test.html

    Sounds play in desktop browsers and in Safari Mobile (with some issues), but not at all on Chrome 47.0.2526.83 on a Nexus 5 using Android 6.0.1 which can't load any of the ogg and MP3 files.

    opened by nhoizey 21
  • Support additional positional methods for Web Audio

    Support additional positional methods for Web Audio

    I'd like to see methods for setting velocity and orientation on howls. I'd also like to see some means of setting a listener position, orientation and velocity.

    If there are no plans to do this within the week, I may have time to hammer out a pull request, but in order to reduce friction in having it accepted, it might be nice to discuss implementation here. Specifically:

    • Have "velocity" and "orientation" methods on Howl similar to pos3d, only without the non-Web Audio path. For non-Web Audio they'd simply be no-op, and it'd be up to the developer to present an alert if these advanced features are used and it is felt that they are necessary to the audio experience.
    • Create a listener lode as a local variable on Howl.
    • Add Howl.listenerPosition, Howl.listenerVelocity and Howl.listenerOrientation methods to set the listener's attributes. I assume that there is never more than one global listener in a Howl app. If there is, then perhaps the app needs more sophistication than Howl can offer.

    As an aside, it might be a good idea to create a new method for setting position and deprecating pos3d, since this feature would add many additional 3-D attributes to sound. Maybe reserve position() for 3-D sound, add offset() as a synonym for pos, then deprecate pos/pos3d for a future 2.0 release? I won't implement that now (except for maybe the position() synonym if asked) but I'm tossing it out there as a thought.

    feedback 
    opened by ndarilek 21
  • Can looping be seamless?

    Can looping be seamless?

    This is a browser issue, not a library issue, but it would be a real nice-to-have. Check out this loop: http://jsfiddle.net/qyXtT/1/

    There's a slight gap between end and start on loop. Is there any way to fix that? It's especially bad for the more ambient sounds, like this rain file, or ambient music. Cross fade?

    To add to the note about it being a browser issue, I searched the Chromium dev for an issue, couldn't find one. I might open one; looping should be seamless (same for video). But browsers do a slight pause-gap. Tsk, tsk.

    enhancement 
    opened by arxpoetica 20
  • Error when trying to develop locally

    Error when trying to develop locally

    I get the following error when trying to use howler.js locally without a webserver:

    XMLHttpRequest cannot load file:///C:/Users/Scott/WebstormProjects/guess_the_number/bird.wav. Cross origin requests are only supported for HTTP. howler.min.js:10
    Uncaught Error: NETWORK_ERR: XMLHttpRequest Exception 101
    

    I know the issue... that I need to use an http URL isntead of file:///. So that means I need a local webserver to develop on. However, I don't want to do that for several reasons. For one, I don't get the live editing feature that WebStorm provides. I'm also trying to teach kids JavaScript with howler.js. I don't want to teach them about webservers at this point yet. Anyway, is there a way to use howler.js without using a webserver?

    I know the HTML5 <audio> element can use file URLs. Can I force howler.js to fallback to this method for local files?

    opened by samueller 20
  • howler takes time to play audio on safari

    howler takes time to play audio on safari

    when i load the page and click a button to play audio. it takes 10 sec to play audio. every time it takes time to play. even if i stop audio and play it again. it still takes time to play audio. desparately need to cut this waiting time. note: This issue is occured on ios.

    opened by ajitkhatke 20
  • Howler and Pizzicato.js

    Howler and Pizzicato.js

    Any example or documentation of how to use Howler.js and Pizzicato.js together? Or any other example on how to add a node, delay or filter?

    opened by arpo 0
  • React NodeGui

    React NodeGui

    Is this library works on React NodeGui? I've tried to use in a project and when try to load a mp3 file it return to me a loading error without any suggested message.

    Any help will be appreciated.

    opened by ithustle 0
  • How to capture 404 error for audio source in function onloaderror

    How to capture 404 error for audio source in function onloaderror

    Since, Onloaderror Function only returns below error codes:

    1 - The fetching process for the media resource was aborted by the user agent at the user's request. 2 - A network error of some description caused the user agent to stop fetching the media resource, after the resource was established to be usable. 3 - An error of some description occured while decoding the media resource, after the resource was established to be usable. 4 - The media resource indicated by the src attribute or assigned media provider object was not suitable.

    It is sometime not clear from the error codes if source is missing (404), is there any way to capture the 404 error for the audio source.

    opened by srvshrm 0
  • AudioContext.decodeAudioData() fails with 'EncodingError: Decoding failed' error

    AudioContext.decodeAudioData() fails with 'EncodingError: Decoding failed' error

    Safari 15 beta 4 @ MacOS Catalina v10.15.7

    The following code fails to play mp3 audio file with EncodingError: Decoding failed error:

      loadAudioWithHowler() {
        const audio = new Howl({
          src: 'https://bug2report.s3.amazonaws.com/popup.mp3',
          preload: false,
          html5: false,
        })
          .on('load', () => {
            console.log(`+++ loaded`);
          })
          .on('loaderror', (id, message) => {
            console.log(`+++ error -> ${message}`);
          });
    
        audio.load();
      }
    

    Corresponding howler.core.js function with added error parameter:

    ...
      var decodeAudioData = function(arraybuffer, self) {
        // Fire a load error if something broke.
        var error = function(error) {
          self._emit('loaderror', null, `Decoding audio data failed: ${error}`);
        };
    
        // Load the sound on success.
        var success = function(buffer) {
          if (buffer && self._sounds.length > 0) {
            cache[self._src] = buffer;
            loadSound(self, buffer);
          } else {
            error();
          }
        };
    
        // Decode the buffer into an audio source.
        if (typeof Promise !== 'undefined' && Howler.ctx.decodeAudioData.length === 1) {
          Howler.ctx.decodeAudioData(arraybuffer).then(success).catch(error);
        } else {
          Howler.ctx.decodeAudioData(arraybuffer, success, error);
        }
      }
    ...
    
    opened by leshak2k 5
  • Documentation fixes

    Documentation fixes

    Fixed typo inclues -> includes

    opened by shreyas-jadhav 0
  • Chrome Tab muting ignored by Howler?

    Chrome Tab muting ignored by Howler?

    I've noticed when I use howler.js for playing audio (not sure if it's the JS Audio API or howler.js specifically) that if a tab is muted audio plays anyways literally ignoring the tab mute? This might be a Chrome bug but I've found nothing about it and I'm pretty sure people would've submitted bug reports about it already. I have not noticed it anywhere else. Only with howler.js on my site.

    System Info: MacOS Big Sur 11.4 Google Chrome Version 92.0.4515.159 (Official Build) (x86_64) Howler.js 2.2.3

    opened by mwkcoding 2
  • Passing in an AudioContext

    Passing in an AudioContext

    I am attempting to use my own audio context with howler. It looks like I should be able to do something like:

    Howler.ctx = myAudioContext
    

    before doing anything else but that gives me the error "SyntaxError: Source and destination nodes belong to different audio contexts".

    Is there a way to have Howler use my already-initialized audio context?

    ---- More context on the problem ----

    (This may not be the only way to fix my actual problem. Our app has been happily working for a few years but it does something odd on Safari 14. It works on earlier versions of Safari and all other supported browsers.)

    You can see the actual problem by going to https://sightreadingfactory.com/practice/sr/play?keySigs=C%20Major&timeSigs=4/4&levelId=s~2&mediumId=bass in Safari 14. If you click the play button it will spin endlessly because the audiocontext is suspended. Note that other parts of the app use a different audiocontext. For instance, if you click the metronome it will start the sound right away.

    The really odd thing is that if the user does anything with the mouse or keyboard it will start playing. For instance, it will start playing just by touching the SHIFT key.

    And once any sound happens then everything works normally.

    So I was thinking there must be some way that the audio context I use for the metronome is set up differently than the audio context for Howler and wanted to see if it would work if Howler used my audio context.

    opened by paulrosen 0
  • Typo in repo description

    Typo in repo description

    "Javascript" should be changed to "JavaScript" :)

    opened by fredster33 0
  • Cannot set property bufferSource of undefined

    Cannot set property bufferSource of undefined

    We were looking through our error logs and found we get a lot of this error:

    image

    We are developing games that transition in and out of scenes, loading and unloading new audio so might be a case of refreshing the buffer for a sound that has been unloaded?

    Using howler 2.0.8 and have been for probably 2 years

    Errors all on iOS

    opened by kane-mason 1
  • Volume changes will not apply on IOS

    Volume changes will not apply on IOS

    I have been trying to create a simple mixer that can have 4 different sounds playing at once, with volume sliders to adjust them. This is the way each of the sounds is set up, with a slider assigned to adjust the volume. It works fine on desktop and android, and online it said setting html5 to false would fix it on IOS but that has not been the case. I have checked and the internal volume attribute is being changed, however, the actual playback volume does not change.

    var p = new Howl({ src: [("s/" + e[1])], loop: false, volume: 0.0, html5: false, });

    opened by maxstewartsteele 1
Releases(v2.2.3)
  • v2.2.3(Jun 30, 2021)

  • v2.2.2(Jun 27, 2021)

    The README has been updated with more examples and various clarifications. PRs/issues with suggestions for further improvements are appreciated.

    • CHANGED Include keydown event when unlocking audio (#1417).
    • CHANGED The audio state is changed to loading while the player is buffering (#1444).
    • FIXED Looping sounds wouldn't always work correctly in recent versions of Firefox desktop (#1445).
    • FIXED Disabled WebM in Safari 14 until bug in Safari is resolved (#1476).
    • FIXED Error when calling seek() on audio that hasn't loaded (#1423).
    • FIXED Before a sound had loaded, calling pause() after seek() didn't have the intended behavior (#1439).
    Source code(tar.gz)
    Source code(zip)
  • v2.2.1(Oct 25, 2020)

    • FIXED The latest Safari 14 changed how WAV support was detected (#1415).
    • FIXED Edge case that could cause an infinite loop while fading (#1369).
    • FIXED Calling seek without a seek value while a file was still loading no longer adds it to the queue and correctly returns 0 (#1189).
    • FIXED Correctly handle finite audio files that return Infinity duration in Safari (#658).
    Source code(tar.gz)
    Source code(zip)
  • v2.2.0(May 17, 2020)

    • ADDED New xhr property that allows setting custom headers (such as for auth), changing the withCredentials setting and specifying the HTTP method for the request. These only apply to Web Audio (#997).
    • ADDED New Howler.stop() global stop method to stop all sounds at once (#1308).
    • ADDED Support for m4b audio format (#1170).
    • CHANGED Allow passing metadata string to preload option to only preload the metadata (#1140).
    • FIXED Correctly handle AudioContext interrupted state causing stuck suspending state (#1106).
    • FIXED The volume method would sometimes return incorrect values when using very short fade lengths (#1045).
    • FIXED Error that HowlerGlobal was not defined when using jsdom-global (#1331).
    • FIXED Memory leak in Safari when an audio context can't be unlocked (#1338).

    Breaking Changes

    • The xhrWithCredentials property is now included in the xhr property object with key withCredentials.
    Source code(tar.gz)
    Source code(zip)
  • v2.1.3(Dec 24, 2019)

    • FIXED Don't try to obtain HTML5 audio if there is no audio support (#1191).
    • FIXED The x/y/z orientations for the top of the listener weren't being set properly (#1221).
    • FIXED Race condition that could prevent looping audio from always looping (#1225).
    • FIXED Race condition that could cause the main volume to be reset to 1 if called before unlockAudio (#1210).
    Source code(tar.gz)
    Source code(zip)
  • v2.1.2(Apr 19, 2019)

    • FIXED Removed browser check for auto play unlock since all major browsers now implement this.
    • FIXED Live streams now stop downloading when they are stopped, also fixing issue in Chrome with stopping twice (#1129).
    • FIXED Prevent error in Edge when Audio isn't supported (#1147).
    Source code(tar.gz)
    Source code(zip)
  • v2.1.1(Dec 21, 2018)

  • v2.1.0(Dec 12, 2018)

    • ADDED Howler now maintains a general pool of HTML5 Audio nodes that are unlocked on first user input, which fixes issues with subsequent HTML5 Audio plays not working (#1008).
    • ADDED New global html5PoolSize option that allows setting the default size of the HTML5 Audio object pool (#1008).
    • CHANGED Since locking of audio is no longer mobile-only, mobileAutoEnable has been renamed to autoUnlock.
    • FIXED Playing a sound with locked audio in Chrome or elsewhere could cause playing() to return true (#939).
    • FIXED Correctly use setPosition instead of setOrientation in Safari (#1033).
    • FIXED Prevent error on seek or duration being negative (#1034).
    • FIXED Force fade values to be numbers to prevent errors (#1027).
    • FIXED An InvalidStateError could sometimes be thrown in Internet Explorer (#1052).
    • FIXED Prevent silent failure of AudioContext creation in Safari (#1021).
    • FIXED Changing rate and seek on a paused sound could cause seek to end up at the wrong position (#1088).
    • FIXED Calling play twice before a sound had loaded could lead to both sounds having the same ID (#1060).

    Breaking Changes

    • If you are directly setting Howler.mobileAutoEnable (it defaults to true), then you should change this to Howler.autoUnlock.
    • The new HTML5 Audio object pool shouldn't change anything for 99% of use-cases, but if for whatever reason you don't want to use the pool, you can set html5PoolSize to 0 to bypass using the pool.
    Source code(tar.gz)
    Source code(zip)
  • v2.0.15(Aug 24, 2018)

  • v2.0.14(Jul 12, 2018)

    • CHANGED Auto unlocking of audio now runs on Chrome to fix issue with HTML5 Audio needing user interaction.
    • CHANGED Added a new unlock event that is fired when the auto unlock happens.
    • CHANGED A playerror now gets fired when HTML5 Audio fails to play due to lack of user interaction.
    • FIXED Improved HTML5 Audio play lock checks to prevent race conditions (#995).
    • FIXED Intermittent error in Chrome when decoding audio data (#988).
    • FIXED Error when trying to loop spatial audio without a sprite (#985).
    • FIXED Instantly fire the end event when a sound is seeked past its duration (#963).
    • FIXED Another issue in Safari where spatial orientation was throwing an error.
    Source code(tar.gz)
    Source code(zip)
  • v2.0.13(Jun 22, 2018)

    • FIXED Prevent stop event from firing alongside end when using HTML5 Audio (#974).
    • FIXED Correctly reset a Sound after using spatial audio (#962).
    • FIXED Remove a Howl from cache when unloaded after failing to load (#978).
    • FIXED Race condition could lead to error when cleaning the buffer.
    Source code(tar.gz)
    Source code(zip)
  • v2.0.12(May 9, 2018)

  • v2.0.11(May 9, 2018)

  • v2.0.10(May 5, 2018)

    • FIXED Fixed another Chrome deprecation warning when using panning methods (#923).
    • FIXED Playback rate wasn't working correctly in Internet Explorer when defined in the Howl constructor (#936).
    • FIXED Looped audio would only play twice in Internet Explorer (#921).
    Source code(tar.gz)
    Source code(zip)
  • v2.0.9(Feb 10, 2018)

    • FIXED More accurate HTML5 Audio end timer and fix for Firefox streams ending early (#883).
    • FIXED Prevent play events from duplicating in certain instances (#899).
    • FIXED Add second parameter to HTML5 Audio playback promise to fix Safari error (#896).
    • FIXED Refactored the internal queue system to fix various edge cases.
    Source code(tar.gz)
    Source code(zip)
  • v2.0.8(Jan 19, 2018)

    • CHANGED Fades now use elapsed time to be more accurate when intervals are inconsistent (#885).
    • CHANGED Improve timing of short fades (#884).
    • FIXED Fixed another Chrome deprecation when setting playback rate.
    • FIXED Prevent onplay from firing when first setting stereo value (#843).
    Source code(tar.gz)
    Source code(zip)
  • v2.0.7(Dec 18, 2017)

  • v2.0.6(Dec 15, 2017)

    • FIXED Replaced deprecated gain.value and gain.pan.value with setValueAtTime (#856).
    • FIXED Audio sprites weren't ending correctly in Internet Explorer 11 (#841).
    • FIXED Correctly set group volume when fading (#539).
    • FIXED Cancel fade on sound when mute is called (#666).
    • FIXED Uncaught error when play() request was interrupted by a call to pause() (#835).
    • FIXED Incorrect reference to global _scratchBuffer (#834).
    Source code(tar.gz)
    Source code(zip)
  • v2.0.5(Oct 6, 2017)

    • ADDED Add support for withCredentials to Web Audio XHR requests (#610).
    • ADDED Add playerror event for when mobile HTML5 audio is unable to play (#774).
    • FIXED Refactor fade method to eliminate bind memory allocations (no change to API).
    • FIXED Prevent seeking after sound has been unloaded (#797).
    • FIXED Check for paused instead of ended on HTML5 end check to correctly handle data URI's (#775).
    • FIXED Fix unlocking of mobile audio on iOS when user swipes instead of taps (#808).
    • FIXED pannerAttr values can now be set via object as the documentation originally specified.
    • FIXED Various corrections and improvements to the spatial audio documentation.
    Source code(tar.gz)
    Source code(zip)
  • v2.0.4(Jun 9, 2017)

    • CHANGED Removed the resuming state, which wasn't actually being used and was leading to a bug on Android (#679).
    • CHANGED Any playback initiated before the sound has loaded will now go into the queue to fix various race conditions (#714).
    • FIXED Correctly initialize an AudioContext with the global mute status (#714).
    • FIXED AudioContext unlocks on user interaction within a cross-domain iframe on Android Chrome (#756).
    • FIXED Stopping/pausing a group of sounds now behaves as expected in edge cases (#734).
    • FIXED Sound ID's now start at 1000 instead of 0 to avoid rate collisions (#764).
    • FIXED Prevent unknown mime errors on Internet Explorer when unloading a sound (#720).
    • FIXED Correctly clean up error event listeners (#720).
    • FIXED Audio clipping in Internet Explorer when network latency is present with HTML5 Audio (#720).
    • FIXED Allow passing just an event and ID to turn off listener (#767).
    • FIXED npm warning caused by invalid license definition (#763).
    Source code(tar.gz)
    Source code(zip)
  • v2.0.3(Mar 11, 2017)

    • CHANGED Unloading a sound no longer fires the end event (#675).
    • FIXED Remove setTimeout wrapper on HTML5 play call to fix issues on mobile browsers (#694).
    • FIXED Remove rare possibility of duplicate sound ID's by using global counter (#709).
    • FIXED Support fades with 2+ decimal places (#696).
    • FIXED Error in Firefox caused by invalid silent WAV on unload (#678).
    • FIXED Check for and warn about missing file extension (#680).
    • FIXED Regression in Firefox relating to spatial audio (#664).
    Source code(tar.gz)
    Source code(zip)
  • v2.0.2(Dec 4, 2016)

    • FIXED Wait to begin playback until AudioContext has resumed (#643).
    • FIXED Run noAudio check on initial setup instead of waiting for first Howl (#619).
    • FIXED Add play event to start of queue when autoplay is used (#659).
    • FIXED Make sure seek and duration are always >= 0 to prevent errors (#682).
    • FIXED Audio test wouldn't work in IE11 Enhanced Security Mode (#631).
    • FIXED Ensure AudioContext exists on unload (#646).
    • FIXED Always fire pause event even if sound is already paused (#639).
    Source code(tar.gz)
    Source code(zip)
  • v2.0.1(Oct 14, 2016)

    • ADDED Support for FLAC audio files.
    • FIXED Improve fading performance when short fade times are used (#621).
    • FIXED Correctly handle fades from 0 to 0 volume (#575).
    • FIXED Prevent a load error from blocking all future playback (#613).
    • FIXED Reset noAudio to false when a sound is unloaded (#617).
    • FIXED Stop a sound even if it is not playing (#595).
    • FIXED Emit stop event before returning from stop (#616).
    • FIXED Improve codec checks by removing x- prefix (#576).
    • FIXED Set correct loop start/end when calling loop on a sprite (#604).
    Source code(tar.gz)
    Source code(zip)
  • v2.0.0(Jul 19, 2016)

    This major release contains just a few breaking changes outlined below. Howler.js has been rewritten from the ground up using the knowledge and work since the initial release. There's a long list of additions and improvements, which I urge you to read through as the library has evolved quite a bit over this time.

    The biggest change is how you should think about your audio when using howler.js. There is now the concept of global (Howler), group (Howl) and single sound (Sound). Each sound that is played gets its own Sound object that can be manipulated, giving much greater control over playback, whether using sprites or not. Howl method calls can then apply to one sound or all in the group.

    Howler (global) ->
            Howl (group) ->
                    Sound (single)
    

    Howler.js now also has the concept of plugins. The core represents 100% compatibility across hTML5 Audio and Web Audio, adhering to the initial goals of the library. There is also a new Spatial Plugin that adds 3D and stereo audio support only available in the Web Audio API.

    Read more about the update in this blog post.

    Breaking Changes

    • The buffer option is now named html5. Use this to force HTML5 Audio usage.
    • The pos method has been renamed to seek.
    // Change the seek position of a sound (in seconds).
    sound.seek(10);
    
    • mute and unmute have been consolidated into mute.
    // Mute a sound (or all sounds).
    sound.mute(true);
    Howler.mute(true);
    
    // Unmute a sound (or all sounds).
    sound.mute(false);
    Howler.mute(false);
    
    • The play method no longer takes a callback and immediately returns the playback sound id (this means you can no longer chain onto the play method, but all others work the same).
    // Get sound id for a specific playback.
    var id = sound.play();
    
    // Pause this playback.
    sound.pause(id);
    
    • The deprecated fadeIn and fadeOut methods have been removed in favor of the single fade method.
    // Fade in a sound.
    sound.fade(0, 1, 1000);
    
    // Fade out the sound once the previous fade has ended.
    sound.once('fade', function(){
      sound.fade(1, 0, 1000);
    });
    

    New Features

    • Lots of general code cleanup, simplification and reorganization.
    • Howler.js is now modularized. The core represents the initial goal for howler.js with 100% compatibility across HTML5 Audio and Web Audio. The spatial plugin adds spatial and stereo support through Web Audio API.
    • The new structure allows for full control of sprite playback (this was buggy or didn't work at all before).
    • New once method to setup event listeners that will automatically remove themselves once fired.
    • New playing method that will return true if the specified sound is currently playing.
    • New duration method that will return the duration of the audio source.
    • New state method that will return the loaded state of the Howl.
    • New preload option to allow disabling the auto-preload functionality.
    • New events: fade, stop, mute, volume, rate, seek.
    • New rate method that allows changing playback rate at runtime.
    • New global unload method that unloads all active Howls and resets the AudioContext to clear memory.
    • New pool option to allow setting the inactive sound pool size (for advanced use, still defaults to 5).
    • Support for playback of Dolby Audio files.
    • Support for .webm extension in addition to .weba.
    • Support for playback of CAFF audio files.
    • (Spatial) New Howler listener methods stereo, pos and orientation.
    • (Spatial) New Howl methods stereo, pos, orientation and pannerAttr to control stereo and spatial audio of single sounds or groups of sounds.
    • (Spatial) pannerAttr allows for control of coneInnerAngle, coneOUterAngle, coneOuterGain, distanceModel, maxDistance, panningModel, refDistance and rolloffFactor.
    • Third parameter to on, once and off to allow listening or removing events for only a specific sound id.
    • The following methods now alter all sounds within a Howl group when no id is passed: pause, stop, volume, fade, mute, loop, rate.
    • New codec recommendations and notes have been added to the documentation.
    • Web Audio AudioContext now automatically suspends and resumes to lower processing and power usage.

    Bug Fixes

    • Improved the ext option and made it especially usefully for playing streams (for example, SoundCloud).
    • The fade method now uses native Web Audio fading when in that mode.
    • Fades are now automatically stopped when a new one is started, volume is changed or the sound is paused/stopped.
    • Moved any needed try/catch statements into own methods to prevent de-optimization in V8 and others.
    • Automatically checks for disabled audio in Internet Explorer.
    • An internal event queue is now used to fix issues caused by multiple actions pre-load.
    • When using Web Audio, a panner node is only added when spatial audio is used.
    • The rate option now changes the playback rate on both Web Audio and HTML5 Audio.
    • The event system has been overhauled to be more reliable.
    • Methods called before a sound has loaded no longer cause events to stick in the queue.
    • The end event correctly fires at the end of each loop when using Web Audio.
    • Several issues with playback of sprites.
    • Several issues with playback timing after pausing sounds.
    • Improved support for seeking a sound while it is playing.
    • When playback rate is changed, the end event now fires at the correct time.
    • Potential memory leak when using the unload method.
    • Calling pause on a sound that hasn't yet loaded now works correctly.
    • Muting a sound while it is fading now works.
    • Playback of base64 encoded sounds in Internet Explorer 9.
    • MIME check for some base64 encoded MP3's.
    • Now tries to automatically unlock audio on mobile browsers besides Mobile Safari.
    • Falls back to HTML5 Audio when loading an HTTP file on an HTTPS page (avoids Mixed Content errors).
    • Stopping a stream is now possible, along with various other fixes.
    • Audio on Chrome for Android no longer gets stuck after a period of inactivity.
    • Crash in iOS <9 webview.
    • Bug in iOS that can cause audio distortion when opening/closing browser.
    • Only setup AudioContext after first Howl is setup so that background audio on mobile devices behaves as expected.
    Source code(tar.gz)
    Source code(zip)
🎚️ Open Source Audio Matching and Mastering

Matching + Mastering = ❤️ Matchering 2.0 is a novel Containerized Web Application and Python Library for audio matching and mastering. It follows a si

Sergey Grishakov 489 Sep 14, 2021
The fre:ac audio converter project

fre:ac - free audio converter fre:ac is a free and open source audio converter. It supports audio CD ripping and tag editing and converts between vari

Robert Kausch 619 Sep 24, 2021
Music player and music library manager for Linux, Windows, and macOS

Quod Libet: an audio library, manager & player Quod Libet is a cross-platform audio / music management program. It provides many ways to view your loc

Quod Libet 1k Sep 16, 2021
Ear-bending noises and music

Cecilia5 - the audio processing toolbox Cecilia is an audio signal processing environment. Cecilia lets you create your own GUI (grapher, sliders, tog

Olivier Bélanger 128 Sep 12, 2021
Python library for audio and music analysis

librosa A python package for music and audio analysis. Documentation See https://librosa.org/doc/ for a complete reference manual and introductory tut

librosa 4.7k Sep 15, 2021
Audio Editor

Audacity is an easy-to-use, multi-track audio editor and recorder for Windows, Mac OS X, GNU/Linux and other operating systems. Developed by a group o

Audacity 6.4k Sep 17, 2021
Full-featured CD/DVD/Blu-ray burning and ripping application

K3b Version 18.04.0 Thanx for downloading K3b - The CD Kreator These are the features so far: - the most userfriendly interface ever ;-) - thema

KDE GitHub Mirror 73 Sep 18, 2021
A Music programming language. Translates source code into MIDI. Includes a player. Supports MIDI-Karaoke. Includes a MIDI analyzer.

Get Started | Features | Screenshots | Programming | CLI | Contribute | License Midica is an interpreter for a Music Programming Language. It translat

Jan Trukenmüller 47 Sep 17, 2021
Python CD-DA ripper preferring accuracy over speed

Whipper Whipper is a Python 3 (3.6+) CD-DA ripper based on the morituri project (CDDA ripper for *nix systems aiming for accuracy over speed). It star

null 554 Sep 19, 2021
The git repository of the advanced drum machine

Hydrogen drum machine Hydrogen is an advanced drum machine for GNU/Linux, Mac and Windows. It's main goal is to bring professional yet simple and intu

Hydrogen 702 Sep 15, 2021
music library manager and MusicBrainz tagger

beets Beets is the media library management system for obsessive music geeks. The purpose of beets is to get your music collection right once and for

beetbox 10.4k Sep 15, 2021
Mopidy is an extensible music server written in Python

Mopidy Mopidy is an extensible music server written in Python. Mopidy plays music from local disk, Spotify, SoundCloud, Google Play Music, and more. Y

Mopidy 7.2k Sep 17, 2021
A powerful, beautiful, and simple podcast client for the modern free desktop.

Vocal The podcast client for the modern free desktop. Vocal is a powerful, fast, and intuitive application that helps users find new podcasts, manage

Needle & Thread 302 Sep 7, 2021
Fork of the original rubyripper from code.google.com/p/rubyripper + some bugs fixes

Historical note Introduction Secure rip method How to install MacOS Support FAQ Running all tests Historical note This is an unofficial fork of the or

null 91 Aug 11, 2021
🎵 Music notation engraving library for MEI with MusicXML and Humdrum support and various toolkits (JavaScript, Python)

Verovio is a fast, portable and lightweight library for engraving Music Encoding Initiative (MEI) digital scores into SVG images. Verovio also contain

RISM Digital Center 426 Sep 22, 2021
OpenSheetMusicDisplay renders sheet music in MusicXML format in your web browser based on VexFlow. OSMD is brought to you by PhonicScore.com.

OpenSheetMusicDisplay (OSMD) A MusicXML renderer for the Browser opensheetmusicdisplay.org About OSMD • Demo • Key Features • Limitations • How to Use

Open Sheet Music Display 800 Sep 15, 2021
🐦 A personal music streaming server that works.

koel Intro Koel (also stylized as koel, with a lowercase k) is a simple web-based personal audio streaming service written in Vue on the client side a

Koel 12.8k Sep 17, 2021
LibreTime: Radio Broadcast & Automation Platform

LibreTime makes it easy to run your own online or terrestrial radio station. It is a community managed fork of the AirTime project. It is managed by a

LibreTime: Radio Broadcast & Automation Platform 515 Sep 17, 2021