Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(851)

Unified Diff: ui/keyboard/resources/elements/kb-keyboard.html

Issue 183893033: Use a sound pool instead of a single audio tag. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@consistant-css
Patch Set: Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ui/keyboard/resources/elements/kb-keyboard.html
diff --git a/ui/keyboard/resources/elements/kb-keyboard.html b/ui/keyboard/resources/elements/kb-keyboard.html
index f69f242d2977479a1c59285383531071ac39921b..a884c1c97a8c2910f083be5bc8755c5d91a1cd01 100644
--- a/ui/keyboard/resources/elements/kb-keyboard.html
+++ b/ui/keyboard/resources/elements/kb-keyboard.html
@@ -334,12 +334,16 @@
// Check if already loaded.
if (soundId == Sound.NONE || this.sounds[soundId])
return;
- var audio = document.createElement('audio');
- audio.preload = "auto";
- audio.id = soundId;
- audio.src = "../sounds/" + soundId + ".wav";
- audio.volume = this.volume;
- this.sounds[soundId] = audio;
+ var pool = [];
+ for (var i = 0; i < SOUND_POOL_SIZE; i++) {
+ var audio = document.createElement('audio');
+ audio.preload = "auto";
+ audio.id = soundId;
+ audio.src = "../sounds/" + soundId + ".wav";
+ audio.volume = this.volume;
+ pool.push(audio);
+ }
+ this.sounds[soundId] = pool;
},
/**
@@ -541,6 +545,7 @@
repeatKey.timer = setTimeout(function() {
repeatKey.timer = undefined;
repeatKey.interval = setInterval(function() {
+ self.playSound(detail.sound);
self.keyTyped(detail);
}, REPEAT_INTERVAL_MSEC);
}, Math.max(0, REPEAT_DELAY_MSEC - REPEAT_INTERVAL_MSEC));
@@ -798,11 +803,18 @@
playSound: function(sound) {
if (!sound || sound == Sound.NONE)
return;
- var soundElement = this.sounds[sound];
- if (!soundElement)
+ var pool = this.sounds[sound];
+ if (!pool) {
console.error("Cannot find audio tag: " + sound);
- else
- soundElement.play();
+ return;
+ }
+ // Search the sound pool for a free resource.
+ for (var i = 0; i < pool.length; i++) {
+ if (pool[i].paused) {
+ pool[i].play();
+ return;
+ }
+ }
},
/**
@@ -911,9 +923,12 @@
* Callback function for when volume is changed.
*/
volumeChanged: function() {
- var toChange = keys(this.sounds);
+ var toChange = Object.keys(this.sounds);
for (var i = 0; i < toChange.length; i++) {
- this.sounds[toChange[i]].volume = this.volume;
+ var pool = this.sounds[toChange[i]];
+ for (var j = 0; j < pool.length; j++) {
+ pool[j].volume = this.volume;
+ }
}
},

Powered by Google App Engine
This is Rietveld 408576698