react-say
Version:
[](https://badge.fury.io/js/react-say) [](https://travis-ci.org/compulim/react-say)
61 lines (47 loc) • 5.97 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = createNativeUtterance;
function createNativeUtterance(_ref, _ref2) {
var speechSynthesis = _ref.speechSynthesis,
SpeechSynthesisUtterance = _ref.SpeechSynthesisUtterance;
var lang = _ref2.lang,
onBoundary = _ref2.onBoundary,
pitch = _ref2.pitch,
rate = _ref2.rate,
text = _ref2.text,
voice = _ref2.voice,
volume = _ref2.volume;
var utterance = new SpeechSynthesisUtterance(text);
var targetVoice;
if (typeof voice === 'function') {
targetVoice = voice.call(speechSynthesis, speechSynthesis.getVoices());
} else {
var _ref3 = voice || {},
voiceURI = _ref3.voiceURI;
targetVoice = voiceURI && [].find.call([].slice.call(speechSynthesis.getVoices()), function (v) {
return v.voiceURI === voiceURI;
});
} // Edge will mute if "lang" is set to ""
utterance.lang = lang || '';
if (pitch || pitch === 0) {
utterance.pitch = pitch;
}
if (rate || rate === 0) {
utterance.rate = rate;
} // Cognitive Services will error when "voice" is set to "null"
// Edge will error when "voice" is set to "undefined"
if (targetVoice) {
utterance.voice = targetVoice;
}
if (volume || volume === 0) {
utterance.volume = volume;
} // Since browser quirks, start/error/end events are emulated for best compatibility
// start/error/end events are emulated in QueuedUtterance
onBoundary && utterance.addEventListener('boundary', onBoundary); // onEnd && utterance.addEventListener('end', onEnd);
// onError && utterance.addEventListener('error', onError);
// onStart && utterance.addEventListener('start', onStart);
return utterance;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jcmVhdGVOYXRpdmVVdHRlcmFuY2UuanMiXSwibmFtZXMiOlsiY3JlYXRlTmF0aXZlVXR0ZXJhbmNlIiwic3BlZWNoU3ludGhlc2lzIiwiU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlIiwibGFuZyIsIm9uQm91bmRhcnkiLCJwaXRjaCIsInJhdGUiLCJ0ZXh0Iiwidm9pY2UiLCJ2b2x1bWUiLCJ1dHRlcmFuY2UiLCJ0YXJnZXRWb2ljZSIsImNhbGwiLCJnZXRWb2ljZXMiLCJ2b2ljZVVSSSIsImZpbmQiLCJzbGljZSIsInYiLCJhZGRFdmVudExpc3RlbmVyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQWUsU0FBU0EscUJBQVQsY0FjYjtBQUFBLE1BWkVDLGVBWUYsUUFaRUEsZUFZRjtBQUFBLE1BWEVDLHdCQVdGLFFBWEVBLHdCQVdGO0FBQUEsTUFSRUMsSUFRRixTQVJFQSxJQVFGO0FBQUEsTUFQRUMsVUFPRixTQVBFQSxVQU9GO0FBQUEsTUFORUMsS0FNRixTQU5FQSxLQU1GO0FBQUEsTUFMRUMsSUFLRixTQUxFQSxJQUtGO0FBQUEsTUFKRUMsSUFJRixTQUpFQSxJQUlGO0FBQUEsTUFIRUMsS0FHRixTQUhFQSxLQUdGO0FBQUEsTUFGRUMsTUFFRixTQUZFQSxNQUVGO0FBQ0EsTUFBTUMsU0FBUyxHQUFHLElBQUlSLHdCQUFKLENBQTZCSyxJQUE3QixDQUFsQjtBQUNBLE1BQUlJLFdBQUo7O0FBRUEsTUFBSSxPQUFPSCxLQUFQLEtBQWlCLFVBQXJCLEVBQWlDO0FBQy9CRyxJQUFBQSxXQUFXLEdBQUdILEtBQUssQ0FBQ0ksSUFBTixDQUFXWCxlQUFYLEVBQTRCQSxlQUFlLENBQUNZLFNBQWhCLEVBQTVCLENBQWQ7QUFDRCxHQUZELE1BRU87QUFDTCxnQkFBcUJMLEtBQUssSUFBSSxFQUE5QjtBQUFBLFFBQVFNLFFBQVIsU0FBUUEsUUFBUjs7QUFFQUgsSUFBQUEsV0FBVyxHQUFHRyxRQUFRLElBQUksR0FBR0MsSUFBSCxDQUFRSCxJQUFSLENBQWEsR0FBR0ksS0FBSCxDQUFTSixJQUFULENBQWNYLGVBQWUsQ0FBQ1ksU0FBaEIsRUFBZCxDQUFiLEVBQXlELFVBQUFJLENBQUM7QUFBQSxhQUFJQSxDQUFDLENBQUNILFFBQUYsS0FBZUEsUUFBbkI7QUFBQSxLQUExRCxDQUExQjtBQUNELEdBVkQsQ0FZQTs7O0FBQ0FKLEVBQUFBLFNBQVMsQ0FBQ1AsSUFBVixHQUFpQkEsSUFBSSxJQUFJLEVBQXpCOztBQUVBLE1BQUlFLEtBQUssSUFBSUEsS0FBSyxLQUFLLENBQXZCLEVBQTBCO0FBQ3hCSyxJQUFBQSxTQUFTLENBQUNMLEtBQVYsR0FBa0JBLEtBQWxCO0FBQ0Q7O0FBRUQsTUFBSUMsSUFBSSxJQUFJQSxJQUFJLEtBQUssQ0FBckIsRUFBd0I7QUFDdEJJLElBQUFBLFNBQVMsQ0FBQ0osSUFBVixHQUFpQkEsSUFBakI7QUFDRCxHQXJCRCxDQXVCQTtBQUNBOzs7QUFDQSxNQUFJSyxXQUFKLEVBQWlCO0FBQ2ZELElBQUFBLFNBQVMsQ0FBQ0YsS0FBVixHQUFrQkcsV0FBbEI7QUFDRDs7QUFFRCxNQUFJRixNQUFNLElBQUlBLE1BQU0sS0FBSyxDQUF6QixFQUE0QjtBQUMxQkMsSUFBQUEsU0FBUyxDQUFDRCxNQUFWLEdBQW1CQSxNQUFuQjtBQUNELEdBL0JELENBaUNBO0FBQ0E7OztBQUVBTCxFQUFBQSxVQUFVLElBQUlNLFNBQVMsQ0FBQ1EsZ0JBQVYsQ0FBMkIsVUFBM0IsRUFBdUNkLFVBQXZDLENBQWQsQ0FwQ0EsQ0FxQ0E7QUFDQTtBQUNBOztBQUVBLFNBQU9NLFNBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZU5hdGl2ZVV0dGVyYW5jZShcbiAge1xuICAgIHNwZWVjaFN5bnRoZXNpcyxcbiAgICBTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2VcbiAgfSxcbiAge1xuICAgIGxhbmcsXG4gICAgb25Cb3VuZGFyeSxcbiAgICBwaXRjaCxcbiAgICByYXRlLFxuICAgIHRleHQsXG4gICAgdm9pY2UsXG4gICAgdm9sdW1lXG4gIH1cbikge1xuICBjb25zdCB1dHRlcmFuY2UgPSBuZXcgU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKHRleHQpO1xuICBsZXQgdGFyZ2V0Vm9pY2U7XG5cbiAgaWYgKHR5cGVvZiB2b2ljZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRhcmdldFZvaWNlID0gdm9pY2UuY2FsbChzcGVlY2hTeW50aGVzaXMsIHNwZWVjaFN5bnRoZXNpcy5nZXRWb2ljZXMoKSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgeyB2b2ljZVVSSSB9ID0gdm9pY2UgfHwge307XG5cbiAgICB0YXJnZXRWb2ljZSA9IHZvaWNlVVJJICYmIFtdLmZpbmQuY2FsbChbXS5zbGljZS5jYWxsKHNwZWVjaFN5bnRoZXNpcy5nZXRWb2ljZXMoKSksIHYgPT4gdi52b2ljZVVSSSA9PT0gdm9pY2VVUkkpO1xuICB9XG5cbiAgLy8gRWRnZSB3aWxsIG11dGUgaWYgXCJsYW5nXCIgaXMgc2V0IHRvIFwiXCJcbiAgdXR0ZXJhbmNlLmxhbmcgPSBsYW5nIHx8ICcnO1xuXG4gIGlmIChwaXRjaCB8fCBwaXRjaCA9PT0gMCkge1xuICAgIHV0dGVyYW5jZS5waXRjaCA9IHBpdGNoO1xuICB9XG5cbiAgaWYgKHJhdGUgfHwgcmF0ZSA9PT0gMCkge1xuICAgIHV0dGVyYW5jZS5yYXRlID0gcmF0ZTtcbiAgfVxuXG4gIC8vIENvZ25pdGl2ZSBTZXJ2aWNlcyB3aWxsIGVycm9yIHdoZW4gXCJ2b2ljZVwiIGlzIHNldCB0byBcIm51bGxcIlxuICAvLyBFZGdlIHdpbGwgZXJyb3Igd2hlbiBcInZvaWNlXCIgaXMgc2V0IHRvIFwidW5kZWZpbmVkXCJcbiAgaWYgKHRhcmdldFZvaWNlKSB7XG4gICAgdXR0ZXJhbmNlLnZvaWNlID0gdGFyZ2V0Vm9pY2U7XG4gIH1cblxuICBpZiAodm9sdW1lIHx8IHZvbHVtZSA9PT0gMCkge1xuICAgIHV0dGVyYW5jZS52b2x1bWUgPSB2b2x1bWU7XG4gIH1cblxuICAvLyBTaW5jZSBicm93c2VyIHF1aXJrcywgc3RhcnQvZXJyb3IvZW5kIGV2ZW50cyBhcmUgZW11bGF0ZWQgZm9yIGJlc3QgY29tcGF0aWJpbGl0eVxuICAvLyBzdGFydC9lcnJvci9lbmQgZXZlbnRzIGFyZSBlbXVsYXRlZCBpbiBRdWV1ZWRVdHRlcmFuY2VcblxuICBvbkJvdW5kYXJ5ICYmIHV0dGVyYW5jZS5hZGRFdmVudExpc3RlbmVyKCdib3VuZGFyeScsIG9uQm91bmRhcnkpO1xuICAvLyBvbkVuZCAmJiB1dHRlcmFuY2UuYWRkRXZlbnRMaXN0ZW5lcignZW5kJywgb25FbmQpO1xuICAvLyBvbkVycm9yICYmIHV0dGVyYW5jZS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIG9uRXJyb3IpO1xuICAvLyBvblN0YXJ0ICYmIHV0dGVyYW5jZS5hZGRFdmVudExpc3RlbmVyKCdzdGFydCcsIG9uU3RhcnQpO1xuXG4gIHJldHVybiB1dHRlcmFuY2U7XG59XG4iXX0=