Skip to content

Instantly share code, notes, and snippets.

@hemepositive
Forked from astagi/appdemo.js
Created June 21, 2018 12:54
Show Gist options
  • Save hemepositive/0e78a7febf4b0ec599642cdaad14fd99 to your computer and use it in GitHub Desktop.
Save hemepositive/0e78a7febf4b0ec599642cdaad14fd99 to your computer and use it in GitHub Desktop.
Text to speech Angular Service
var app = angular.module('demo', ['textToSpeech']);
app.controller('demoCtrl', function($scope, $timeout, textToSpeech) {
textToSpeech.onVoiceReady(function(){
textToSpeech.speak(
'You worked 9 hours!!',
'UK English Male',
{pitch: 2}
).then(function() {
alert('Finish!');
}, function(err) {
alert('Error! ' + err);
});
});
});
<!DOCTYPE html>
<html ng-app="demo">
<head>
<meta charset="utf-8">
<title>ng-nephila demo</title>
<script src="lib/angular/angular.min.js"></script>
<script src='http://code.responsivevoice.org/responsivevoice.js'></script>
<script src="js/text-to-speech.js"></script>
<script src="js/appdemo.js"></script>
</head>
<body ng-controller="demoCtrl"></body>
</html>
angular.module('textToSpeech', [])
.factory('textToSpeech', ['$timeout', '$q', function($timeout, $q) {
var ready = false;
var readyCallback;
responsiveVoice.OnVoiceReady = function() {
if (ready === false) {
if (readyCallback !== undefined) {
readyCallback.call();
}
ready = true;
}
}
return {
isReady: function() {
return ready;
},
onVoiceReady: function(callback) {
readyCallback = callback;
},
speak: function(text, voice, options) {
var q = $q.defer();
if (voice === undefined) {
voice = 'UK English Male';
}
if (options === undefined) {
options = {};
}
options.onend = function() {
q.resolve();
}
$timeout(function() {
try {
responsiveVoice.speak(text, voice, options);
} catch (err) {
q.reject(err);
}
}, 1);
return q.promise;
}
}
}]);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment