Jypeli 10
The simple game programming library
SoundEffect.cs
Siirry tämän tiedoston dokumentaatioon.
1using System;
2using System.Diagnostics;
3using Microsoft.Xna.Framework.Audio;
4
5using XnaSoundEffect = Microsoft.Xna.Framework.Audio.SoundEffect;
6using System.Collections.Generic;
7using System.IO;
8
9namespace Jypeli
10{
16 public class SoundEffect
17 {
18 List<Sound> Instances = new List<Sound>();
19
20 private string assetName;
23
27 public event Action Finished;
28
32 public TimeSpan Duration { get { DoLoad(); return xnaEffect.Duration; } }
33
37 public DoubleMeter Position { get; set; }
38
42 public bool IsPlaying { get; private set; }
43
44 private static string[] soundExtensions = { ".wav", ".mp3", ".xnb" };
45
46 private void DoLoad()
47 {
48 if (xnaEffect == null)
49 {
50 Debug.Assert(assetName != null);
52 }
53
54 Position.MaxValue = xnaEffect.Duration.TotalSeconds;
55 }
56
57
58 private XnaSoundEffect FromContent(string assetname)
59 {
61 FileStream fs = new FileStream(assetName, FileMode.Open);
62 XnaSoundEffect sound = XnaSoundEffect.FromStream(fs);
63 fs.Close();
64 return sound;
65
66 }
67 internal SoundEffect(string assetName)
68 {
69 this.assetName = assetName;
70 this.xnaEffect = null;
72 }
73
74 internal SoundEffect( XnaSoundEffect effect )
75 {
76 this.Position = new DoubleMeter(0, 0, 0);
77 this.assetName = null;
78 xnaEffect = effect;
80 }
81
82 private void InitPosition()
83 {
84 Position = new DoubleMeter(0, 0, 0);
85 posTimer = new Timer();
86 posTimer.Interval = 0.01;
87 posTimer.Timeout += new Action(IncrementPosition);
89 }
90
91 private void IncrementPosition()
92 {
94 }
95
96 private void EffectPlayed()
97 {
98 posTimer.Stop();
100 Instances.Clear();
101 IsPlaying = false;
102 if(Finished != null) Finished();
103 }
104
111 {
112 if ( !Game.AudioEnabled )
113 return null;
114
115 try
116 {
117 DoLoad();
118 return new Sound( xnaEffect.CreateInstance() );
119 }
120 catch (NoAudioHardwareException)
121 {
123 return null;
124 }
125 }
126
131 public bool Play()
132 {
133 DoLoad();
134 Sound sound = CreateSound();
135 if (sound == null) return false;
136
137 StartPlaying( sound );
138 return true;
139 }
140
148 public bool Play( double volume, double pitch, double pan )
149 {
150 DoLoad();
151 Sound sound = CreateSound();
152 if (sound == null) return false;
153
154 sound.Volume = volume;
155 sound.Pitch = pitch;
156 sound.Pan = pan;
157
158 StartPlaying( sound );
159 return true;
160 }
161
162 private void StartPlaying( Sound sound )
163 {
164 try
165 {
166 sound.Play();
167 Instances.Add( sound );
168 Position.Reset();
169 posTimer.Start();
170 IsPlaying = true;
171 }
172 catch (InstancePlayLimitException)
173 {
174 // Too many sounds are playing at once
175 // Just ignore this for now...
176 }
177 }
178
182 public void Stop()
183 {
184 foreach (var sound in Instances)
185 {
186 sound.Stop();
187 }
188
189 EffectPlayed();
190 }
191
195 public static double MasterVolume
196 {
197 set { XnaSoundEffect.MasterVolume = (float)value; }
198 get { return XnaSoundEffect.MasterVolume; }
199 }
200 }
201}
Microsoft.Xna.Framework.Audio.SoundEffect XnaSoundEffect
Definition: Content.cs:36
Mittari, joka mittaa double-tyyppisiä arvoja. Sidottavissa näyttöihin, kuten ValueDisplay ja BarGa...
Definition: DoubleMeter.cs:11
static bool AudioEnabled
Voiko ääniä soittaa.
Definition: Game.cs:140
void OnNoAudioHardwareException()
Definition: Game.cs:280
static string FileExtensionCheck(string file, string[] extensions)
Etsii millä päätteellä annettu tiedosto löytyy
Definition: Content.cs:200
static Game Instance
Käynnissä olevan pelin pääolio.
Definition: Game.cs:96
void Reset()
Palauttaa mittarin arvon oletusarvoonsa.
Definition: Meter.cs:273
ValueType MaxValue
Mittarin suurin sallittu arvo. Kun mittari saavuttaa tämän arvon, laukeaa tapahtuma UpperLimit.
Definition: Meter.cs:177
ValueType Value
Mittarin arvo.
Definition: Meter.cs:129
Action UpperLimit
Tapahtuu, kun mittari saavuttaa suurimman sallitun arvonsa.
Definition: Meter.cs:202
Ääniefekti. Yhdestä efektistä voi luoda CreateSound-metodilla monta ääntä (Sound),...
Definition: SoundEffect.cs:17
SoundEffect(XnaSoundEffect effect)
Definition: SoundEffect.cs:74
bool IsPlaying
Toistetaanko ääntä parhaillaan.
Definition: SoundEffect.cs:42
List< Sound > Instances
Definition: SoundEffect.cs:18
void StartPlaying(Sound sound)
Definition: SoundEffect.cs:162
bool Play()
Soittaa äänen.
Definition: SoundEffect.cs:131
TimeSpan Duration
Ääniefektin kesto sekunteina.
Definition: SoundEffect.cs:32
void IncrementPosition()
Definition: SoundEffect.cs:91
DoubleMeter Position
Paikka äänessä sekunteina (missä kohtaa toistoa ollaan). Ei voi asettaa.
Definition: SoundEffect.cs:37
Sound CreateSound()
Luo Sound-tyyppisen olion. Oliolla on ominaisuuksia kuten voimakkuus ja korkeus joita voidaan muuttaa...
Definition: SoundEffect.cs:110
bool Play(double volume, double pitch, double pan)
Soittaa äänen.
Definition: SoundEffect.cs:148
SoundEffect(string assetName)
Definition: SoundEffect.cs:67
void Stop()
Pysäyttää äänen toistamisen.
Definition: SoundEffect.cs:182
static double MasterVolume
Äänenvoimakkuuden taso 0.0 - 1.0
Definition: SoundEffect.cs:196
XnaSoundEffect FromContent(string assetname)
Definition: SoundEffect.cs:58
static string[] soundExtensions
Definition: SoundEffect.cs:44
Action Finished
Tapahtuu kun ääniefekti on toistettu loppuun.
Definition: SoundEffect.cs:27
XnaSoundEffect xnaEffect
Definition: SoundEffect.cs:21
Yleinen äänen toistamiseen käytettävä luokka. Tällä ei ole kovin suuria eroja SoundEffect-luokan kans...
Definition: Sound.cs:11
void Play(int retries=3)
Toistaa äänen
Definition: Sound.cs:80
double Volume
Äänenvoimakkuus välillä 0.0 - 1.0.
Definition: Sound.cs:45
double Pan
Äänen kuuluminen vasemmasta ja oikeasta kaiuttimesta. Arvot vaihtelevat välillä -1....
Definition: Sound.cs:36
double Pitch
Äänenkorkeus välillä -1.0 - 1.0.
Definition: Sound.cs:57
Ajastin, joka voidaan asettaa laukaisemaan tapahtumia tietyin väliajoin.
Definition: Timer.cs:38
double Interval
Aika sekunneissa, jonka välein TimeOut tapahtuu.
Definition: Timer.cs:87
void Stop()
Pysäyttää ajastimen ja nollaa sen tilan.
Definition: Timer.cs:292
Action Timeout
Tapahtuu väliajoin.
Definition: Timer.cs:44
void Start()
Käynnistää ajastimen.
Definition: Timer.cs:257