1 ////////////////////////////////////////////////////////////////////////////////////////
2 //
3 // Nestopia - NES/Famicom emulator written in C++
4 //
5 // Copyright (C) 2003-2008 Martin Freij
6 //
7 // This file is part of Nestopia.
8 //
9 // Nestopia is free software; you can redistribute it and/or modify
10 // it under the terms of the GNU General Public License as published by
11 // the Free Software Foundation; either version 2 of the License, or
12 // (at your option) any later version.
13 //
14 // Nestopia is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 // GNU General Public License for more details.
18 //
19 // You should have received a copy of the GNU General Public License
20 // along with Nestopia; if not, write to the Free Software
21 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
22 //
23 ////////////////////////////////////////////////////////////////////////////////////////
24 
25 #ifndef NST_MANAGER_SOUND_H
26 #define NST_MANAGER_SOUND_H
27 
28 #pragma once
29 
30 #include "NstDirectSound.hpp"
31 #include "NstObjectHeap.hpp"
32 
33 namespace Nestopia
34 {
35 	namespace Window
36 	{
37 		class Sound;
38 	}
39 
40 	namespace Managers
41 	{
42 		class Paths;
43 		class Preferences;
44 
45 		class Sound : Manager
46 		{
47 		public:
48 
49 			Sound(Window::Custom&,Window::Menu&,Emulator&,const Paths&,const Preferences&,const Configuration&);
50 			~Sound();
51 
52 			void StartEmulation() const;
53 			void StopEmulation();
54 			void Save(Configuration&) const;
55 
56 		private:
57 
58 			void OnMenuOptionsSound(uint);
59 			void OnEmuEvent(Emulator::Event,Emulator::Data);
60 			void Disable(cstring=NULL);
61 			void UpdateSettings();
62 			bool CanRunInBackground() const;
63 
64 			struct Callbacks;
65 			class Recorder;
66 
67 			Nes::Sound::Output* emuOutput;
68 			const Paths& paths;
69 			const Preferences& preferences;
70 			Nes::Sound::Output output;
71 			DirectX::DirectSound directSound;
72 			Object::Heap<Window::Sound> dialog;
73 			Object::Heap<Recorder> recorder;
74 
75 		public:
76 
GetOutput()77 			Nes::Sound::Output* GetOutput()
78 			{
79 				return emuOutput;
80 			}
81 		};
82 	}
83 }
84 
85 #endif
86