Procedurally generates a radio weather report

improve conditions

Changed files
+7 -7
config
src
test
+4 -4
config/config.example.json5
··· 49 49 "hilo 1": { 50 50 "tracks": [ 51 51 "audio/hi_01.flac", 52 - "%cory hi", 52 + "%cory weather.temp.max", 53 53 "audio/lo_01.flac", 54 - "%cory lo" 54 + "%cory weather.temp.min" 55 55 ] 56 56 }, 57 57 "hilo 2": { 58 58 "tracks": [ 59 59 "audio/hi_02.flac", 60 - "%cory hi", 60 + "%cory weather.temp.max", 61 61 "audio/lo_02.flac", 62 - "%cory lo" 62 + "%cory weather.temp.min" 63 63 ] 64 64 }, 65 65 "rain 1": {
+1 -1
src/sequencer.ts
··· 77 77 78 78 function processSegment(segment: SegmentName, currentWeather: CurrentWeather): string[] { 79 79 if (!(segment in config.segments)) { 80 - return processSequence(config.sequences[segment], currentWeather); 80 + return (config.sequences[segment].conditions || []).every(c => conditionIsMet(c, currentWeather)) ? processSequence(config.sequences[segment], currentWeather) : []; 81 81 } 82 82 const potentialSequences: SequenceName[] = config.segments[segment].filter(s => (config.sequences[s].conditions || []).every(c => conditionIsMet(c, currentWeather))); 83 83 if (potentialSequences.length === 0) {
+2 -2
test/sequencer.test.ts
··· 83 83 84 84 it('can include tracks conditionally', async () => { 85 85 expect(await Sequencer({ 86 - programs: [['segment 1', 'segment 2']], 86 + programs: [['segment 1', 'sequence 1', 'segment 2', 'sequence 2']], 87 87 segments: { 88 88 'segment 1': ['sequence 1'], 89 89 'segment 2': ['sequence 2'] ··· 104 104 }, 105 105 voices: {}, 106 106 weather: dummyWeather 107 - })).to.be.ordered.members(['seq1.flac']); 107 + })).to.be.ordered.members(['seq1.flac', 'seq1.flac']); 108 108 }); 109 109 }); 110 110