net.dreditor.audio.fmod 0.0.0-stage → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/AudioVisualizerThreeDFMOD.cs +286 -0
  2. package/AudioVisualizerThreeDFMOD.cs.meta +11 -0
  3. package/AudioVisualizerTwoDFMOD.cs +59 -0
  4. package/AudioVisualizerTwoDFMOD.cs.meta +11 -0
  5. package/CreditsMusicFMOD.cs +23 -0
  6. package/CreditsMusicFMOD.cs.meta +11 -0
  7. package/DREditor.Audio.FMOD.asmdef +21 -0
  8. package/DREditor.Audio.FMOD.asmdef.meta +7 -0
  9. package/PlaylistFMODEditor.cs +358 -0
  10. package/PlaylistFMODEditor.cs.meta +11 -0
  11. package/Samples/Audio_Visualizer_FMOD.prefab +658 -0
  12. package/Samples/Audio_Visualizer_FMOD.prefab.meta +7 -0
  13. package/Samples/Credits_Music_FMOD.prefab +66 -0
  14. package/Samples/Credits_Music_FMOD.prefab.meta +7 -0
  15. package/Samples/Environment_SFX_Manager_FMOD.prefab +163 -0
  16. package/Samples/Environment_SFX_Manager_FMOD.prefab.meta +7 -0
  17. package/Samples/Environment_Source_FMOD.prefab +101 -0
  18. package/Samples/Environment_Source_FMOD.prefab.meta +7 -0
  19. package/Samples/Music_Manager_FMOD.prefab +186 -0
  20. package/Samples/Music_Manager_FMOD.prefab.meta +7 -0
  21. package/Samples/On_Voice_Line_Setting_Changed_FMOD.prefab +76 -0
  22. package/Samples/On_Voice_Line_Setting_Changed_FMOD.prefab.meta +7 -0
  23. package/Samples/Pop_Up_Emitter_FMOD.prefab +57 -0
  24. package/Samples/Pop_Up_Emitter_FMOD.prefab.meta +7 -0
  25. package/Samples/SFX_Manager_FMOD.prefab +501 -0
  26. package/Samples/SFX_Manager_FMOD.prefab.meta +7 -0
  27. package/Samples/SFX_Source_FMOD.prefab +101 -0
  28. package/Samples/SFX_Source_FMOD.prefab.meta +7 -0
  29. package/Samples/Sound_Manager_FMOD_ETemplate.prefab +515 -0
  30. package/Samples/Sound_Manager_FMOD_ETemplate.prefab.meta +7 -0
  31. package/Samples/Sound_Player_DRE_FMOD.prefab +47 -0
  32. package/Samples/Sound_Player_DRE_FMOD.prefab.meta +7 -0
  33. package/Samples/UI_Cancel_Source_FMOD.prefab +101 -0
  34. package/Samples/UI_Cancel_Source_FMOD.prefab.meta +7 -0
  35. package/Samples/UI_Select_Source_FMOD.prefab +101 -0
  36. package/Samples/UI_Select_Source_FMOD.prefab.meta +7 -0
  37. package/Samples/UI_Submit_Source_FMOD.prefab +101 -0
  38. package/Samples/UI_Submit_Source_FMOD.prefab.meta +7 -0
  39. package/Samples/Voice_SFX_Manager_FMOD.prefab +163 -0
  40. package/Samples/Voice_SFX_Manager_FMOD.prefab.meta +7 -0
  41. package/Samples/Voice_Source_FMOD.prefab +57 -0
  42. package/Samples/Voice_Source_FMOD.prefab.meta +7 -0
  43. package/Samples.meta +8 -0
  44. package/SoundPlayerDREFMOD.cs +43 -0
  45. package/SoundPlayerDREFMOD.cs.meta +11 -0
  46. package/package.json +36 -6
  47. package/package.json.meta +7 -0
  48. package/README.md +0 -3
