Mercurial > hg > svcore
comparison data/fileio/CoreAudioFileReader.cpp @ 1026:01a90c025eaa coreaudio-metadata
Pending
author | Chris Cannam |
---|---|
date | Mon, 09 Feb 2015 10:27:21 +0000 |
parents | d03b3d956358 |
children |
comparison
equal
deleted
inserted
replaced
1025:88b54a185a0a | 1026:01a90c025eaa |
---|---|
86 (kCFAllocatorDefault, | 86 (kCFAllocatorDefault, |
87 (const UInt8 *)ba.data(), | 87 (const UInt8 *)ba.data(), |
88 (CFIndex)ba.length(), | 88 (CFIndex)ba.length(), |
89 false); | 89 false); |
90 | 90 |
91 //!!! how do we find out if the file open fails because of DRM protection? | |
92 | |
93 //#if (MACOSX_DEPLOYMENT_TARGET <= 1040 && MAC_OS_X_VERSION_MIN_REQUIRED <= 1040) | |
94 // FSRef fsref; | |
95 // if (!CFURLGetFSRef(url, &fsref)) { // returns Boolean, not error code | |
96 // m_error = "CoreAudioReadStream: Error looking up FS ref (file not found?)"; | |
97 // return; | |
98 // } | |
99 // m_d->err = ExtAudioFileOpen(&fsref, &m_d->file); | |
100 //#else | |
101 m_d->err = ExtAudioFileOpenURL(url, &m_d->file); | 91 m_d->err = ExtAudioFileOpenURL(url, &m_d->file); |
102 //#endif | |
103 | 92 |
104 CFRelease(url); | 93 CFRelease(url); |
105 | 94 |
106 if (m_d->err) { | 95 if (m_d->err) { |
107 m_error = "CoreAudioReadStream: Error opening file: code " + codestr(m_d->err); | 96 m_error = "CoreAudioReadStream: Error opening file: code " + codestr(m_d->err); |
152 m_d->buffer.mBuffers[0].mDataByteSize = sizeof(float) * m_channelCount * m_d->blockSize; | 141 m_d->buffer.mBuffers[0].mDataByteSize = sizeof(float) * m_channelCount * m_d->blockSize; |
153 m_d->buffer.mBuffers[0].mData = new float[m_channelCount * m_d->blockSize]; | 142 m_d->buffer.mBuffers[0].mData = new float[m_channelCount * m_d->blockSize]; |
154 | 143 |
155 m_d->valid = true; | 144 m_d->valid = true; |
156 | 145 |
146 readMetadata(); | |
157 initialiseDecodeCache(); | 147 initialiseDecodeCache(); |
158 | 148 |
159 if (m_reporter) { | 149 if (m_reporter) { |
160 connect(m_reporter, SIGNAL(cancelled()), this, SLOT(cancelled())); | 150 connect(m_reporter, SIGNAL(cancelled()), this, SLOT(cancelled())); |
161 m_reporter->setMessage | 151 m_reporter->setMessage |
187 endSerialised(); | 177 endSerialised(); |
188 | 178 |
189 m_completion = 100; | 179 m_completion = 100; |
190 } | 180 } |
191 | 181 |
192 | |
193 CoreAudioFileReader::~CoreAudioFileReader() | 182 CoreAudioFileReader::~CoreAudioFileReader() |
194 { | 183 { |
195 cerr << "CoreAudioFileReader::~CoreAudioFileReader" << endl; | 184 cerr << "CoreAudioFileReader::~CoreAudioFileReader" << endl; |
196 | 185 |
197 if (m_d->valid) { | 186 if (m_d->valid) { |
198 ExtAudioFileDispose(m_d->file); | 187 ExtAudioFileDispose(m_d->file); |
199 delete[] m_d->buffer.mBuffers[0].mData; | 188 delete[] m_d->buffer.mBuffers[0].mData; |
200 } | 189 } |
201 | 190 |
202 delete m_d; | 191 delete m_d; |
192 } | |
193 | |
194 void | |
195 CoreAudioFileReader::readMetadata() | |
196 { | |
197 AudioFileID audiofile; | |
198 UInt32 propsize = sizeof(AudioFileID); | |
199 | |
200 // err is local, failures here are only warnings | |
201 OSStatus err = noErr; | |
202 | |
203 err = ExtAudioFileGetProperty | |
204 (m_d->file, kExtAudioFileProperty_AudioFile, &propsize, &audiofile); | |
205 | |
206 if (err) { | |
207 cerr << "WARNING: CoreAudioReadStream: Error in getting underlying audio file: code " << codestr(err) << endl; | |
208 return; | |
209 } | |
210 | |
211 propsize = 0; | |
212 char *data = 0; | |
213 err = AudioFileGetPropertyInfo | |
214 (audiofile, kAudioFilePropertyID3Tag, &propsize, 0); | |
215 if (err) { | |
216 cerr << "WARNING: CoreAudioReadStream: Failed to get id3 tag size: code " << codestr(err) << endl; | |
217 return; | |
218 } | |
219 | |
220 data = new char[propsize]; | |
221 err = AudioFileGetProperty | |
222 (audiofile, kAudioFilePropertyID3Tag, &propsize, data); | |
223 if (err) { | |
224 cerr << "WARNING: CoreAudioReadStream: Failed to read id3 tag data: code " << codestr(err) << endl; | |
225 return; | |
226 } | |
227 | |
228 | |
229 | |
230 delete[] data; | |
203 } | 231 } |
204 | 232 |
205 void | 233 void |
206 CoreAudioFileReader::cancelled() | 234 CoreAudioFileReader::cancelled() |
207 { | 235 { |