add initial marp implementation with sample content and build configuration
This commit is contained in:
63
node_modules/speech-rule-engine/mjs/audio/acss_renderer.js
generated
vendored
Normal file
63
node_modules/speech-rule-engine/mjs/audio/acss_renderer.js
generated
vendored
Normal file
@@ -0,0 +1,63 @@
|
||||
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(' ');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user