How to play a sound with variations¶
One of the ways to make your machine more professional is to use different variations of sounds in your machine. This will add variety and make your audio less predictable and more “alive”. This guide explains how to play a sound with multiple variations in your machine. Sound support is part of the MPF media controller and only available if you’re using MPF-MC for your media controller. This guide assumes you have already configured your sound system for your machine and are familiar with the basic sound setup concepts. If not, please start with the Setting up sound for your machine guide first.
1. An brief introduction to sound pools¶
Sound pools allow you to group multiple sounds together and treat the pool as a single sound. Each time a sound pool is played, it selects a sound from its group of sounds. The selection can be configured to be random or in a particular sequence. For more complete information, please read the sound_pools documentation.
Although sound pools can be used to play a random music track or random callout when an event occurs, in this guide we will be using a sound pool to play variations of a sound when a slingshot is hit.
2. Add a sound and some variations¶
Before we can create our sound pool, we first need to configure the individual sounds that will
make up our pool. We’ve decided we want to have a small ding (like a triangle hit) play whenever
the slingshot is hit. Let’s start by adding our basic sound to our sound assets. The hardest part
of this process is to either generate or find the sound you want (we won’t go into that process
here). Once you have your sound file, put it in the appropriate sound asset folder. I found a
simple triangle sound on www.freesound.org that we’ll use here,
13147__looppool__triangle1.wav. Place the file in your sound effects track folder
<machine_folder>/sounds/sfx). Now we’ll add it to your machine configuration file, but give
it an easier name to remember (
triangle_01) using the
file: setting (or you could simply
rename the file to triangle_01.wav and omit the file: setting):
sounds: triangle_01: file: 13147__looppool__triangle1.wav volume: 0.7
Now add a few variations of the sound. I used my favorite sound editor to slightly adjust the
pitch and frequency content of the triangle sound file, creating three variations. You can also
just find some other similar sounds on the internet. After you have your variations, place them in
the same directory as your first sound file. We are now ready to add them to the
section in the machine configuration file (I named the sound variations triangle_02,
triangle_03, and triangle_04:
sounds: triangle_01: file: 13147__looppool__triangle1.wav volume: 0.7 triangle_02: volume: 0.7 triangle_03: volume: 0.7 triangle_04: volume: 0.7
3. Configure the sound pool¶
We now have 4 variations of the same basic triangle sound. It’s time to put them all into a single
sound pool object so we can treat them as a single sound. To do so, we need to add a
sound_pools: section to our machine configuration file as follows:
sound_pools: triangle: type: random sounds: - triangle_01 - triangle_02 - triangle_03 - triangle_04
We now have a sound pool asset called
triangle that acts just like a sound asset, except that
triangle is played, one of the 4 sound variations contained in the sound pool will
randomly be selected to be played. Want to add more variations or take one out? It’s just as
simple as modifying the list of sounds in the sound pool.
This is great, but let’s adjust the sound pool settings a bit to fine tune its behavior. We
really want the main sound (
triangle_01) to be played more often than the other sounds. How
can we make that happen? It’s very easy to do. We can add weights to each sound in the pool that
specify the probability of each sound being selected. Let’s look at our
sound_pools: triangle: type: random sounds: - triangle_01|5 - triangle_02|2 - triangle_03|2 - triangle_04|1
Notice we’ve added a pipe character (
|) to the end of each sound followed by a numeric value.
These values assign a relative weight to each sound that will be used in the random selection
triangle_01 has a relative weight of
5 out of a total weighting of
(simply add all the weight values), therefore its probability of being selected is
|1 appended to
triangle_04 is unnecessary because a relative weight of
1 is the default
value for all sounds in the pool that do not have explicit weight values assigned.
That’s it. Your sound pool has been configured to play a weighted random variation of our triangle
sound every time the
triangle sound pool is played. For additional sound pool setting options,
take a look at the sound_pools documentation.