Virtu/Virtu/Xna/Services/XnaAudioService.cs
Sean Fausett ea2a892113 Rewrote sound emulation to be much more accurate.
Modified CPU throttling to sync with audio thread.
Added CPU multiplier to machine settings.
Bumped version to 0.8 for next release.

--HG--
extra : convert_revision : svn%3Affd33b8c-2492-42e0-bdc5-587b920b7d6d/trunk%4043066
2010-03-14 21:54:17 +00:00

46 lines
1.2 KiB
C#

using System;
using System.Runtime.InteropServices;
using Jellyfish.Library;
namespace Jellyfish.Virtu.Services
{
#if WINDOWS
public sealed class XnaAudioService : AudioService
{
public XnaAudioService(Machine machine, GameBase game) :
base(machine)
{
if (game == null)
{
throw new ArgumentNullException("game");
}
_game = game;
_directSound.Start(_game.Window.Handle);
_directSound.Update += OnDirectSoundUpdate;
_game.Exiting += (sender, e) => _directSound.Stop();
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
_directSound.Dispose();
}
}
private void OnDirectSoundUpdate(object sender, DirectSoundUpdateEventArgs e)
{
Update(e.BufferSize, (source, count) =>
{
Marshal.Copy(source, 0, e.Buffer, count);
});
}
private GameBase _game;
private DirectSound _directSound = new DirectSound(SampleRate, SampleChannels, SampleBits, SampleSize);
}
#endif
}