In our application we use PhoneGap to interact with the device. We've implemented a custom plugin in PhoneGap to play the default tick sound (fastest way to play sounds possible).

As for the Sencha part, we've overriden the onTap function of Ext.Button to send a signal to PhoneGap to play the tick sound.

Override buttons to play the default sound

Code:
// Adds a sound to button tap
Ext.define('Enhancements.Button', {
    override: 'Ext.Button',
    onTap: function(e) {
        if (this.getDisabled()) {
            return false;
        }


        common.playAlertSound();
        this.fireAction('tap', [this, e], 'doTap');
    }
});
Objective C for playing the iOS default sound
Code:
- (void) playAlertSound:(NSMutableArray *)arguments withDict:(NSMutableDictionary *)options {
    AudioServicesPlayAlertSound(0x450);
}
Feel free to use the code above in your own projects.

Two questions:
  1. Is this the proper way to add the common.playAlertSound invoke to all buttons?
  2. In some situations we have quite a lot of logic going on after you tap on a button. This causes load to the browser and therefore delaying the tick sound. How could I solve this? Perhaps delay the actual action that is called on button tap?