acss_renderer.js 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.AcssRenderer = void 0;
  4. const EngineConst = require("../common/engine_const.js");
  5. const EventUtil = require("../common/event_util.js");
  6. const AudioUtil = require("./audio_util.js");
  7. const markup_renderer_js_1 = require("./markup_renderer.js");
  8. class AcssRenderer extends markup_renderer_js_1.MarkupRenderer {
  9. markup(descrs) {
  10. this.setScaleFunction(-2, 2, 0, 10, 0);
  11. const markup = AudioUtil.personalityMarkup(descrs);
  12. const result = [];
  13. const currentPers = { open: [] };
  14. let pause = null;
  15. let isString = false;
  16. for (let i = 0, descr; (descr = markup[i]); i++) {
  17. if (AudioUtil.isMarkupElement(descr)) {
  18. AudioUtil.mergeMarkup(currentPers, descr);
  19. continue;
  20. }
  21. if (AudioUtil.isPauseElement(descr)) {
  22. if (isString) {
  23. pause = AudioUtil.mergePause(pause, descr, Math.max);
  24. }
  25. continue;
  26. }
  27. const str = '"' + this.merge(descr.span) + '"';
  28. isString = true;
  29. if (pause) {
  30. result.push(this.pause(pause));
  31. pause = null;
  32. }
  33. const prosody = this.prosody_(currentPers);
  34. result.push(prosody ? '(text (' + prosody + ') ' + str + ')' : str);
  35. }
  36. return '(exp ' + result.join(' ') + ')';
  37. }
  38. error(key) {
  39. return '(error "' + EventUtil.Move.get(key) + '")';
  40. }
  41. prosodyElement(key, value) {
  42. value = this.applyScaleFunction(value);
  43. switch (key) {
  44. case EngineConst.personalityProps.RATE:
  45. return '(richness . ' + value + ')';
  46. case EngineConst.personalityProps.PITCH:
  47. return '(average-pitch . ' + value + ')';
  48. case EngineConst.personalityProps.VOLUME:
  49. return '(stress . ' + value + ')';
  50. }
  51. return '(value . ' + value + ')';
  52. }
  53. pause(pause) {
  54. return ('(pause . ' +
  55. this.pauseValue(pause[EngineConst.personalityProps.PAUSE]) +
  56. ')');
  57. }
  58. prosody_(pros) {
  59. const keys = pros.open;
  60. const result = [];
  61. for (let i = 0, key; (key = keys[i]); i++) {
  62. result.push(this.prosodyElement(key, pros[key]));
  63. }
  64. return result.join(' ');
  65. }
  66. }
  67. exports.AcssRenderer = AcssRenderer;