fix: AudioImportTool NPE when run outside Play mode
Replace AudioExtendSettings.Instance with local AssetDatabase-loaded field to avoid nullref when AudioSystem hasn't yet initialized.
This commit is contained in:
@@ -5,13 +5,13 @@ AudioImporter:
|
|||||||
serializedVersion: 7
|
serializedVersion: 7
|
||||||
defaultSettings:
|
defaultSettings:
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
loadType: 0
|
loadType: 2
|
||||||
sampleRateSetting: 0
|
sampleRateSetting: 2
|
||||||
sampleRateOverride: 44100
|
sampleRateOverride: 44100
|
||||||
compressionFormat: 1
|
compressionFormat: 1
|
||||||
quality: 1
|
quality: 0.13
|
||||||
conversionMode: 0
|
conversionMode: 0
|
||||||
preloadAudioData: 0
|
preloadAudioData: 1
|
||||||
platformSettingOverrides: {}
|
platformSettingOverrides: {}
|
||||||
forceToMono: 0
|
forceToMono: 0
|
||||||
normalize: 1
|
normalize: 1
|
||||||
|
|||||||
@@ -9,9 +9,26 @@ namespace OCES.Audio
|
|||||||
|
|
||||||
public static class AudioImportTool
|
public static class AudioImportTool
|
||||||
{
|
{
|
||||||
|
static AudioExtendSettings s_settings;
|
||||||
|
|
||||||
|
static AudioExtendSettings Settings
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (s_settings == null)
|
||||||
|
{
|
||||||
|
s_settings = AssetDatabase.LoadAssetAtPath<AudioExtendSettings>(
|
||||||
|
"Assets/Settings/AudioExtendSettings.asset");
|
||||||
|
if (s_settings == null)
|
||||||
|
Debug.LogError("[AudioImportTool] 无法加载 AudioExtendSettings.asset,请确保资产存在于 Assets/Settings/ 目录");
|
||||||
|
}
|
||||||
|
return s_settings;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static string ConfigAbsolutePath
|
static string ConfigAbsolutePath
|
||||||
{
|
{
|
||||||
get { return Path.Combine(Application.dataPath, "Resources", AudioExtendSettings.Instance.audioConfigPath); }
|
get { return Path.Combine(Application.dataPath, "Resources", Settings.audioConfigPath); }
|
||||||
}
|
}
|
||||||
|
|
||||||
[MenuItem("Tools/OCES/Audio/Apply Audio Import Settings")]
|
[MenuItem("Tools/OCES/Audio/Apply Audio Import Settings")]
|
||||||
@@ -19,7 +36,7 @@ namespace OCES.Audio
|
|||||||
{
|
{
|
||||||
if (EditorUtility.DisplayDialog(
|
if (EditorUtility.DisplayDialog(
|
||||||
"Apply Audio Import Settings",
|
"Apply Audio Import Settings",
|
||||||
$"将对 {AudioExtendSettings.Instance.FullAudioResourcePath} 下所有文件重新应用导入设置,确认继续?",
|
$"将对 {Settings.FullAudioResourcePath} 下所有文件重新应用导入设置,确认继续?",
|
||||||
"确认", "取消"))
|
"确认", "取消"))
|
||||||
{
|
{
|
||||||
Run();
|
Run();
|
||||||
@@ -43,10 +60,10 @@ namespace OCES.Audio
|
|||||||
{
|
{
|
||||||
// 1. 加载配置表
|
// 1. 加载配置表
|
||||||
var audioObjectConfig =
|
var audioObjectConfig =
|
||||||
AudioConfigLoader.Load<AudioObjectConfig>(AudioExtendSettings.Instance.FullAudioConfigPath,
|
AudioConfigLoader.Load<AudioObjectConfig>(Settings.FullAudioConfigPath,
|
||||||
"AudioObject.bytes");
|
"AudioObject.bytes");
|
||||||
var musicSegmentConfig =
|
var musicSegmentConfig =
|
||||||
AudioConfigLoader.Load<MusicSegmentConfig>(AudioExtendSettings.Instance.FullAudioConfigPath,
|
AudioConfigLoader.Load<MusicSegmentConfig>(Settings.FullAudioConfigPath,
|
||||||
"MusicSegment.bytes");
|
"MusicSegment.bytes");
|
||||||
if (audioObjectConfig == null || musicSegmentConfig == null)
|
if (audioObjectConfig == null || musicSegmentConfig == null)
|
||||||
{
|
{
|
||||||
@@ -56,7 +73,7 @@ namespace OCES.Audio
|
|||||||
|
|
||||||
// 2. 扫描文件
|
// 2. 扫描文件
|
||||||
List<string> supportedExtensions = new() { ".wav", ".ogg" };
|
List<string> supportedExtensions = new() { ".wav", ".ogg" };
|
||||||
DirectoryInfo dir = new(AudioExtendSettings.Instance.FullAudioResourcePath);
|
DirectoryInfo dir = new(Settings.FullAudioResourcePath);
|
||||||
FileInfo[] files = dir.GetFiles().Where(f => supportedExtensions.Contains(f.Extension.ToLower())).ToArray();
|
FileInfo[] files = dir.GetFiles().Where(f => supportedExtensions.Contains(f.Extension.ToLower())).ToArray();
|
||||||
int total = files.Length, processed = 0, failed = 0;
|
int total = files.Length, processed = 0, failed = 0;
|
||||||
|
|
||||||
@@ -116,20 +133,20 @@ namespace OCES.Audio
|
|||||||
importer.ClearSampleSettingOverride("iOS");
|
importer.ClearSampleSettingOverride("iOS");
|
||||||
|
|
||||||
AudioImporterSampleSettings settings = importer.defaultSampleSettings;
|
AudioImporterSampleSettings settings = importer.defaultSampleSettings;
|
||||||
settings.compressionFormat = AudioExtendSettings.Instance.compressionFormat;
|
settings.compressionFormat = Settings.compressionFormat;
|
||||||
|
|
||||||
settings.sampleRateSetting = AudioSampleRateSetting.OverrideSampleRate;
|
settings.sampleRateSetting = AudioSampleRateSetting.OverrideSampleRate;
|
||||||
settings.preloadAudioData = audioObject?.Haptic != 0;
|
settings.preloadAudioData = audioObject?.Haptic != 0;
|
||||||
switch (category)
|
switch (category)
|
||||||
{
|
{
|
||||||
case AudioCategory.Music:
|
case AudioCategory.Music:
|
||||||
settings.sampleRateOverride = AudioExtendSettings.Instance.musicSampleRate;
|
settings.sampleRateOverride = Settings.musicSampleRate;
|
||||||
settings.quality = AudioExtendSettings.Instance.musicQuality;
|
settings.quality = Settings.musicQuality;
|
||||||
|
|
||||||
if (duration <= AudioExtendSettings.Instance.decompressThreshold)
|
if (duration <= Settings.decompressThreshold)
|
||||||
{
|
{
|
||||||
settings.loadType = AudioClipLoadType.DecompressOnLoad;
|
settings.loadType = AudioClipLoadType.DecompressOnLoad;
|
||||||
}else if (duration >= AudioExtendSettings.Instance.streamingThreshold)
|
}else if (duration >= Settings.streamingThreshold)
|
||||||
{
|
{
|
||||||
settings.loadType = AudioClipLoadType.Streaming;
|
settings.loadType = AudioClipLoadType.Streaming;
|
||||||
}
|
}
|
||||||
@@ -141,10 +158,10 @@ namespace OCES.Audio
|
|||||||
case AudioCategory.Voice:
|
case AudioCategory.Voice:
|
||||||
case AudioCategory.SFX:
|
case AudioCategory.SFX:
|
||||||
default:
|
default:
|
||||||
settings.sampleRateOverride = AudioExtendSettings.Instance.sfxSampleRate; // 音效2022.3.62f3没有32kHz这一档,要是有的话这一档其实最合适
|
settings.sampleRateOverride = Settings.sfxSampleRate; // 音效2022.3.62f3没有32kHz这一档,要是有的话这一档其实最合适
|
||||||
settings.quality = AudioExtendSettings.Instance.sfxQuality;
|
settings.quality = Settings.sfxQuality;
|
||||||
|
|
||||||
settings.loadType = duration >= AudioExtendSettings.Instance.streamingThreshold
|
settings.loadType = duration >= Settings.streamingThreshold
|
||||||
? AudioClipLoadType.Streaming
|
? AudioClipLoadType.Streaming
|
||||||
: AudioClipLoadType.DecompressOnLoad;
|
: AudioClipLoadType.DecompressOnLoad;
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user