@hyperaudio/transcript-converter
Version:
Converts various formats of JSON transcripts to Hyperaudio format
76 lines (74 loc) • 2.98 kB
JavaScript
export default (function (input) {
var format = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "flat";
var offsets = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
var digits = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 2;
return new Promise(function (resolve, reject) {
try {
var unit = 1e3;
if (format === "sm") unit = 1;
resolve({
words: input.words.map(function (w) {
return {
text: w.name,
start: parseFloat((w.time / unit).toFixed(digits)),
end: parseFloat((w.time / unit + w.duration / unit).toFixed(digits))
};
}),
paragraphs: format === "sm" ? input.speakers.map(function (s) {
return {
speaker: s.name,
start: parseFloat((s.time / unit).toFixed(digits)),
end: parseFloat((s.time / unit + s.duration / unit).toFixed(digits))
};
}) : input.words.reduce(function (acc, w) {
var p = acc.lenght > 1 ? acc[acc.length - 1] : {};
if (p.id !== w.para) {
acc.push({
id: w.para,
start: parseFloat((w.time / unit).toFixed(digits)),
end: parseFloat((w.time / unit + w.duration / unit).toFixed(digits)),
speaker: input.speakers[w.speaker] ? input.speakers[w.speaker].name : null
});
} else {
p.end = parseFloat((w.time / unit + w.duration / unit).toFixed(digits));
}
return acc;
}, []).map(function (p) {
delete p.id;
return p;
})
// speakers: format === `sm` ? input.speakers.map(s => {
// return {
// name: s.name,
// start: parseFloat((s.time / unit).toFixed(digits)),
// end: parseFloat((s.time / unit + s.duration / unit).toFixed(digits))
// };
// }) : /*Object.keys(input.words.reduce((acc, w) => {
// const speaker = input.speakers[w.speaker] ? input.speakers[w.speaker].name : null;
// if (speaker) acc[speaker] = w.speaker;
// return acc;
// }, {}))*/
// input.words.reduce((acc, w) => {
// const p = acc.lenght > 1 ? acc[acc.length - 1] : {};
// if (p.id !== w.para) {
// acc.push({
// id: w.para,
// start: parseFloat((w.time / unit).toFixed(digits)),
// end: parseFloat((w.time / unit + w.duration / unit).toFixed(digits)),
// name: input.speakers[w.speaker] ? input.speakers[w.speaker].name : null
// });
// } else {
// p.end = parseFloat((w.time / unit + w.duration / unit).toFixed(digits));
// }
//
// return acc;
// }, []).map(p => {
// delete p.id;
// return p;
// })
});
} catch (error) {
reject(error);
}
});
});