1 #include "Nio.h"
2 #include "OutMgr.h"
3 #include "InMgr.h"
4 #include "EngineMgr.h"
5 #include "MidiIn.h"
6 #include "AudioOut.h"
7 #include "WavEngine.h"
8 #include <iostream>
9 #include <algorithm>
10 using std::string;
11 using std::set;
12 using std::cerr;
13 using std::endl;
14 
15 InMgr     *in  = NULL;
16 OutMgr    *out = NULL;
17 EngineMgr *eng = NULL;
18 string     postfix;
19 
20 bool   Nio::autoConnect   = false;
21 string Nio::defaultSource = IN_DEFAULT;
22 string Nio::defaultSink   = OUT_DEFAULT;
23 
init(void)24 void Nio::init(void)
25 {
26     in  = &InMgr::getInstance(); //Enable input wrapper
27     out = &OutMgr::getInstance(); //Initialize the Output Systems
28     eng = &EngineMgr::getInstance(); //Initialize The Engines
29 }
30 
start()31 bool Nio::start()
32 {
33     init();
34     return eng->start();
35 }
36 
stop()37 void Nio::stop()
38 {
39     eng->stop();
40 }
41 
setDefaultSource(string name)42 void Nio::setDefaultSource(string name)
43 {
44     std::transform(name.begin(), name.end(), name.begin(), ::toupper);
45     defaultSource = name;
46 }
47 
setDefaultSink(string name)48 void Nio::setDefaultSink(string name)
49 {
50     std::transform(name.begin(), name.end(), name.begin(), ::toupper);
51     defaultSink = name;
52 }
53 
setSource(string name)54 bool Nio::setSource(string name)
55 {
56     return in->setSource(name);
57 }
58 
setSink(string name)59 bool Nio::setSink(string name)
60 {
61     return out->setSink(name);
62 }
63 
setPostfix(std::string post)64 void Nio::setPostfix(std::string post)
65 {
66     postfix = post;
67 }
68 
getPostfix(void)69 std::string Nio::getPostfix(void)
70 {
71     return postfix;
72 }
73 
getSources(void)74 set<string> Nio::getSources(void)
75 {
76     set<string> sources;
77     for(std::list<Engine *>::iterator itr = eng->engines.begin();
78         itr != eng->engines.end(); ++itr)
79         if(dynamic_cast<MidiIn *>(*itr))
80             sources.insert((*itr)->name);
81     return sources;
82 }
83 
getSinks(void)84 set<string> Nio::getSinks(void)
85 {
86     set<string> sinks;
87     for(std::list<Engine *>::iterator itr = eng->engines.begin();
88         itr != eng->engines.end(); ++itr)
89         if(dynamic_cast<AudioOut *>(*itr))
90             sinks.insert((*itr)->name);
91     return sinks;
92 }
93 
getSource()94 string Nio::getSource()
95 {
96     return in->getSource();
97 }
98 
getSink()99 string Nio::getSink()
100 {
101     return out->getSink();
102 }
103 
104 #if JACK
105 #include <jack/jack.h>
preferedSampleRate(unsigned & rate)106 void Nio::preferedSampleRate(unsigned &rate)
107 {
108     jack_client_t *client = jack_client_open("temp-client",
109                                              JackNoStartServer, 0);
110     if(client) {
111         rate = jack_get_sample_rate(client);
112         jack_client_close(client);
113     }
114 }
115 #else
preferedSampleRate(unsigned &)116 void Nio::preferedSampleRate(unsigned &)
117 {}
118 #endif
119 
waveNew(class WavFile * wave)120 void Nio::waveNew(class WavFile *wave)
121 {
122     out->wave->newFile(wave);
123 }
124 
waveStart(void)125 void Nio::waveStart(void)
126 {
127     out->wave->Start();
128 }
129 
waveStop(void)130 void Nio::waveStop(void)
131 {
132     out->wave->Stop();
133 }
134 
waveEnd(void)135 void Nio::waveEnd(void)
136 {
137     out->wave->destroyFile();
138 }
139