Dump sound extension

This commit is contained in:
Jbleezy 2024-09-15 21:20:17 -07:00
parent 3dcd89540b
commit fed488d391

View File

@ -208,13 +208,28 @@ class AssetDumperSndBank::Internal
return ""; return "";
} }
static void WriteAliasToFile(CsvOutputStream& stream, const SndAlias* alias, const SndBank* bank) std::string ConvertSndFormatToExtension(snd_asset_format format) const
{
switch (format)
{
case SND_ASSET_FORMAT_PCMS16:
return ".wav";
case SND_ASSET_FORMAT_FLAC:
return ".flac";
default:
return "";
}
}
static void WriteAliasToFile(CsvOutputStream& stream, const SndAlias* alias, std::string& extension, const SndBank* bank)
{ {
// name // name
stream.WriteColumn(alias->name); stream.WriteColumn(alias->name);
// file // file
stream.WriteColumn(alias->assetFileName ? alias->assetFileName : ""); stream.WriteColumn(alias->assetFileName ? alias->assetFileName + extension : "");
// template // template
stream.WriteColumn(""); stream.WriteColumn("");
@ -255,7 +270,7 @@ class AssetDumperSndBank::Internal
// volume_min_falloff_curve // volume_min_falloff_curve
stream.WriteColumn(SOUND_CURVES[alias->flags.volumeMinFalloffCurve]); stream.WriteColumn(SOUND_CURVES[alias->flags.volumeMinFalloffCurve]);
// reverb_min_falloff_curve" // reverb_min_falloff_curve
stream.WriteColumn(SOUND_CURVES[alias->flags.reverbMinFalloffCurve]); stream.WriteColumn(SOUND_CURVES[alias->flags.reverbMinFalloffCurve]);
// limit_count // limit_count
@ -303,103 +318,103 @@ class AssetDumperSndBank::Internal
// randomize_type // randomize_type
stream.WriteColumn(SOUND_RANDOMIZE_TYPES[std::min(alias->flags.randomizeType, 3u)]); stream.WriteColumn(SOUND_RANDOMIZE_TYPES[std::min(alias->flags.randomizeType, 3u)]);
// probability", // probability
stream.WriteColumn(std::to_string(alias->probability)); stream.WriteColumn(std::to_string(alias->probability));
// start_delay", // start_delay
stream.WriteColumn(std::to_string(alias->startDelay)); stream.WriteColumn(std::to_string(alias->startDelay));
// reverb_send", // reverb_send
stream.WriteColumn(std::to_string(alias->reverbSend)); stream.WriteColumn(std::to_string(alias->reverbSend));
// duck", // duck
stream.WriteColumn(FindNameForDuck(alias->duck, bank)); stream.WriteColumn(FindNameForDuck(alias->duck, bank));
// duck_group", // duck_group
stream.WriteColumn(SOUND_DUCK_GROUPS[alias->duckGroup]); stream.WriteColumn(SOUND_DUCK_GROUPS[alias->duckGroup]);
// pan", // pan
stream.WriteColumn(alias->flags.panType == SA_PAN_2D ? "2d" : "3d"); stream.WriteColumn(alias->flags.panType == SA_PAN_2D ? "2d" : "3d");
// center_send", // center_send
stream.WriteColumn(std::to_string(alias->centerSend)); stream.WriteColumn(std::to_string(alias->centerSend));
// envelop_min", // envelop_min
stream.WriteColumn(std::to_string(alias->envelopMin)); stream.WriteColumn(std::to_string(alias->envelopMin));
// envelop_max", // envelop_max
stream.WriteColumn(std::to_string(alias->envelopMax)); stream.WriteColumn(std::to_string(alias->envelopMax));
// envelop_percentage", // envelop_percentage
stream.WriteColumn(std::to_string(alias->envelopPercentage)); stream.WriteColumn(std::to_string(alias->envelopPercentage));
// occlusion_level", // occlusion_level
stream.WriteColumn(std::to_string(alias->occlusionLevel)); stream.WriteColumn(std::to_string(alias->occlusionLevel));
// occlusion_wet_dry", // occlusion_wet_dry
stream.WriteColumn(""); stream.WriteColumn("");
// is_big", // is_big
stream.WriteColumn(alias->flags.isBig ? "yes" : "no"); stream.WriteColumn(alias->flags.isBig ? "yes" : "no");
// distance_lpf" // distance_lpf
stream.WriteColumn(alias->flags.distanceLpf ? "yes" : "no"); stream.WriteColumn(alias->flags.distanceLpf ? "yes" : "no");
// move_type", // move_type
stream.WriteColumn(SOUND_MOVE_TYPES[alias->flags.fluxType]); stream.WriteColumn(SOUND_MOVE_TYPES[alias->flags.fluxType]);
// move_time", // move_time
stream.WriteColumn(std::to_string(alias->fluxTime)); stream.WriteColumn(std::to_string(alias->fluxTime));
// real_delay", // real_delay
stream.WriteColumn(""); stream.WriteColumn("");
// subtitle", // subtitle
stream.WriteColumn((alias->subtitle && *alias->subtitle) ? alias->subtitle : ""); stream.WriteColumn((alias->subtitle && *alias->subtitle) ? alias->subtitle : "");
// mature", // mature
stream.WriteColumn(""); stream.WriteColumn("");
// doppler", // doppler
stream.WriteColumn(alias->flags.doppler ? "yes" : "no"); stream.WriteColumn(alias->flags.doppler ? "yes" : "no");
// futz", // futz
stream.WriteColumn(std::to_string(alias->futzPatch)); stream.WriteColumn(std::to_string(alias->futzPatch));
// context_type", // context_type
stream.WriteColumn(std::to_string(alias->contextType)); stream.WriteColumn(std::to_string(alias->contextType));
// context_value", // context_value
stream.WriteColumn(std::to_string(alias->contextValue)); stream.WriteColumn(std::to_string(alias->contextValue));
// compression", // compression
stream.WriteColumn(""); stream.WriteColumn("");
// timescale", // timescale
stream.WriteColumn(alias->flags.timescale ? "yes" : "no"); stream.WriteColumn(alias->flags.timescale ? "yes" : "no");
// music", // music
stream.WriteColumn(alias->flags.isMusic ? "yes" : "no"); stream.WriteColumn(alias->flags.isMusic ? "yes" : "no");
// fade_in", // fade_in
stream.WriteColumn(std::to_string(alias->fadeIn)); stream.WriteColumn(std::to_string(alias->fadeIn));
// fade_out", // fade_out
stream.WriteColumn(std::to_string(alias->fadeOut)); stream.WriteColumn(std::to_string(alias->fadeOut));
// pc_format", // pc_format
stream.WriteColumn(""); stream.WriteColumn("");
// pause", // pause
stream.WriteColumn(alias->flags.pauseable ? "yes" : "no"); stream.WriteColumn(alias->flags.pauseable ? "yes" : "no");
// stop_on_death", // stop_on_death
stream.WriteColumn(alias->flags.stopOnDeath ? "yes" : "no"); stream.WriteColumn(alias->flags.stopOnDeath ? "yes" : "no");
// bus", // bus
stream.WriteColumn(SOUND_BUS_IDS[alias->flags.busType]); stream.WriteColumn(SOUND_BUS_IDS[alias->flags.busType]);
// snapshot", // snapshot
stream.WriteColumn(""); stream.WriteColumn("");
} }
@ -460,7 +475,7 @@ class AssetDumperSndBank::Internal
} }
} }
void DumpSndAlias(const SndAlias& alias) const std::optional<snd_asset_format> DumpSndAlias(const SndAlias& alias) const
{ {
const auto soundFile = FindSoundDataInSoundBanks(alias.assetId); const auto soundFile = FindSoundDataInSoundBanks(alias.assetId);
if (soundFile.IsOpen()) if (soundFile.IsOpen())
@ -492,16 +507,20 @@ class AssetDumperSndBank::Internal
std::cerr << "Cannot dump sound (Unknown sound format " << format << "): \"" << alias.assetFileName << "\"\n"; std::cerr << "Cannot dump sound (Unknown sound format " << format << "): \"" << alias.assetFileName << "\"\n";
break; break;
} }
return format;
} }
else else
{ {
std::cerr << "Could not find data for sound \"" << alias.assetFileName << "\"\n"; std::cerr << "Could not find data for sound \"" << alias.assetFileName << "\"\n";
} }
return {};
} }
void DumpSndBankAliases(const SndBank* sndBank) const void DumpSndBankAliases(const SndBank* sndBank) const
{ {
std::unordered_set<unsigned> dumpedAssets; std::unordered_map<unsigned int, std::string> dumpedAssets;
const auto outFile = OpenAssetOutputFile("soundbank/" + std::string(sndBank->name) + ".aliases", ".csv"); const auto outFile = OpenAssetOutputFile("soundbank/" + std::string(sndBank->name) + ".aliases", ".csv");
if (!outFile) if (!outFile)
@ -520,15 +539,29 @@ class AssetDumperSndBank::Internal
for (auto j = 0; j < aliasList.count; j++) for (auto j = 0; j < aliasList.count; j++)
{ {
const auto& alias = aliasList.head[j]; const auto& alias = aliasList.head[j];
std::string extension = "";
WriteAliasToFile(csvStream, &alias, sndBank); if (alias.assetId && alias.assetFileName)
csvStream.NextRow();
if (alias.assetId && alias.assetFileName && dumpedAssets.find(alias.assetId) == dumpedAssets.end())
{ {
DumpSndAlias(alias); if (dumpedAssets.find(alias.assetId) == dumpedAssets.end())
dumpedAssets.emplace(alias.assetId); {
std::optional<snd_asset_format> format = DumpSndAlias(alias);
if (format.has_value())
{
extension = ConvertSndFormatToExtension(format.value());
} }
dumpedAssets[alias.assetId] = extension;
}
else
{
extension = dumpedAssets[alias.assetId];
}
}
WriteAliasToFile(csvStream, &alias, extension, sndBank);
csvStream.NextRow();
} }
} }
} }