react-use
Version:
Collection of React Hooks
36 lines (35 loc) • 1.63 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var react_1 = require("react");
var useMount_1 = tslib_1.__importDefault(require("./useMount"));
var useSetState_1 = tslib_1.__importDefault(require("./useSetState"));
var voices = typeof window === 'object' && typeof window.speechSynthesis === 'object' ? window.speechSynthesis.getVoices() : [];
var useSpeech = function (text, opts) {
if (opts === void 0) { opts = {}; }
var _a = useSetState_1.default({
isPlaying: false,
lang: opts.lang || 'default',
voice: opts.voice || voices[0],
rate: opts.rate || 1,
pitch: opts.pitch || 1,
volume: opts.volume || 1,
}), state = _a[0], setState = _a[1];
var uterranceRef = react_1.useRef(null);
useMount_1.default(function () {
var utterance = new SpeechSynthesisUtterance(text);
opts.lang && (utterance.lang = opts.lang);
opts.voice && (utterance.voice = opts.voice);
utterance.rate = opts.rate || 1;
utterance.pitch = opts.pitch || 1;
utterance.volume = opts.volume || 1;
utterance.onstart = function () { return setState({ isPlaying: true }); };
utterance.onresume = function () { return setState({ isPlaying: true }); };
utterance.onend = function () { return setState({ isPlaying: false }); };
utterance.onpause = function () { return setState({ isPlaying: false }); };
uterranceRef.current = utterance;
window.speechSynthesis.speak(uterranceRef.current);
});
return state;
};
exports.default = useSpeech;