Files
artcraft/typescript/audio.ts
T
Brandon Thomas 990faf3092 Add a WaveForm UI component (WaveSufer)
- Drop buzz.js for wavesurfer.js
- Wrapper in TypeScript / Webpack instead of Javascript / Gulp
2016-09-10 17:55:19 -04:00

43 lines
1.0 KiB
TypeScript

import { WordString } from './words';
// FIXME: no type declarations exist.
declare var buzz: any;
const URL_PREFIX = '/speak';
interface SoundUrl {
url: string;
}
// Convert a WordString into a SoundUrl.
function get_url(words: WordString) : SoundUrl {
let sentence = words.words.join(' ');
let url = URL_PREFIX + '?v=trump&vol=3&s=' + encodeURIComponent(sentence);
return { url: url };
}
// Use the buzz.js library to play a SoundUrl.
function play_url(soundUrl: SoundUrl) {
let sound = new buzz.sound(soundUrl.url);
sound.play();
}
// Play a WordString.
export function play(words: WordString) {
let soundUrl = get_url(words);
play_url(soundUrl);
}
// Play several WordStrings.
export function play_all(wordList: WordString[]) {
if (wordList.length == 0) return;
let soundUrl = get_url(wordList[0]);
let remainingWordList = wordList.slice(1, wordList.length);
let sound = new buzz.sound(soundUrl.url);
sound.bind('ended', function(e) { play_all(remainingWordList); });
sound.play();
}