-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathAudio.cs
More file actions
76 lines (60 loc) · 1.89 KB
/
Audio.cs
File metadata and controls
76 lines (60 loc) · 1.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
using System;
using UnityEngine;
namespace SubsurfaceStudios.Audio {
public class Audio : MonoBehaviour {
[SerializeField]
private AudioSource m_Source;
private static Audio s_Instance;
void OnEnable() {
s_Instance = this;
}
public static void Play2D(AudioClip clip) {
s_Instance.m_Source.PlayOneShot(clip);
}
public static AudioHandle Handle(AudioClip clip) {
return new AudioHandle(clip);
}
}
public sealed class AudioHandle : IDisposable {
private AudioSource m_Source;
private bool m_LeakAudioSource = false;
internal AudioHandle(AudioClip clip) {
AudioSource source = new GameObject("Managed Audio").AddComponent<AudioSource>();
source.playOnAwake = false;
source.clip = clip;
source.spatialBlend = 0.0f;
m_Source = source;
}
public AudioSource Leak() {
m_LeakAudioSource = true;
return m_Source;
}
public AudioSource Source => m_Source;
public void Play() => m_Source.Play();
public void Stop() => m_Source.Stop();
public void Pause() => m_Source.Pause();
public void UnPause() => m_Source.UnPause();
public bool IsPlaying => m_Source.isPlaying;
public AudioClip Clip {
get => m_Source.clip;
set => m_Source.clip = value;
}
public void Seek(float time) => m_Source.time = time;
public float Time {
get => m_Source.time;
set => m_Source.time = value;
}
~AudioHandle() {
Dispose();
}
public void Dispose() {
try {
if (m_Source != null && !m_LeakAudioSource) {
GameObject.Destroy(m_Source.gameObject);
}
} finally {
m_Source = null;
}
}
}
}