~ubuntu-branches/debian/sid/hydrogen/sid

« back to all changes in this revision

Viewing changes to .pc/09_portaudio_v2.patch/libs/hydrogen/src/IO/portaudio_driver.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Jonas Smedegaard
  • Date: 2010-03-02 16:51:50 UTC
  • Revision ID: james.westby@ubuntu.com-20100302165150-rkmtkb5uh2nu9m11
Tags: 0.9.4-2
* Update local CDBS snippets:
  + Improve package-relationships.mk to strip unversioned build-
    dependency following same versioned.
  + Refer to FSF website (not postal address) in license headers.
  + Bump copyright years.
  + Handle cdbs 0.4.67~ in package-relations.mk.
  + Make copyright-check.mk strict when in DEB_MAINTAINER_MODE.
  + Fix force use LC_ALL=C in copyright-check.mk.
* Add patch 0001 to relax SCons linux2 resolving. Closes: bug#570557,
  thanks to dann frazier.
* Add README to patch dir in source, documenting local patch numbering
  scheme.
* Refer to FSF website (not postal address) in rules file and
  copyright file.
* Drop setup DEB_MAINTAINER_MODE in rules file (done in snippets now).

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
 
 
2
#include "PortAudioDriver.h"
 
3
//#include "config.h"
 
4
#ifdef PORTAUDIO_SUPPORT
 
5
 
 
6
#include <iostream>
 
7
 
 
8
#include <hydrogen/Preferences.h>
 
9
namespace H2Core
 
10
{
 
11
 
 
12
int portAudioCallback(
 
13
    void *inputBuffer,
 
14
    void *outputBuffer,
 
15
    unsigned long framesPerBuffer,
 
16
    PaTimestamp outTime,
 
17
    void *userData
 
18
)
 
19
{
 
20
        PortAudioDriver *pDriver = ( PortAudioDriver* )userData;
 
21
        pDriver->m_processCallback( pDriver->m_nBufferSize, NULL );
 
22
 
 
23
        float *out = ( float* )outputBuffer;
 
24
 
 
25
        for ( unsigned i = 0; i < framesPerBuffer; i++ ) {
 
26
                *out++ = pDriver->m_pOut_L[ i ];
 
27
                *out++ = pDriver->m_pOut_R[ i ];
 
28
        }
 
29
        return 0;
 
30
}
 
31
 
 
32
 
 
33
 
 
34
PortAudioDriver::PortAudioDriver( audioProcessCallback processCallback )
 
35
                : AudioOutput( "PortAudioDriver" )
 
36
                , m_processCallback( processCallback )
 
37
                , m_pOut_L( NULL )
 
38
                , m_pOut_R( NULL )
 
39
{
 
40
        INFOLOG( "INIT" );
 
41
        m_nBufferSize = Preferences::get_instance()->m_nBufferSize;
 
42
        m_nSampleRate = Preferences::get_instance()->m_nSampleRate;
 
43
}
 
44
 
 
45
 
 
46
PortAudioDriver::~PortAudioDriver()
 
47
{
 
48
        INFOLOG( "DESTROY" );
 
49
}
 
50
 
 
51
int PortAudioDriver::init( unsigned nBufferSize )
 
52
{
 
53
        return 0;
 
54
}
 
55
 
 
56
 
 
57
//
 
58
// Connect
 
59
// return 0: Ok
 
60
// return 1: Generic error
 
61
//
 
62
int PortAudioDriver::connect()
 
63
{
 
64
        INFOLOG( "[connect]" );
 
65
 
 
66
        m_pOut_L = new float[ m_nBufferSize ];
 
67
        m_pOut_R = new float[ m_nBufferSize ];
 
68
 
 
69
        int err = Pa_Initialize();
 
70
        
 
71
        
 
72
        if ( err != paNoError ) {
 
73
                ERRORLOG( "Portaudio error in Pa_Initialize: " + QString( Pa_GetErrorText( err ) ) );
 
74
                return 1;
 
75
        }
 
76
 
 
77
        err = Pa_OpenDefaultStream(
 
78
                  &m_pStream,        /* passes back stream pointer */
 
79
                  0,              /* no input channels */
 
80
                  2,              /* stereo output */
 
81
                  paFloat32,      /* 32 bit floating point output */
 
82
                  m_nSampleRate,          // sample rate
 
83
                  m_nBufferSize,            // frames per buffer
 
84
                  0,              // number of buffers, if zero then use default minimum
 
85
                  portAudioCallback, /* specify our custom callback */
 
86
                  this );        /* pass our data through to callback */
 
87
        
 
88
        
 
89
        if ( err != paNoError ) {
 
90
                ERRORLOG(  "Portaudio error in Pa_OpenDefaultStream: " + QString( Pa_GetErrorText( err ) ) );
 
91
                return 1;
 
92
        }
 
93
 
 
94
        err = Pa_StartStream( m_pStream );
 
95
        
 
96
        
 
97
        if ( err != paNoError ) {
 
98
                ERRORLOG(  "Portaudio error in Pa_StartStream: " + QString( Pa_GetErrorText( err ) ) );
 
99
                return 1;
 
100
        }
 
101
        return 0;
 
102
}
 
103
 
 
104
void PortAudioDriver::disconnect()
 
105
{
 
106
        int err = Pa_StopStream( m_pStream );
 
107
        
 
108
        
 
109
        if ( err != paNoError ) {
 
110
                ERRORLOG( "Err: " + QString( Pa_GetErrorText( err ) ) );
 
111
        }
 
112
 
 
113
        err = Pa_CloseStream( m_pStream );
 
114
 
 
115
        
 
116
        if ( err != paNoError ) {
 
117
                ERRORLOG( "Err: " + QString( Pa_GetErrorText( err ) ) );
 
118
        }
 
119
 
 
120
        Pa_Terminate();
 
121
 
 
122
        delete[] m_pOut_L;
 
123
        m_pOut_L = NULL;
 
124
 
 
125
        delete[] m_pOut_R;
 
126
        m_pOut_R = NULL;
 
127
}
 
128
 
 
129
unsigned PortAudioDriver::getBufferSize()
 
130
{
 
131
        return m_nBufferSize;
 
132
}
 
133
 
 
134
unsigned PortAudioDriver::getSampleRate()
 
135
{
 
136
        return m_nSampleRate;
 
137
}
 
138
 
 
139
float* PortAudioDriver::getOut_L()
 
140
{
 
141
        return m_pOut_L;
 
142
}
 
143
 
 
144
float* PortAudioDriver::getOut_R()
 
145
{
 
146
        return m_pOut_R;
 
147
}
 
148
 
 
149
void PortAudioDriver::updateTransportInfo()
 
150
{
 
151
}
 
152
 
 
153
void PortAudioDriver::play()
 
154
{
 
155
        m_transport.m_status = TransportInfo::ROLLING;
 
156
}
 
157
 
 
158
void PortAudioDriver::stop()
 
159
{
 
160
        m_transport.m_status = TransportInfo::STOPPED;
 
161
}
 
162
 
 
163
void PortAudioDriver::locate( unsigned long nFrame )
 
164
{
 
165
        m_transport.m_nFrames = nFrame;
 
166
}
 
167
 
 
168
void PortAudioDriver::setBpm( float fBPM )
 
169
{
 
170
        m_transport.m_nBPM = fBPM;
 
171
}
 
172
 
 
173
};
 
174
 
 
175
#endif
 
176