@@ -57,62 +57,61 @@ internal GeneratedClip(string id, string text, ReadOnlyMemory<byte> clipData, in
5757 public Guid TextHash { get ; private set ; }
5858
5959 [ SerializeField ]
60- private AudioClip audioClip ;
60+ private string cachedPath ;
6161
6262 [ Preserve ]
63- public AudioClip AudioClip
63+ public string CachedPath => cachedPath ;
64+
65+ public ReadOnlyMemory < byte > ClipData { get ; }
66+
67+ public float [ ] ClipSamples
6468 {
6569 get
6670 {
67- if ( audioClip == null && ! ClipData . IsEmpty )
71+ if ( clipSamples != null )
6872 {
69- var samples = ClipSamples ;
70-
71- if ( samples is { Length : > 0 } )
72- {
73- audioClip = AudioClip . Create ( Id , samples . Length , 1 , SampleRate , false ) ;
74- audioClip . SetData ( samples , 0 ) ;
75- }
73+ return clipSamples ;
7674 }
7775
78- if ( audioClip == null )
76+ if ( ClipData . IsEmpty )
7977 {
80- Debug . LogError ( $ " { nameof ( audioClip ) } is null, try loading it with LoadCachedAudioClipAsync" ) ;
78+ return Array . Empty < float > ( ) ;
8179 }
8280
83- return audioClip ;
81+ clipSamples ??= PCMEncoder . Decode ( ClipData . ToArray ( ) , inputSampleRate : SampleRate , outputSampleRate : AudioSettings . outputSampleRate ) ;
82+ return clipSamples ;
83+
8484 }
8585 }
86+ private float [ ] clipSamples ;
87+
88+ public int SampleRate { get ; }
8689
8790 [ SerializeField ]
88- private string cachedPath ;
91+ private AudioClip audioClip ;
8992
9093 [ Preserve ]
91- public string CachedPath => cachedPath ;
92-
93- public ReadOnlyMemory < byte > ClipData { get ; }
94-
95- private float [ ] clipSamples ;
96-
97- public float [ ] ClipSamples
94+ public AudioClip AudioClip
9895 {
9996 get
10097 {
101- if ( ! ClipData . IsEmpty )
98+ if ( audioClip == null &&
99+ ClipSamples is { Length : > 0 } )
102100 {
103- clipSamples ??= PCMEncoder . Decode ( ClipData . ToArray ( ) , PCMFormatSize . SixteenBit , SampleRate , AudioSettings . outputSampleRate ) ;
101+ audioClip = AudioClip . Create ( Id , ClipSamples . Length , 1 , AudioSettings . outputSampleRate , false ) ;
102+ audioClip . SetData ( ClipSamples , 0 ) ;
104103 }
105- else if ( audioClip != null )
104+
105+ if ( audioClip == null )
106106 {
107- clipSamples = new float [ audioClip . samples ] ;
108- audioClip . GetData ( clipSamples , 0 ) ;
107+ Debug . LogError ( $ "{ nameof ( audioClip ) } is null, try loading it with LoadCachedAudioClipAsync") ;
109108 }
110109
111- return clipSamples ;
110+ return audioClip ;
112111 }
113112 }
114113
115- public int SampleRate { get ; }
114+ public float Length => ClipSamples . Length / ( float ) AudioSettings . outputSampleRate ;
116115
117116 public void OnBeforeSerialize ( ) => textHash = TextHash . ToString ( ) ;
118117
@@ -130,6 +129,12 @@ var path when path.EndsWith(".mp3") => AudioType.MPEG,
130129 _ => AudioType . UNKNOWN
131130 } ;
132131
132+ if ( audioType == AudioType . UNKNOWN )
133+ {
134+ Debug . LogWarning ( $ "Unable to load cached audio clip at { cachedPath } ") ;
135+ return null ;
136+ }
137+
133138 return await Rest . DownloadAudioClipAsync ( $ "file://{ cachedPath } ", audioType , cancellationToken : cancellationToken ) ;
134139 }
135140 }
0 commit comments