~ubuntu-branches/ubuntu/oneiric/muse/oneiric

« back to all changes in this revision

Viewing changes to muse/driver/dummyaudio.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Fabrice Coutadeur
  • Date: 2010-11-17 21:43:38 UTC
  • mfrom: (1.1.8 upstream)
  • Revision ID: james.westby@ubuntu.com-20101117214338-1hvfl7oo2dsqnvrb
Tags: 1.1-0ubuntu1
* New upstream release (LP: #668631)
* Switch to dpkg-source 3.0 (quilt) format
* Switch to dh7 short form
* debian/rules:
  - added --enable-dssi and --enable-osc to conf flags for dssi support
  - added -ljackserver to LDFLAGS to fix a FTBFS because of --as-needed
* debian/control:
  - added build build dependency on liblo-dev and dssi-dev for dssi support
  - bump Standards-version to 3.9.1. No changes required.
* debian/muse.desktop, debian/muse.xpm: dropped as desktop file and icon is
  now shipped upstream.
* fix-desktop-categories.patch: fix Categories tag in upstream desktop file
* 10_es_locale_fix.dpatch: refreshed and converted to quilt as
  fix_es_locale.patch

Show diffs side-by-side

added added

removed removed

Lines of Context:
7
7
 
8
8
#include <stdio.h>
9
9
#include <stdlib.h>
 
10
#include <math.h>
10
11
#include <errno.h>
11
12
#include <stdarg.h>
12
13
#include <pthread.h>
13
14
#include <sys/poll.h>
 
15
#include <qmessagebox.h>
14
16
 
15
17
#include "config.h"
16
18
#include "audio.h"
19
21
#include "song.h"
20
22
#include "driver/alsatimer.h"
21
23
#include "pos.h"
 
24
#include "gconfig.h"
 
25
#include "utils.h"
 
26
 
 
27
class MidiPlayEvent;
22
28
 
23
29
#define DEBUG_DUMMY 0
24
30
//---------------------------------------------------------
25
31
//   DummyAudioDevice
26
32
//---------------------------------------------------------
27
33
 
28
 
static const unsigned dummyFrames = 1024;
 
34
//static const unsigned dummyFrames = 1024;
29
35
 
30
36
enum Cmd {
31
37
trSeek,
60
66
        free(buffer); 
61
67
      }
62
68
 
 
69
      virtual inline int deviceType() { return DUMMY_AUDIO; } // p3.3.52
 
70
      
63
71
      //virtual void start();
64
72
      virtual void start(int);
65
73
      
72
80
 
73
81
      virtual float* getBuffer(void* /*port*/, unsigned long nframes)
74
82
            {
75
 
            if (nframes > dummyFrames) {
76
 
                  printf("error: segment size > 1024\n");
 
83
            // p3.3.30
 
84
            //if (nframes > dummyFrames) {
 
85
                  //printf("error: segment size > 1024\n");
 
86
            if (nframes > segmentSize) {
 
87
                  printf("DummyAudioDevice::getBuffer nframes > segment size\n");
 
88
                  
77
89
                  exit(-1);
78
90
                  }
79
91
            return buffer;
80
92
            }
81
93
 
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);
84
96
 
85
97
      virtual void registerClient() {}
86
98
 
87
 
      virtual void* registerOutPort(const char*) {
 
99
      virtual const char* clientName() { return "MusE"; }
 
100
      
 
101
      //virtual void* registerOutPort(const char*) {
 
102
      virtual void* registerOutPort(const char*, bool) {
88
103
            return (void*)1;
89
104
            }
90
 
      virtual void* registerInPort(const char*) {
 
105
      //virtual void* registerInPort(const char*) {
 
106
      virtual void* registerInPort(const char*, bool) {
91
107
            return (void*)2;
92
108
            }
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);
109
126
      
110
127
      return _framePos; }
 
128
      virtual unsigned frameTime() const {
 
129
            return lrint(curTime() * sampleRate);
 
130
            }
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() 
163
183
      {
164
184
      // Added by Tim. p3.3.15
165
 
      posix_memalign((void**)&buffer, 16, sizeof(float) * dummyFrames);
 
185
      // p3.3.30
 
186
      //posix_memalign((void**)&buffer, 16, sizeof(float) * dummyFrames);
 
187
      posix_memalign((void**)&buffer, 16, sizeof(float) * config.dummyAudioBufSize);
166
188
      
167
189
      realtimeFlag = false;
168
190
      state = Audio::STOP;
198
220
//   outputPorts
199
221
//---------------------------------------------------------
200
222
 
201
 
std::list<QString> DummyAudioDevice::outputPorts()
 
223
std::list<QString> DummyAudioDevice::outputPorts(bool midi, int /*aliases*/)
202
224
      {
203
225
      std::list<QString> clientList;
204
 
      clientList.push_back(QString("output1"));
205
 
      clientList.push_back(QString("output2"));
 
226
      if(!midi)
 
227
      {
 
228
        clientList.push_back(QString("output1"));
 
229
        clientList.push_back(QString("output2"));
 
230
      }  
206
231
      return clientList;
207
232
      }
208
233
 
210
235
//   inputPorts
211
236
//---------------------------------------------------------
212
237
 
213
 
std::list<QString> DummyAudioDevice::inputPorts()
 
238
std::list<QString> DummyAudioDevice::inputPorts(bool midi, int /*aliases*/)
214
239
      {
215
240
      std::list<QString> clientList;
216
 
      clientList.push_back(QString("input1"));
217
 
      clientList.push_back(QString("input2"));
 
241
      if(!midi)
 
242
      {
 
243
        clientList.push_back(QString("input1"));
 
244
        clientList.push_back(QString("input2"));
 
245
      }  
218
246
      return clientList;
219
247
      }
220
248
 
225
253
static void* dummyLoop(void* ptr)
226
254
      {
227
255
      //unsigned int tickRate = 25;
228
 
      sampleRate = 25600;
229
 
      segmentSize = dummyFrames;
230
 
      unsigned int tickRate = sampleRate / dummyFrames;
 
256
      
 
257
      // p3.3.30
 
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;
231
264
      
232
265
      AlsaTimer timer;
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();
236
 
      
 
269
      if (fd==-1) {
 
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");
 
275
        pthread_exit(0);
 
276
      }
 
277
 
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 
240
281
       * consistent.
241
282
       */
242
283
      tickRate = timer.setTimerFreq( /*250*/ tickRate );
 
284
      
 
285
      // p3.3.31
 
286
      // If it didn't work, get the actual rate.
 
287
      if(tickRate == 0)
 
288
        tickRate = timer.getTimerFreq();
 
289
        
243
290
      sampleRate = tickRate * segmentSize;
244
291
      timer.startTimer();
245
292