@@ -0,0 +1,286 @@
1
+ //Author: Benjamin "Sweden" Jillson : Discord: sweden_gaming For Project Eden's Garden
2
+ #if FMOD_UNITY
3
+ using DREditor.EventObjects;
4
+ using DREditor.Services;
5
+ using FMOD;
6
+ using FMODUnity;
7
+ using System;
8
+ using System.Collections;
9
+ using System.Runtime.InteropServices;
10
+ using UnityEngine;
11
+
12
+ namespace DREditor.Audio.FMOD
13
+ {
14
+ /// <summary>
15
+ ///
16
+ /// </summary>
17
+ [ClassHeader("")]
18
+ public class AudioVisualizerThreeDFMOD : MonoBehaviour
19
+ {
20
+ /// <summary>
21
+ ///
22
+ /// </summary>
23
+ [Header("")]
24
+ [Divider]
25
+ [Tooltip("")]
26
+ [SerializeField] protected bool canDisplay = false;
27
+
28
+
29
+ /// <summary>
30
+ ///
31
+ /// </summary>
32
+ [Header("")]
33
+ [Divider]
34
+ [Tooltip("")]
35
+ [SerializeField] protected ValueWithEvent<float, FloatEvent> bgmSetting = null;
36
+
37
+
38
+ /// <summary>
39
+ ///
40
+ /// </summary>
41
+ [Header("")]
42
+ [Divider]
43
+ [Tooltip("")]
44
+ [SerializeField] protected Transform[] blocks;
45
+
46
+
47
+ /// <summary>
48
+ ///
49
+ /// </summary>
50
+ [Header("")]
51
+ [Divider]
52
+ [Tooltip("")]
53
+ [SerializeField] protected float heightScale = 5;
54
+
55
+ /// <summary>
56
+ ///
57
+ /// </summary>
58
+ [Tooltip("")]
59
+ [SerializeField] int expScale = 3;
60
+
61
+ /// <summary>
62
+ ///
63
+ /// </summary>
64
+ [Tooltip("")]
65
+ [SerializeField] int sectionAdder = 2;
66
+
67
+ /// <summary>
68
+ ///
69
+ /// </summary>
70
+ [Tooltip("")]
71
+ [SerializeField] int sectionDivider = 2;
72
+
73
+
74
+ /// <summary>
75
+ ///
76
+ /// </summary>
77
+ protected DSP fft;
78
+
79
+ /// <summary>
80
+ ///
81
+ /// </summary>
82
+ protected float height;
83
+
84
+ /// <summary>
85
+ ///
86
+ /// </summary>
87
+ protected int currentIndex = 0;
88
+
89
+
90
+ protected static readonly float DecibelMinVolume = -80.0f;
91
+
92
+ protected static readonly float DecibelMaxVolume = 0.0f;
93
+
94
+ protected static readonly float Amplitude = 20.0f;
95
+
96
+ protected static readonly int WindowSize = 16;
97
+
98
+
99
+ /// <summary>
100
+ ///
101
+ /// </summary>
102
+ protected virtual void OnEnable() => ServiceLocator.GetService<MusicManagerBase>().OnMusicChange += PrepareEmitterData;
103
+
104
+ /// <summary>
105
+ ///
106
+ /// </summary>
107
+ /// <param name="emitter"></param>
108
+ protected virtual void PrepareEmitterData(StudioEventEmitter emitter) => StartCoroutine(PrepareEmitterDataRoutine(emitter));
109
+
110
+ /// <summary>
111
+ ///
112
+ /// </summary>
113
+ /// <param name="emitter"></param>
114
+ protected virtual IEnumerator PrepareEmitterDataRoutine(StudioEventEmitter emitter)
115
+ {
116
+ if (ResetBlocksOnEmitterNull(emitter))
117
+ yield break;
118
+
119
+ yield return new WaitUntil(() => RuntimeManager.IsInitialized);
120
+
121
+ yield return new WaitUntil(() => emitter.IsPlaying());
122
+
123
+ canDisplay = false;
124
+
125
+ InitializeEmitterData(emitter);
126
+
127
+ canDisplay = true;
128
+ }
129
+
130
+ /// <summary>
131
+ ///
132
+ /// </summary>
133
+ /// <param name="emitter"></param>
134
+ protected virtual void InitializeEmitterData(StudioEventEmitter emitter)
135
+ {
136
+ RuntimeManager.CoreSystem.createDSPByType(DSP_TYPE.FFT, out fft);
137
+
138
+ fft.setParameterInt((int)DSP_FFT.WINDOWTYPE, (int)DSP_FFT_WINDOW.HANNING);
139
+
140
+ fft.setParameterInt((int)DSP_FFT.WINDOWSIZE, WindowSize);
141
+
142
+ UnityEngine.Debug.Log(emitter.EventInstance.getChannelGroup(out ChannelGroup channelGroup).ToString());
143
+
144
+ UnityEngine.Debug.Log(fft.getParameterInt((int)DSP_FFT.WINDOWSIZE, out int value));
145
+
146
+ UnityEngine.Debug.Log(value);
147
+
148
+ RESULT rESULT = fft.getInfo(out _, out _, out _, out _, out _);
149
+
150
+ UnityEngine.Debug.Log(rESULT.ToString());
151
+
152
+ UnityEngine.Debug.Log(channelGroup.addDSP(CHANNELCONTROL_DSP_INDEX.HEAD, fft).ToString());
153
+ }
154
+
155
+ /// <summary>
156
+ ///
157
+ /// </summary>
158
+ /// <param name="emitter"></param>
159
+ /// <returns></returns>
160
+ protected bool ResetBlocksOnEmitterNull(StudioEventEmitter emitter)
161
+ {
162
+ if (emitter == null)
163
+ ResetVisualizerBlocks();
164
+
165
+ return emitter == null;
166
+ }
167
+
168
+
169
+
170
+ /// <summary>
171
+ ///
172
+ /// </summary>
173
+ protected virtual void LateUpdate() => EvaluateVisualizeAudio();
174
+
175
+ /// <summary>
176
+ ///
177
+ /// </summary>
178
+ protected virtual void EvaluateVisualizeAudio()
179
+ {
180
+ if (canDisplay)
181
+ VisualizeAudio();
182
+ }
183
+
184
+ /// <summary>
185
+ ///
186
+ /// </summary>
187
+ protected virtual void VisualizeAudio()
188
+ {
189
+ fft.getParameterData((int)DSP_FFT.SPECTRUMDATA, out IntPtr unmanagedData, out _);
190
+
191
+ try
192
+ {
193
+ DSP_PARAMETER_FFT fftData = (DSP_PARAMETER_FFT)Marshal.PtrToStructure(unmanagedData, typeof(DSP_PARAMETER_FFT));
194
+
195
+ if (fftData.numchannels > 0)
196
+ for (int i = 0; i < blocks.Length; ++i)
197
+ CalculateBlockSizeDelta(fftData.spectrum, i);
198
+ }
199
+ catch { }
200
+ }
201
+
202
+
203
+ /// <summary>
204
+ ///
205
+ /// </summary>
206
+ /// <param name="spectrum"></param>
207
+ /// <param name="currentBlockSize"></param>
208
+ /// <returns></returns>
209
+ /// <remarks></remarks>
210
+ protected virtual Vector3 CalculateBlockSizeBySpectrum(float[][] spectrum, Vector3 currentBlockSize)
211
+ {
212
+ int spectrumSection = CalculateSpectrumSection();
213
+
214
+ float decibelLevel = LinearToDecibel(spectrum[0][spectrumSection]);
215
+
216
+ height = (-1 * DecibelMinVolume) + decibelLevel;
217
+
218
+ height *= heightScale;
219
+
220
+ currentBlockSize.y = Mathf.Lerp(currentBlockSize.y, height, 0.1f);
221
+
222
+ return currentBlockSize;
223
+ }
224
+
225
+ /// <summary>
226
+ ///
227
+ /// </summary>
228
+ /// <returns></returns>
229
+ protected virtual int CalculateSpectrumSection() => expScale * (currentIndex + sectionAdder) / sectionDivider;
230
+
231
+ /// <summary>
232
+ ///
233
+ /// </summary>
234
+ /// <param name="linear"></param>
235
+ /// <returns></returns>
236
+ protected float LinearToDecibel(float linear) => Mathf.Clamp(Mathf.Log10(linear) * Amplitude, DecibelMinVolume, DecibelMaxVolume);
237
+
238
+ /// <summary>
239
+ ///
240
+ /// </summary>
241
+ protected virtual void OnDisable()
242
+ {
243
+ if (ServiceLocator.HasService<MusicManagerBase>())
244
+ ServiceLocator.GetService<MusicManagerBase>().OnMusicChange -= PrepareEmitterData;
245
+ }
246
+
247
+
248
+
249
+ /// <summary>
250
+ ///
251
+ /// </summary>
252
+ /// <remarks></remarks>
253
+ protected virtual void ResetVisualizerBlocks()
254
+ {
255
+ for (int i = 0; i < blocks.Length; ++i)
256
+ blocks[i].transform.localScale = new Vector3(blocks[i].transform.localScale.x, 0);
257
+ }
258
+
259
+ /// <summary>
260
+ ///
261
+ /// </summary>
262
+ /// <param name="spectrum"></param>
263
+ /// <param name="i"></param>
264
+ protected virtual void CalculateBlockSizeDelta(float[][] spectrum, int i)
265
+ {
266
+ currentIndex = i;
267
+
268
+ Vector3 currentBlockSize = CalculateBlockSizeBySpectrum(spectrum, blocks[currentIndex].transform.localScale);
269
+
270
+ SetBlockSizeDelta(currentBlockSize);
271
+ }
272
+
273
+ /// <summary>
274
+ ///
275
+ /// </summary>
276
+ /// <param name="currentBlockSize"></param>
277
+ protected virtual void SetBlockSizeDelta(Vector3 currentBlockSize)
278
+ {
279
+ if (bgmSetting.Value.Equals(0))
280
+ blocks[currentIndex].transform.localScale = Vector3.zero;
281
+ else
282
+ blocks[currentIndex].transform.localScale = currentBlockSize;
283
+ }
284
+ }
285
+ }
286
+ #endif
@@ -0,0 +1,11 @@
1
+ fileFormatVersion: 2
2
+ guid: f8d6d0a6c261824468ac33e60f2ffc6d
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -0,0 +1,59 @@
1
+ //Author: Benjamin "Sweden" Jillson : Discord: sweden_gaming For Project Eden's Garden
2
+ #if FMOD_UNITY
3
+ using System.Linq;
4
+ using UnityEngine;
5
+
6
+ namespace DREditor.Audio.FMOD
7
+ {
8
+ /// <summary>
9
+ ///
10
+ /// </summary>
11
+ [ClassHeader("")]
12
+ public class AudioVisualizerTwoDFMOD : AudioVisualizerThreeDFMOD
13
+ {
14
+ /// <summary>
15
+ ///
16
+ /// </summary>
17
+ protected RectTransform[] rectBlocks;
18
+
19
+
20
+ protected virtual void Awake() => rectBlocks = blocks.Select(b => b.GetComponent<RectTransform>()).ToArray();
21
+
22
+ /// <summary>
23
+ ///
24
+ /// </summary>
25
+ /// <remarks></remarks>
26
+ protected override void ResetVisualizerBlocks()
27
+ {
28
+ for (int i = 0; i < blocks.Length; ++i)
29
+ rectBlocks[i].sizeDelta = new Vector2(rectBlocks[i].sizeDelta.x, 0);
30
+ }
31
+
32
+ /// <summary>
33
+ ///
34
+ /// </summary>
35
+ /// <param name="spectrum"></param>
36
+ /// <param name="i"></param>
37
+ protected override void CalculateBlockSizeDelta(float[][] spectrum, int i)
38
+ {
39
+ currentIndex = i;
40
+
41
+ Vector2 currentBlockSize = CalculateBlockSizeBySpectrum(spectrum, rectBlocks[currentIndex].sizeDelta);
42
+
43
+ SetBlockSizeDelta(currentBlockSize);
44
+ }
45
+
46
+ /// <summary>
47
+ ///
48
+ /// </summary>
49
+ /// <param name="currentBlockSize"></param>
50
+ protected override void SetBlockSizeDelta(Vector3 currentBlockSize)
51
+ {
52
+ if (bgmSetting.Value <= 0)
53
+ rectBlocks[currentIndex].sizeDelta = Vector2.zero;
54
+ else
55
+ rectBlocks[currentIndex].sizeDelta = currentBlockSize;
56
+ }
57
+ }
58
+ }
59
+ #endif
@@ -0,0 +1,11 @@
1
+ fileFormatVersion: 2
2
+ guid: 23e93412fe50e3146a09de1bf47d03bd
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -0,0 +1,23 @@
1
+ //Author: Benjamin "Sweden" Jillson : Discord: sweden_gaming For Project Eden's Garden
2
+ using FMODUnity;
3
+ using System.Collections.Generic;
4
+ using UnityEngine;
5
+
6
+ namespace DREditor.Audio.FMOD
7
+ {
8
+ /// <summary>
9
+ ///
10
+ /// </summary>
11
+ public class CreditsMusicFMOD : CreditsMusic
12
+ {
13
+ /// <summary>
14
+ ///
15
+ /// </summary>
16
+ [Tooltip("")]
17
+ [SerializeField][EventRef] protected List<string> musicEvents = new();
18
+
19
+
20
+ /// <inheritdoc/>
21
+ protected override void Start() => StartCoroutine(PlayMusicTracks(musicEvents));
22
+ }
23
+ }
@@ -0,0 +1,11 @@
1
+ fileFormatVersion: 2
2
+ guid: 522b3c18b7b6c5846aba09087659f0c8
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -0,0 +1,21 @@
1
+ {
2
+ "name": "DREditor.Audio.FMOD",
3
+ "rootNamespace": "",
4
+ "references": [
5
+ "FMODUnity",
6
+ "DREditor",
7
+ "DREditor.Audio",
8
+ "DREditor.EventObjectServices"
9
+ ],
10
+ "includePlatforms": [],
11
+ "excludePlatforms": [],
12
+ "allowUnsafeCode": false,
13
+ "overrideReferences": false,
14
+ "precompiledReferences": [],
15
+ "autoReferenced": true,
16
+ "defineConstraints": [
17
+ "FMOD_UNITY"
18
+ ],
19
+ "versionDefines": [],
20
+ "noEngineReferences": false
21
+ }
@@ -0,0 +1,7 @@
1
+ fileFormatVersion: 2
2
+ guid: 3b70c02cd9b0d224d95187e55bc851d9
3
+ AssemblyDefinitionImporter:
4
+ externalObjects: {}
5
+ userData:
6
+ assetBundleName:
7
+ assetBundleVariant: