sc-voice
Version:
SuttaCentral Voice
270 lines (263 loc) • 8.1 kB
JavaScript
(typeof describe === 'function') && describe("playlist", function() {
const should = require("should");
const fs = require('fs');
const { logger, } = require('log-instance');
logger.logLevel = 'error';
const path = require('path');
const {
ScApi,
} = require('suttacentral-api');
const {
Playlist,
SCAudio,
SoundStore,
Sutta,
SuttaFactory,
Voice,
} = require('../index');
this.timeout(15*1000);
var suttas = [
new Sutta({
sutta_uid: 'test1',
author_uid: 'test-author1',
sections: [{
segments: [{
scid: 'test1:1.1',
pli: 'test1:pli1.1',
en: 'test1:en1.1',
de: 'test1:de1.1',
},{
scid: 'test1:1.2',
pli: 'test1:pli1.2',
de: 'test1:de1.2',
}],
}],
}),
new Sutta({
sutta_uid: 'test2',
author_uid: 'test-author2',
sections: [{
segments: [{
scid: 'test2:1.1',
pli: 'test2:pli1.1',
en: 'test2:en1.1',
de: 'test2:de1.2',
},{
scid: 'test2:1.2',
pli: 'test2:pli1.2',
}],
}],
}),
new Sutta({
sutta_uid: 'test3',
author_uid: 'test-author3',
sections: [{
segments: [{
scid: 'test3:1.1',
pli: 'Taṃ kissa hetu?',
en: 'Why is that?',
}],
},{
segments: [{
scid: 'test3:2.1',
pli: 'abhikkantaṃ, bhante',
en: 'Excellent, sir!',
},{
scid: 'test3:2.2',
pli: 'Nandī dukkhassa mūlan’ti',
en: 'Delight is the root of suffering',
}],
}],
}),
];
it("playlist() constructs a playlist", function() {
var pl = new Playlist();
should(pl).instanceOf(Playlist);
should.deepEqual(pl.languages, ['pli', 'en']);
should.deepEqual(pl.tracks, []);
should(pl.maxSeconds).equal(0); // unlimited
});
it("playlist(opts) constructs custom playlist", function() {
var pl = new Playlist({
languages: ['de','fr'],
});
should(pl).instanceOf(Playlist);
should.deepEqual(pl.languages, ['de','fr']);
should.deepEqual(pl.tracks, []);
should(pl.maxSeconds).equal(0); // unlimited
});
it("addSutta(sutta) adds a sutta", function() {
var pl = new Playlist();
pl.addSutta(suttas[0]);
should(pl.tracks.length).equal(1);
should.deepEqual(pl.tracks.map(s=>(s.sutta_uid)), [
'test1',
]);
should.deepEqual(pl.author_uids(),['test-author1']);
pl.addSutta(suttas[1]);
should(pl.tracks.length).equal(2);
should.deepEqual(pl.tracks.map(s=>(s.sutta_uid)), [
'test1',
'test2',
]);
should.deepEqual(pl.author_uids(),['test-author1', 'test-author2']);
});
it("stats() adds a sutta", function() {
var pl = new Playlist({
languages:['de','pli'],
});
should.deepEqual(pl.stats(),{
tracks: 0,
duration: 0,
chars: {
de: 0,
pli: 0,
},
segments: {
de: 0,
pli: 0,
},
});
pl.addSutta(suttas[0]);
should.deepEqual(pl.stats(),{
tracks: 1,
chars: {
de: 22,
pli: 24,
},
duration: 5,
segments: {
de: 2,
pli: 2,
},
});
pl.addSutta(suttas[1]);
should.deepEqual(pl.stats(),{
tracks: 2,
chars: {
de: 33,
pli: 48,
},
duration: 8,
segments: {
de: 3,
pli: 4,
},
});
});
it("addSutta(sutta) adds dn33", async()=>{
var scApi = await new ScApi().initialize();
var factory = new SuttaFactory({
scApi,
});
var sutta = await factory.loadSutta('dn33');
var pl = new Playlist();
pl.addSutta(sutta);
should.deepEqual(pl.stats(), {
tracks: 2,
chars: {
en: 84701,
pli: 80393,
},
segments: {
en: 1157,
pli: 1158,
},
duration: 14640,
});
});
it("addTrack(sutta_uid, segmentsOrMessage) adds a track", function(done) {
(async function() { try {
var pl = new Playlist();
pl.addTrack("error123", "this is a test");
should.deepEqual(pl.stats(), {
tracks: 1,
chars: {
en: 14,
pli: 0,
},
segments: {
en: 1,
pli: 0,
},
duration: 2,
});
done();
} catch(e) { done(e); } })();
});
it("speak(opts) adds voice audio", async()=>{
var scApi = await new ScApi().initialize();
var factory = new SuttaFactory({
scApi,
});
var sutta = await factory.loadSutta('an1.31-40');
var voices = {
pli: Voice.createVoice({
name:'aditi',
usage: 'recite',
language: 'hi-IN',
localeIPA: 'pli',
stripNumbers: true,
stripQuotes: true,
}),
en: Voice.createVoice({name:'amy'}),
};
var pl = new Playlist({
languages: ['pli', 'en'], // speaking order
});
pl.addSutta(sutta);
var result = await pl.speak({
voices,
volume: 'test-playlist',
});
should(result.signature.guid)
.match(/20446b264163820392a0b4cb06bbf538/);
});
it("speak(opts) adds break between suttas", async()=>{
var scApi = await new ScApi().initialize();
var factory = new SuttaFactory({
scApi,
});
var suttas = [
await factory.loadSutta('thig2.6'),
await factory.loadSutta('thig2.7'),
];
var voices = {
pli: Voice.createVoice({
name:'aditi',
usage: 'recite',
language: 'hi-IN',
localeIPA: 'pli',
stripNumbers: true,
stripQuotes: true,
}),
en: Voice.createVoice({name:'amy'}),
};
var pl = new Playlist({
languages: ['en'], // speaking order
});
suttas.forEach(s=>pl.addSutta(s));
var result = await pl.speak({
voices,
volume: 'test-playlist',
});
should(result.signature.guid)
.match(/5ed32b94d5a03f03d3fd19ec8a34b642/);
});
it("speak(opts) creates opus audio file", async()=>{
var scApi = await new ScApi().initialize();
var factory = new SuttaFactory({ scApi, });
var sutta = await factory.loadSutta('sn2.3');
var voiceTrans = Voice.createVoice({ name: 'matthew', });
var voices = { en: voiceTrans, };
var pl = new Playlist({
languages: ['en'], // speaking order
});
pl.addSutta(sutta);
var result = await pl.speak({
voices,
volume: 'test-playlist',
});
should(result.signature.guid).match(/46c11e7f9cb21cbf941b28845f373bae/);
});
})