Hi Jaqueline,
In your example you use vibrate, and not an mp3 file. To note about vibrate is that you cannot control the volume from your app, and you cannot stop the vibration once started.
If you want a solution with vibrate, then this is one, that I pulled from my morse app made earlier:

As you will note, everything is fixed here, but you can make it flexible by replacing all constants with a multiplication factor, like this:

If you replace all millisecond values in the nextsound procedure like this, it will adjust the length of the vibrations, but very important, also the length of the silence between vibrations. I carefully researched what the proportion of these lengths should be at websites about morse code, when I made that app.
I think you must be careful to change the speed at unexpected moments, because you would not be able to distinguish a dash from a dot anymore.
If you would want to use an mp3 file, you could take one that has a really long beep, and instead of saying vibrate for so many milliseconds, set a timer interval for a second clock and start the player with that long mp3 ile. At the timer event for that second clock you could stop the player and disable that clock. I do not know how accurate that would be.
Cheers, Ghica.