feat: add narrative page turn audio cue

This commit is contained in:
2026-07-22 01:21:36 +09:00
parent 3a41f8b671
commit fa26992b56
6 changed files with 91 additions and 7 deletions

View File

@@ -19,6 +19,7 @@ const requiredTacticalCueKeys = [
'objective-success',
'objective-failure'
];
const requiredNarrativeCueKeys = ['story-page-turn'];
const requiredBattleSceneAudioMethods = [
'playSoundscape',
'playAllyTurnCue',
@@ -49,6 +50,20 @@ const battlefieldSourceRecords = [
source: 'https://pixabay.com/sound-effects/film-special-effects-failure-1-89170/'
}
];
const narrativeSourceRecord = {
projectFile: 'src/assets/audio/sfx/story-page-turn.mp3',
source: 'https://pixabay.com/sound-effects/film-special-effects-flipping-book-page-499646/',
requiredDocumentation: [
'2026-07-22',
'Flipping Book Page',
'DRAGON-STUDIO',
'48 kHz stereo MP3',
'1.0-second',
'silence-trimmed',
'fade-in/out',
'high-pass and low-pass filtered'
]
};
const server = await createServer({
logLevel: 'error',
@@ -69,7 +84,9 @@ try {
validateTrackMap(errors, 'effect', effectTracks, 'sfx');
validateRequiredTrackKeys(errors, 'battlefield ambience', ambienceTracks, requiredBattlefieldAmbienceKeys);
validateRequiredTrackKeys(errors, 'tactical cue', effectTracks, requiredTacticalCueKeys);
validateRequiredTrackKeys(errors, 'narrative cue', effectTracks, requiredNarrativeCueKeys);
validateBattlefieldSourceDocumentation(errors);
validateNarrativeSourceDocumentation(errors);
validateBattleSceneAudioIntegration(errors);
validateEffectPools(errors, effectPools, effectTracks);
validateEffectPoolRegistration(errors, effectPools);
@@ -145,6 +162,21 @@ function validateBattlefieldSourceDocumentation(errors) {
});
}
function validateNarrativeSourceDocumentation(errors) {
const docs = readFileSync(join('docs', 'audio-sources.md'), 'utf8');
if (!docs.includes(narrativeSourceRecord.projectFile)) {
errors.push(`docs/audio-sources.md is missing narrative audio file "${narrativeSourceRecord.projectFile}"`);
}
if (!docs.includes(narrativeSourceRecord.source)) {
errors.push(`docs/audio-sources.md is missing Pixabay source "${narrativeSourceRecord.source}"`);
}
narrativeSourceRecord.requiredDocumentation.forEach((value) => {
if (!docs.includes(value)) {
errors.push(`docs/audio-sources.md is missing narrative audio detail "${value}"`);
}
});
}
function validateBattleSceneAudioIntegration(errors) {
const path = join('src', 'game', 'scenes', 'BattleScene.ts');
const source = readFileSync(path, 'utf8');