mirror of
https://github.com/aelurum/AssetStudio.git
synced 2025-05-25 05:40:21 -04:00
Improve error messages for AudioClip assets
This commit is contained in:
parent
ff92d1784d
commit
6608e76471
@ -1104,7 +1104,10 @@ namespace AssetStudioGUI
|
|||||||
channels +
|
channels +
|
||||||
bits;
|
bits;
|
||||||
}
|
}
|
||||||
StatusStripUpdate("Preview not available: Unsupported fmod audio format. Try to export instead.");
|
var errorMsg = result == FMOD.RESULT.ERR_VERSION
|
||||||
|
? "Unsupported fmod version. Try to export raw and convert with an external tool instead."
|
||||||
|
: $"Preview not available, try to export instead. {FMOD.Error.String(result)}";
|
||||||
|
StatusStripUpdate(errorMsg);
|
||||||
FMODreset();
|
FMODreset();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -39,16 +39,16 @@ namespace AssetStudio
|
|||||||
exinfo.cbsize = Marshal.SizeOf(exinfo);
|
exinfo.cbsize = Marshal.SizeOf(exinfo);
|
||||||
exinfo.length = (uint)m_AudioClip.m_Size;
|
exinfo.length = (uint)m_AudioClip.m_Size;
|
||||||
var result = system.createSound(m_AudioData, MODE.OPENMEMORY, ref exinfo, out var sound);
|
var result = system.createSound(m_AudioData, MODE.OPENMEMORY, ref exinfo, out var sound);
|
||||||
if (result != RESULT.OK)
|
if (ErrorCheck(result, out debugLog))
|
||||||
return null;
|
return null;
|
||||||
result = sound.getNumSubSounds(out var numsubsounds);
|
result = sound.getNumSubSounds(out var numsubsounds);
|
||||||
if (result != RESULT.OK)
|
if (ErrorCheck(result, out debugLog))
|
||||||
return null;
|
return null;
|
||||||
byte[] buff;
|
byte[] buff;
|
||||||
if (numsubsounds > 0)
|
if (numsubsounds > 0)
|
||||||
{
|
{
|
||||||
result = sound.getSubSound(0, out var subsound);
|
result = sound.getSubSound(0, out var subsound);
|
||||||
if (result != RESULT.OK)
|
if (ErrorCheck(result, out debugLog))
|
||||||
return null;
|
return null;
|
||||||
buff = SoundToWav(subsound, out debugLog);
|
buff = SoundToWav(subsound, out debugLog);
|
||||||
subsound.release();
|
subsound.release();
|
||||||
@ -67,32 +67,43 @@ namespace AssetStudio
|
|||||||
{
|
{
|
||||||
debugLog = "[Fmod] Detecting sound format..\n";
|
debugLog = "[Fmod] Detecting sound format..\n";
|
||||||
var result = sound.getFormat(out SOUND_TYPE soundType, out SOUND_FORMAT soundFormat, out int channels, out int bits);
|
var result = sound.getFormat(out SOUND_TYPE soundType, out SOUND_FORMAT soundFormat, out int channels, out int bits);
|
||||||
if (result != RESULT.OK)
|
if (ErrorCheck(result, out debugLog))
|
||||||
return null;
|
return null;
|
||||||
debugLog += $"Detected sound type: {soundType}\n" +
|
debugLog += $"Detected sound type: {soundType}\n" +
|
||||||
$"Detected sound format: {soundFormat}\n" +
|
$"Detected sound format: {soundFormat}\n" +
|
||||||
$"Detected channels: {channels}\n" +
|
$"Detected channels: {channels}\n" +
|
||||||
$"Detected bit depth: {bits}\n";
|
$"Detected bit depth: {bits}\n";
|
||||||
result = sound.getDefaults(out var frequency, out _);
|
result = sound.getDefaults(out var frequency, out _);
|
||||||
if (result != RESULT.OK)
|
if (ErrorCheck(result, out debugLog))
|
||||||
return null;
|
return null;
|
||||||
var sampleRate = (int)frequency;
|
var sampleRate = (int)frequency;
|
||||||
result = sound.getLength(out var length, TIMEUNIT.PCMBYTES);
|
result = sound.getLength(out var length, TIMEUNIT.PCMBYTES);
|
||||||
if (result != RESULT.OK)
|
if (ErrorCheck(result, out debugLog))
|
||||||
return null;
|
return null;
|
||||||
result = sound.@lock(0, length, out var ptr1, out var ptr2, out var len1, out var len2);
|
result = sound.@lock(0, length, out var ptr1, out var ptr2, out var len1, out var len2);
|
||||||
if (result != RESULT.OK)
|
if (ErrorCheck(result, out debugLog))
|
||||||
return null;
|
return null;
|
||||||
var buffer = new byte[len1 + 44];
|
var buffer = new byte[len1 + 44];
|
||||||
//添加wav头
|
//添加wav头
|
||||||
WriteWavHeader(buffer, len1, sampleRate, channels, bits);
|
WriteWavHeader(buffer, len1, sampleRate, channels, bits);
|
||||||
Marshal.Copy(ptr1, buffer, 44, (int)len1);
|
Marshal.Copy(ptr1, buffer, 44, (int)len1);
|
||||||
result = sound.unlock(ptr1, ptr2, len1, len2);
|
result = sound.unlock(ptr1, ptr2, len1, len2);
|
||||||
if (result != RESULT.OK)
|
if (ErrorCheck(result, out debugLog))
|
||||||
return null;
|
return null;
|
||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static bool ErrorCheck(RESULT result, out string log)
|
||||||
|
{
|
||||||
|
log = string.Empty;
|
||||||
|
if (result != RESULT.OK)
|
||||||
|
{
|
||||||
|
log += $"FMOD error! {result} - {Error.String(result)}\n";
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public byte[] RawAudioClipToWav(out string debugLog)
|
public byte[] RawAudioClipToWav(out string debugLog)
|
||||||
{
|
{
|
||||||
var audioSize = m_AudioClip.m_Size;
|
var audioSize = m_AudioClip.m_Size;
|
||||||
|
Loading…
Reference in New Issue
Block a user