Mercurial > hg > svapp
comparison audioio/AudioPortAudioTarget.cpp @ 295:14b1768e5406 tonioni
Merge from default branch
author | Chris Cannam |
---|---|
date | Tue, 26 Nov 2013 14:39:57 +0000 |
parents | 068235cf5bf7 |
children | 0876ea394902 |
comparison
equal
deleted
inserted
replaced
292:bc78f88a66f5 | 295:14b1768e5406 |
---|---|
38 m_done(false) | 38 m_done(false) |
39 { | 39 { |
40 PaError err; | 40 PaError err; |
41 | 41 |
42 #ifdef DEBUG_AUDIO_PORT_AUDIO_TARGET | 42 #ifdef DEBUG_AUDIO_PORT_AUDIO_TARGET |
43 std::cerr << "AudioPortAudioTarget: Initialising for PortAudio v19" << std::endl; | 43 cerr << "AudioPortAudioTarget: Initialising for PortAudio v19" << endl; |
44 #endif | 44 #endif |
45 | 45 |
46 err = Pa_Initialize(); | 46 err = Pa_Initialize(); |
47 if (err != paNoError) { | 47 if (err != paNoError) { |
48 std::cerr << "ERROR: AudioPortAudioTarget: Failed to initialize PortAudio: " << Pa_GetErrorText(err) << std::endl; | 48 cerr << "ERROR: AudioPortAudioTarget: Failed to initialize PortAudio: " << Pa_GetErrorText(err) << endl; |
49 return; | 49 return; |
50 } | 50 } |
51 | 51 |
52 m_bufferSize = 2048; | 52 m_bufferSize = 2048; |
53 m_sampleRate = 44100; | 53 m_sampleRate = 44100; |
65 paFramesPerBufferUnspecified, | 65 paFramesPerBufferUnspecified, |
66 paNoFlag, processStatic, this); | 66 paNoFlag, processStatic, this); |
67 | 67 |
68 if (err != paNoError) { | 68 if (err != paNoError) { |
69 | 69 |
70 std::cerr << "WARNING: AudioPortAudioTarget: Failed to open PortAudio stream with default frames per buffer, trying again with fixed frames per buffer..." << std::endl; | 70 cerr << "WARNING: AudioPortAudioTarget: Failed to open PortAudio stream with default frames per buffer, trying again with fixed frames per buffer..." << endl; |
71 | 71 |
72 err = Pa_OpenStream(&m_stream, 0, &op, m_sampleRate, | 72 err = Pa_OpenStream(&m_stream, 0, &op, m_sampleRate, |
73 1024, | 73 1024, |
74 paNoFlag, processStatic, this); | 74 paNoFlag, processStatic, this); |
75 m_bufferSize = 1024; | 75 m_bufferSize = 1024; |
76 } | 76 } |
77 | 77 |
78 if (err != paNoError) { | 78 if (err != paNoError) { |
79 std::cerr << "ERROR: AudioPortAudioTarget: Failed to open PortAudio stream: " << Pa_GetErrorText(err) << std::endl; | 79 cerr << "ERROR: AudioPortAudioTarget: Failed to open PortAudio stream: " << Pa_GetErrorText(err) << endl; |
80 std::cerr << "Note: device ID was " << op.device << std::endl; | 80 cerr << "Note: device ID was " << op.device << endl; |
81 m_stream = 0; | 81 m_stream = 0; |
82 Pa_Terminate(); | 82 Pa_Terminate(); |
83 return; | 83 return; |
84 } | 84 } |
85 | 85 |
86 const PaStreamInfo *info = Pa_GetStreamInfo(m_stream); | 86 const PaStreamInfo *info = Pa_GetStreamInfo(m_stream); |
87 m_latency = int(info->outputLatency * m_sampleRate + 0.001); | 87 m_latency = int(info->outputLatency * m_sampleRate + 0.001); |
88 if (m_bufferSize < m_latency) m_bufferSize = m_latency; | 88 if (m_bufferSize < m_latency) m_bufferSize = m_latency; |
89 | 89 |
90 std::cerr << "PortAudio latency = " << m_latency << " frames" << std::endl; | 90 cerr << "PortAudio latency = " << m_latency << " frames" << endl; |
91 | 91 |
92 err = Pa_StartStream(m_stream); | 92 err = Pa_StartStream(m_stream); |
93 | 93 |
94 if (err != paNoError) { | 94 if (err != paNoError) { |
95 std::cerr << "ERROR: AudioPortAudioTarget: Failed to start PortAudio stream: " << Pa_GetErrorText(err) << std::endl; | 95 cerr << "ERROR: AudioPortAudioTarget: Failed to start PortAudio stream: " << Pa_GetErrorText(err) << endl; |
96 Pa_CloseStream(m_stream); | 96 Pa_CloseStream(m_stream); |
97 m_stream = 0; | 97 m_stream = 0; |
98 Pa_Terminate(); | 98 Pa_Terminate(); |
99 return; | 99 return; |
100 } | 100 } |
101 | 101 |
102 if (m_source) { | 102 if (m_source) { |
103 std::cerr << "AudioPortAudioTarget: block size " << m_bufferSize << std::endl; | 103 cerr << "AudioPortAudioTarget: block size " << m_bufferSize << endl; |
104 m_source->setTarget(this, m_bufferSize); | 104 m_source->setTarget(this, m_bufferSize); |
105 m_source->setTargetSampleRate(m_sampleRate); | 105 m_source->setTargetSampleRate(m_sampleRate); |
106 m_source->setTargetPlayLatency(m_latency); | 106 m_source->setTargetPlayLatency(m_latency); |
107 } | 107 } |
108 | 108 |
109 #ifdef DEBUG_PORT_AUDIO_TARGET | 109 #ifdef DEBUG_PORT_AUDIO_TARGET |
110 std::cerr << "AudioPortAudioTarget: initialised OK" << std::endl; | 110 cerr << "AudioPortAudioTarget: initialised OK" << endl; |
111 #endif | 111 #endif |
112 } | 112 } |
113 | 113 |
114 AudioPortAudioTarget::~AudioPortAudioTarget() | 114 AudioPortAudioTarget::~AudioPortAudioTarget() |
115 { | 115 { |
126 SVDEBUG << "closing stream" << endl; | 126 SVDEBUG << "closing stream" << endl; |
127 | 127 |
128 PaError err; | 128 PaError err; |
129 err = Pa_CloseStream(m_stream); | 129 err = Pa_CloseStream(m_stream); |
130 if (err != paNoError) { | 130 if (err != paNoError) { |
131 std::cerr << "ERROR: AudioPortAudioTarget: Failed to close PortAudio stream: " << Pa_GetErrorText(err) << std::endl; | 131 cerr << "ERROR: AudioPortAudioTarget: Failed to close PortAudio stream: " << Pa_GetErrorText(err) << endl; |
132 } | 132 } |
133 | 133 |
134 std::cerr << "terminating" << std::endl; | 134 cerr << "terminating" << endl; |
135 | 135 |
136 err = Pa_Terminate(); | 136 err = Pa_Terminate(); |
137 if (err != paNoError) { | 137 if (err != paNoError) { |
138 std::cerr << "ERROR: AudioPortAudioTarget: Failed to terminate PortAudio: " << Pa_GetErrorText(err) << std::endl; | 138 cerr << "ERROR: AudioPortAudioTarget: Failed to terminate PortAudio: " << Pa_GetErrorText(err) << endl; |
139 } | 139 } |
140 } | 140 } |
141 | 141 |
142 m_stream = 0; | 142 m_stream = 0; |
143 | 143 |