Jypeli  5
The simple game programming library
SoundEffect.cs
Siirry tämän tiedoston dokumentaatioon.
1 using System;
2 using System.Diagnostics;
3 using Microsoft.Xna.Framework.Audio;
4 
5 using XnaSoundEffect = Microsoft.Xna.Framework.Audio.SoundEffect;
6 using System.Collections.Generic;
7 
8 namespace Jypeli
9 {
15  public class SoundEffect
16  {
17  List<Sound> Instances = new List<Sound>();
18 
19  private string assetName;
20  XnaSoundEffect xnaEffect;
21  Timer posTimer;
22 
26  public TimeSpan Duration { get { DoLoad(); return xnaEffect.Duration; } }
27 
31  public DoubleMeter Position { get; set; }
32 
36  public bool IsPlaying { get; private set; }
37 
38  private void DoLoad()
39  {
40  if (xnaEffect == null)
41  {
42  Debug.Assert(assetName != null);
43  xnaEffect = Game.Instance.Content.Load<XnaSoundEffect>(assetName);
44  }
45 
46  Position.MaxValue = xnaEffect.Duration.TotalSeconds;
47  }
48 
49  internal SoundEffect(string assetName)
50  {
51  this.assetName = assetName;
52  this.xnaEffect = null;
53  InitPosition();
54  }
55 
56  internal SoundEffect( XnaSoundEffect effect )
57  {
58  this.Position = new DoubleMeter(0, 0, 0);
59  this.assetName = null;
60  xnaEffect = effect;
61  InitPosition();
62  }
63 
64  private void InitPosition()
65  {
66  Position = new DoubleMeter(0, 0, 0);
67  posTimer = new Timer();
68  posTimer.Interval = 0.01;
69  posTimer.Timeout += new Action(IncrementPosition);
70  Position.UpperLimit += EffectPlayed;
71  }
72 
73  private void IncrementPosition()
74  {
75  Position.Value += posTimer.Interval;
76  }
77 
78  private void EffectPlayed()
79  {
80  posTimer.Stop();
81  Position.Reset();
82  Instances.Clear();
83  IsPlaying = false;
84  }
85 
91  public Sound CreateSound()
92  {
93  DoLoad();
94  return new Sound( xnaEffect.CreateInstance() );
95  }
96 
101  public bool Play()
102  {
103  DoLoad();
104  Sound sound = CreateSound();
105  if (sound == null) return false;
106 
107  StartPlaying( sound );
108  return true;
109  }
110 
118  public bool Play( double volume, double pitch, double pan )
119  {
120  DoLoad();
121  Sound sound = CreateSound();
122  if (sound == null) return false;
123 
124  sound.Volume = volume;
125  sound.Pitch = pitch;
126  sound.Pan = pan;
127 
128  StartPlaying( sound );
129  return true;
130  }
131 
132  private void StartPlaying( Sound sound )
133  {
134  sound.Play();
135  Instances.Add( sound );
136  Position.Reset();
137  posTimer.Start();
138  IsPlaying = true;
139  }
140 
144  public void Stop()
145  {
146  foreach (var sound in Instances)
147  {
148  sound.Stop();
149  }
150 
151  EffectPlayed();
152  }
153 
157  public static double MasterVolume
158  {
159  set { XnaSoundEffect.MasterVolume = (float)value; }
160  get { return XnaSoundEffect.MasterVolume; }
161  }
162  }
163 }
double Interval
Aika sekunneissa, jonka välein TimeOut tapahtuu.
Definition: Timer.cs:99
void Stop()
Pysäyttää ajastimen ja nollaa sen tilan.
Definition: Timer.cs:255
Action Timeout
Tapahtuu väliajoin.
Definition: Timer.cs:46
DoubleMeter Position
Paikka äänessä sekunteina (missä kohtaa toistoa ollaan). Ei voi asettaa.
Definition: SoundEffect.cs:31
double Volume
Äänenvoimakkuus välillä 0.0 - 1.0.
Definition: Sound.cs:40
Ääniefekti. Yhdestä efektistä voi luoda CreateSound-metodilla monta ääntä (Sound), jotka voivat soida yhtäaikaa. Ääntä ei tarvitse kuitenkaan luoda itse, jos vain kutsuu Play-metodia.
Definition: SoundEffect.cs:15
bool Play()
Soittaa äänen.
Definition: SoundEffect.cs:101
double Pan
Äänen kuuluminen vasemmasta ja oikeasta kaiuttimesta. Arvot vaihtelevat välillä -1.0 - 1.0 seuraavasti: -1.0 -> täysin vasemmalla 0.0 -> keskellä 1.0 -> täysin oikealla
Definition: Sound.cs:31
static Game Instance
Definition: Game.cs:149
Mittari, joka mittaa double-tyyppisiä arvoja. Sidottavissa näyttöihin, kuten ValueDisplay ja BarGauge...
Definition: Meter.cs:515
bool IsPlaying
Toistetaanko ääntä parhaillaan.
Definition: SoundEffect.cs:36
Peliluokka reaaliaikaisille peleille.
Definition: DebugScreen.cs:10
Sound CreateSound()
Luo Sound-tyyppisen olion. Oliolla on ominaisuuksia kuten voimakkuus ja korkeus joita voidaan muuttaa...
Definition: SoundEffect.cs:91
static double MasterVolume
Äänenvoimakkuuden taso 0.0 - 1.0
Definition: SoundEffect.cs:158
Ajastin, joka voidaan asettaa laukaisemaan tapahtumia tietyin väliajoin.
Definition: Timer.cs:39
TimeSpan Duration
Ääniefektin kesto sekunteina.
Definition: SoundEffect.cs:26
void Start()
Käynnistää ajastimen.
Definition: Timer.cs:220
bool Play(double volume, double pitch, double pan)
Soittaa äänen.
Definition: SoundEffect.cs:118
void Stop()
Pysäyttää äänen toistamisen.
Definition: SoundEffect.cs:144
void Play()
Definition: Sound.cs:62
double Pitch
Äänenkorkeus välillä -1.0 - 1.0.
Definition: Sound.cs:52