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