TEsound
Contents
About
TEsound is a sound manager for the Love2D framework. TEsound is intended to make using sounds and music in your games easier.
It's under the zlib license, but if your game ends up making a lot of money, maybe you could please consider sending a little bit of it my way? ;)
Download
Contact
- Forum Thread
- Ensayia - Ensayia@gmail.com
- Taehl - SelfMadeSpirit@gmail.com
Setup
Everything in the module is contained in the TEsound namespace, so don't worry about it messing with your global variables. Memory and channel management is automatic.
- Put TEsound.lua in your game's folder
- At the top of main.lua, add the line: require"TEsound"
- In love.update(), add the line: TEsound.cleanup()
Functions
Playback Functions
TEsound.play
TEsound.play(sound, tags, volume, pitch, func)
Plays a sound. Returns either the number of the channel the sound is playing in, or nil and an error message.
string or table sound
- A filepath to the sound file (example: "sounds/jump.ogg"), or a list of filepaths. If a list is used, a random sound from that list will be played.
string or table tags (optional)
- One or more tags that can be used to identify a sound (Example, single: "music". Example, multiple: {"sfx", "gun", "player"}). Multiple sounds may share tags, or tags may be unique. If omitted, no tags are assigned.
number volume (optional)
- A number between 0 and 1 which specifies how loud a sound is. If the sound has a tag which a volume has been specified for, it will multiply this number (ie., if you use the tag "sfx" and volume 0.5, and "sfx" has been tagVolume-ed to 0.6, then the sound will be played at 0.3 volume). If omitted, the number 1 will be used.
number pitch (optional)
- A number which specifies the speed/pitch the sound will be played it. If the sound has a tag which a pitch has been specified for, it will multiply this number. If omitted, the number 1 will be used.
number func (optional)
- A function which will be called when the sound is finished playing (it's passed one parameter - a list with the sound's volume and pitch). If omitted, no function will be used.
TEsound.playLooping
TEsound.playLooping(sound, tags, n, volume, pitch)
Plays a sound which will repeat be repeated n times. If n isn't given, it will loop until stopped manually with TEsound.stop. Returns either the number of the channel the sound is playing in, or nil and an error message.
string or table sound
- See TEsound.play
string or table tags
- See TEsound.play
number n
- The number of times the sound will be looped. If omitted, the sound will loop forever.
number volume
- See TEsound.play
number pitch
- See TEsound.play
Sound Modification Functions
TEsound.volume(channel, volume) Sets the volume of channel/tag and its loops (if any). channel (number or string) - Determines which channel will be affected. If a number, a channel will be set directly; if a string, all channels playing a sound with that tag will be affected. Since sound channels aren't static, it's generally advisible to use the tag method. volume (optional number) - See TEsound.play. If omitted, the sound's volume won't be changed (pointless in most cases).
TEsound.pitch(channel, pitch) Sets the pitch of channel/tag and its loops (if any). channel (number or string) - See TEsound.volume pitch - See TEsound.play. If omitted, the sound's pitch won't be changed.
TEsound.pause(channel) Pauses a channel/tag. Use TEsound.resume to unpause. channel (number or string) - See TEsound.volume
TEsound.resume(channel) Resumes a channel/tag from a pause. channel (number or string) - See TEsound.volume
TEsound.stop(channel, finish) Stops a sound channel/tag either immediately or when finished, and prevents it from looping. channel (number or string) - See TEsound.volume finish (optional boolean) - if true, the sound will be allowed to finish playing instead of stopping immediately. This is mainly used to end a looping sound.
Utility Functions
TEsound.cleanup() Cleans up finished sounds, freeing memory. It's highly recommended you call this in love.update(). If not called, memory and channels won't be freed, and sounds won't loop.
TEsound.tagVolume(tag, volume) Change the volume level for a specified tag. Volume changes take effect immediately and last until changed again. This is recommended for changing entire categories of sounds, so you can independently adjust the volume of all sound effects, music, etc. (but don't forget to tag your sounds appropriately). If a sound has multiple tags with set volumes, the first one (in the order of its tag list) will be used. tag (string) - The tag to set the volume of. There is a special tag called "all" which will multiply ALL sounds (in addition to a regular tag, if present) - use it as a master volume control. Sounds do not need to be assigned the "all" tag for this to happen. volume (optional number) - See TEsound.play. If omitted, the tag will no longer affect the volume of matching sounds.
TEsound.tagPitch(tag, volume) Change the pitch for a specified tag. Changes take effect immediately and last until changed again. This is recommended for changing entire categories of sounds. If a sound has multiple tags with set pitches, the first one (in the order of its tag list) will be used. tag (string) - See TEsound.tagVolume pitch (optional number) - See TEsound.play. If omitted, the tag will no longer affect the pitch of matching sounds.
Internal Functions
TEsound.findTag(tag) Returns a list of all sound channels with a given tag. tag (string) - The channels of all sounds with this tag will be returned.
TEsound.findVolume(tag) Returns a volume level for a given tag or tags, or 1 if the tag(s)'s volume hasn't been set. tag (string or table) - Chooses the tag to check the volume of.
TEsound.findPitch(tag) Returns a pitch level for a given tag or tags, or 1 if the tag(s)'s pitch hasn't been set. tag (string or table) - See TEsound.findVolume
FAQ
- Q) What do I have to do to use it?
- 1) Put TEsound.lua in your game's folder.
- 2) At the top of main.lua, add require"TEsound".
- 3) In love.update(), add TEsound.cleanup().
- That's it! TEsound will automatically manage sound channels (sounds can overlap) and memory.
- Q) How do I just play a sound?
- A) All you need to do is TEsound.play(filepath), where filepath is a string like "sounds/boom.ogg".
- Q) I have three different jump sounds, how can I play one at random?
- A) TEsound.play(list), where list is a table like {"jump1.ogg", "jump2.ogg", "jump3.ogg"}
- Q) Can I make it constantly play randomized music?
- A) Sure! TEsound.playLooping(list). When one song ends, a new one from the list will automatically start playing.
- Q) Now how do I stop the music? / What are sound tags?
- A) The best way is to use TEsound's "tagging" feature. Simply put, TEsound lets you add one or more tags to each sound that's playing, and you can call various functions on all sounds with a given tag. So you could do this:
- TEsound.playLooping("song1.ogg", "music")
- TEsound.stop("music")
- Sounds can have multiple tags if you desire (use a list: TEsound.play(sound, {"something", "whatever", "lol"}), and multiple sounds can share tags (if you call something like TEsound.pitch("sfx", .5), all sounds with the "sfx" tag will immediately be low-pitched). Tags can also be unique, in case you want to work with a specific sound.
- Q) What if I want to change the volume/pitch of all sounds?
- A) That's what the special "all" tag is for. You don't need to give the tag to sounds, it's automatically applied to them. So if you wanted to cut the volume of everything in half, you just need to TEsound.tagVolume("all",.5).
- Q) I want to let the player choose different volume levels for sound effects, music, and voice-acting. Can TEsound handle it?
- A) Yep! You can set a volume multiplier for any tag with TEsound.tagVolume(tag, volume). Tag-volume changes take immediate effect (even on sounds that are already playing!). So you could use TEsound.tagVolume("voice", .75), and any sound with the "voice" tag would play at .75 volume. This is multiplied by the sound's own volume and what the "all" tag is set to - if you TEsound.play("splat.ogg", "sfx", .5), and you've set the "sfx" and "all" tags to .6 and 1 volume, then the sound would play at .3 volume.
- Q) How do I pronounce the name of your module? "Tee ee sound"?
- A) That works, but I, personally, say "teh sound" ;)
- Q) Anything else I should know?
- A) Each function has several more optional parameters - I've just covered the basics here. Check out the documentation for a full list of functions and their parameters.