20
22
#include "driver/alsatimer.h"
23
29
#define DEBUG_DUMMY 0
24
30
//---------------------------------------------------------
25
31
// DummyAudioDevice
26
32
//---------------------------------------------------------
28
static const unsigned dummyFrames = 1024;
34
//static const unsigned dummyFrames = 1024;
73
81
virtual float* getBuffer(void* /*port*/, unsigned long nframes)
75
if (nframes > dummyFrames) {
76
printf("error: segment size > 1024\n");
84
//if (nframes > dummyFrames) {
85
//printf("error: segment size > 1024\n");
86
if (nframes > segmentSize) {
87
printf("DummyAudioDevice::getBuffer nframes > segment size\n");
82
virtual std::list<QString> outputPorts();
83
virtual std::list<QString> inputPorts();
94
virtual std::list<QString> outputPorts(bool midi = false, int aliases = -1);
95
virtual std::list<QString> inputPorts(bool midi = false, int aliases = -1);
85
97
virtual void registerClient() {}
87
virtual void* registerOutPort(const char*) {
99
virtual const char* clientName() { return "MusE"; }
101
//virtual void* registerOutPort(const char*) {
102
virtual void* registerOutPort(const char*, bool) {
90
virtual void* registerInPort(const char*) {
105
//virtual void* registerInPort(const char*) {
106
virtual void* registerInPort(const char*, bool) {
93
109
virtual void unregisterPort(void*) {}
94
110
virtual void connect(void*, void*) {}
95
111
virtual void disconnect(void*, void*) {}
112
virtual int connections(void* /*clientPort*/) { return 0; }
96
113
virtual void setPortName(void*, const char*) {}
97
114
virtual void* findPort(const char*) { return 0;}
98
115
virtual QString portName(void*) {
108
125
printf("DummyAudioDevice::getCurFrame %d\n", _framePos);
110
127
return _framePos; }
128
virtual unsigned frameTime() const {
129
return lrint(curTime() * sampleRate);
111
131
virtual bool isRealtime() { return realtimeFlag; }
112
132
//virtual int realtimePriority() const { return 40; }
113
133
virtual int realtimePriority() const { return _realTimePriority; }
162
182
DummyAudioDevice::DummyAudioDevice()
164
184
// Added by Tim. p3.3.15
165
posix_memalign((void**)&buffer, 16, sizeof(float) * dummyFrames);
186
//posix_memalign((void**)&buffer, 16, sizeof(float) * dummyFrames);
187
posix_memalign((void**)&buffer, 16, sizeof(float) * config.dummyAudioBufSize);
167
189
realtimeFlag = false;
168
190
state = Audio::STOP;
199
221
//---------------------------------------------------------
201
std::list<QString> DummyAudioDevice::outputPorts()
223
std::list<QString> DummyAudioDevice::outputPorts(bool midi, int /*aliases*/)
203
225
std::list<QString> clientList;
204
clientList.push_back(QString("output1"));
205
clientList.push_back(QString("output2"));
228
clientList.push_back(QString("output1"));
229
clientList.push_back(QString("output2"));
206
231
return clientList;
211
236
//---------------------------------------------------------
213
std::list<QString> DummyAudioDevice::inputPorts()
238
std::list<QString> DummyAudioDevice::inputPorts(bool midi, int /*aliases*/)
215
240
std::list<QString> clientList;
216
clientList.push_back(QString("input1"));
217
clientList.push_back(QString("input2"));
243
clientList.push_back(QString("input1"));
244
clientList.push_back(QString("input2"));
218
246
return clientList;
225
253
static void* dummyLoop(void* ptr)
227
255
//unsigned int tickRate = 25;
229
segmentSize = dummyFrames;
230
unsigned int tickRate = sampleRate / dummyFrames;
258
//sampleRate = 25600;
259
sampleRate = config.dummyAudioSampleRate;
260
//segmentSize = dummyFrames;
261
segmentSize = config.dummyAudioBufSize;
262
//unsigned int tickRate = sampleRate / dummyFrames;
263
unsigned int tickRate = sampleRate / segmentSize;
233
fprintf(stderr, "Finding best alsa timer for dummy driver:\n");
266
fprintf(stderr, "Get alsa timer for dummy driver:\n");
234
267
timer.setFindBestTimer(false);
235
268
int fd = timer.initTimer();
270
// QMessageBox::critical( 0, /*tr*/(QString("Failed to start timer for dummy audio driver!")),
271
// /*tr*/(QString("No functional timer was available.\n"
272
// "Alsa timer not available, check if module snd_timer is available and /dev/snd/timer is available")));
273
fprintf(stderr, "Failed to start timer for dummy audio driver! No functional timer was available.\n"
274
"Alsa timer not available, check if module snd_timer is available and /dev/snd/timer is available\n");
237
278
/* Depending on nature of the timer, the requested tickRate might not
238
279
* be available. The return value is the nearest available frequency,
239
280
* so use this to reset our dummpy sampleRate to keep everything
242
283
tickRate = timer.setTimerFreq( /*250*/ tickRate );
286
// If it didn't work, get the actual rate.
288
tickRate = timer.getTimerFreq();
243
290
sampleRate = tickRate * segmentSize;
244
291
timer.startTimer();