123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- import * as EngineConst from '../common/engine_const.js';
- import * as EventUtil from '../common/event_util.js';
- import * as AudioUtil from './audio_util.js';
- import { MarkupRenderer } from './markup_renderer.js';
- export class AcssRenderer extends MarkupRenderer {
- markup(descrs) {
- this.setScaleFunction(-2, 2, 0, 10, 0);
- const markup = AudioUtil.personalityMarkup(descrs);
- const result = [];
- const currentPers = { open: [] };
- let pause = null;
- let isString = false;
- for (let i = 0, descr; (descr = markup[i]); i++) {
- if (AudioUtil.isMarkupElement(descr)) {
- AudioUtil.mergeMarkup(currentPers, descr);
- continue;
- }
- if (AudioUtil.isPauseElement(descr)) {
- if (isString) {
- pause = AudioUtil.mergePause(pause, descr, Math.max);
- }
- continue;
- }
- const str = '"' + this.merge(descr.span) + '"';
- isString = true;
- if (pause) {
- result.push(this.pause(pause));
- pause = null;
- }
- const prosody = this.prosody_(currentPers);
- result.push(prosody ? '(text (' + prosody + ') ' + str + ')' : str);
- }
- return '(exp ' + result.join(' ') + ')';
- }
- error(key) {
- return '(error "' + EventUtil.Move.get(key) + '")';
- }
- prosodyElement(key, value) {
- value = this.applyScaleFunction(value);
- switch (key) {
- case EngineConst.personalityProps.RATE:
- return '(richness . ' + value + ')';
- case EngineConst.personalityProps.PITCH:
- return '(average-pitch . ' + value + ')';
- case EngineConst.personalityProps.VOLUME:
- return '(stress . ' + value + ')';
- }
- return '(value . ' + value + ')';
- }
- pause(pause) {
- return ('(pause . ' +
- this.pauseValue(pause[EngineConst.personalityProps.PAUSE]) +
- ')');
- }
- prosody_(pros) {
- const keys = pros.open;
- const result = [];
- for (let i = 0, key; (key = keys[i]); i++) {
- result.push(this.prosodyElement(key, pros[key]));
- }
- return result.join(' ');
- }
- }
|