summaryrefslogtreecommitdiff
path: root/blockly/accessible/audio.service.js
blob: c358c083bf687f41d32110690dda13d2ecf83ebe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/**
 * AccessibleBlockly
 *
 * Copyright 2016 Google Inc.
 * https://developers.google.com/blockly/
 *
 * Licensed under the Apache License, Version 2.0 (the 'License');
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an 'AS IS' BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/**
 * @fileoverview Angular2 Service that plays audio files.
 * @author sll@google.com (Sean Lip)
 */

blocklyApp.AudioService = ng.core
  .Class({
    constructor: [function() {
      // We do not play any audio unless a media path prefix is specified.
      this.canPlayAudio = false;
      if (ACCESSIBLE_GLOBALS.hasOwnProperty('mediaPathPrefix')) {
        this.canPlayAudio = true;
        var mediaPathPrefix = ACCESSIBLE_GLOBALS['mediaPathPrefix'];
        this.AUDIO_PATHS_ = {
          'connect': mediaPathPrefix + 'click.mp3',
          'delete': mediaPathPrefix + 'delete.mp3'
        };
      }

      // TODO(sll): Add ogg and mp3 fallbacks.
      this.cachedAudioFiles_ = {};
    }],
    play_: function(audioId) {
      if (this.canPlayAudio) {
        if (!this.cachedAudioFiles_.hasOwnProperty(audioId)) {
          this.cachedAudioFiles_[audioId] = new Audio(
              this.AUDIO_PATHS_[audioId]);
        }
        this.cachedAudioFiles_[audioId].play();
      }
    },
    playConnectSound: function() {
      this.play_('connect');
    },
    playDeleteSound: function() {
      this.play_('delete');
    }
  });