Mercurial > sdl-ios-xcode
comparison src/cdrom/macosx/AudioFilePlayer.h @ 768:de1b2c3063b9
Max has been reworking this code so it works on MacOS X 10.1
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sun, 04 Jan 2004 16:20:28 +0000 |
parents | 1bd056de5d1b |
children | b8d311d90021 |
comparison
equal
deleted
inserted
replaced
767:d9e79e31a7b7 | 768:de1b2c3063b9 |
---|---|
29 #ifndef __AudioFilePlayer_H__ | 29 #ifndef __AudioFilePlayer_H__ |
30 #define __AudioFilePlayer_H__ | 30 #define __AudioFilePlayer_H__ |
31 | 31 |
32 #include <CoreServices/CoreServices.h> | 32 #include <CoreServices/CoreServices.h> |
33 | 33 |
34 #include <AudioToolbox/AudioToolbox.h> | 34 #include <AudioToolbox/AudioConverter.h> |
35 #include <AudioUnit/AudioUnit.h> | 35 #include <AudioUnit/AudioUnit.h> |
36 | 36 |
37 #include "SDL_error.h" | 37 #include "SDL_error.h" |
38 | 38 |
39 const char* AudioFilePlayerErrorStr (OSStatus error); | 39 const char* AudioFilePlayerErrorStr (OSStatus error); |
95 AudioConverterRef GetAudioConverter() const { return mConverter; } | 95 AudioConverterRef GetAudioConverter() const { return mConverter; } |
96 | 96 |
97 #if DEBUG | 97 #if DEBUG |
98 void Print() const | 98 void Print() const |
99 { | 99 { |
100 CAShow (mAudioFileID); | |
101 printf ("Destination Bus:%ld\n", GetBusNumber()); | 100 printf ("Destination Bus:%ld\n", GetBusNumber()); |
102 printf ("Is 'aunt' unit:%s\n", (mIsAUNTUnit ? "true" : "false")); | |
103 printf ("Is Connected:%s\n", (IsConnected() ? "true" : "false")); | 101 printf ("Is Connected:%s\n", (IsConnected() ? "true" : "false")); |
104 if (mConverter) CAShow (mConverter); | 102 printf ("- - - - - - - - - - - - - - \n"); |
105 printf ("- - - - - - - - - - - - - - \n"); | |
106 } | 103 } |
107 #endif | 104 #endif |
108 | 105 |
109 const AudioStreamBasicDescription& GetFileFormat() const { return mFileDescription; } | 106 const AudioStreamBasicDescription& GetFileFormat() const { return mFileDescription; } |
110 | 107 |
111 private: | 108 private: |
112 AudioUnit mPlayUnit; | 109 AudioUnit mPlayUnit; |
113 UInt32 mBusNumber; | 110 UInt32 mBusNumber; |
114 AudioFileID mAudioFileID; | 111 SInt16 mForkRefNum; |
115 | 112 |
116 AudioUnitInputCallback mInputCallback; | 113 AudioUnitInputCallback mInputCallback; |
117 | 114 |
118 AudioStreamBasicDescription mFileDescription; | 115 AudioStreamBasicDescription mFileDescription; |
119 | 116 |
120 bool mConnected; | 117 bool mConnected; |
121 bool mIsAUNTUnit; | |
122 | 118 |
123 AudioFileManager* mAudioFileManager; | 119 AudioFileManager* mAudioFileManager; |
124 AudioConverterRef mConverter; | 120 AudioConverterRef mConverter; |
125 | 121 |
126 AudioFilePlayNotifier mNotifier; | 122 AudioFilePlayNotifier mNotifier; |
135 | 131 |
136 #pragma mark __________ AudioFileManager | 132 #pragma mark __________ AudioFileManager |
137 class AudioFileManager | 133 class AudioFileManager |
138 { | 134 { |
139 public: | 135 public: |
140 AudioFileManager (AudioFilePlayer& inParent, AudioFileID inFile) | 136 AudioFileManager (AudioFilePlayer &inParent, |
141 : mParent (inParent), | 137 SInt16 inForkRefNum, |
142 mAudioFileID (inFile), | 138 SInt64 inFileLength, |
143 mFileBuffer (0), | 139 UInt32 inChunkSize); |
144 mByteCounter (0) | 140 |
145 {} | 141 ~AudioFileManager(); |
146 | |
147 virtual ~AudioFileManager(); | |
148 | 142 |
149 | 143 |
150 void Connect (AudioConverterRef inConverter) | 144 void Connect (AudioConverterRef inConverter) |
151 { | 145 { |
152 mParentConverter = inConverter; | 146 mParentConverter = inConverter; |
153 DoConnect(); | 147 DoConnect(); |
154 } | 148 } |
155 | 149 |
156 // this method should NOT be called by an object of this class | 150 // this method should NOT be called by an object of this class |
157 // as it is called by the parent's Disconnect() method | 151 // as it is called by the parent's Disconnect() method |
158 virtual void Disconnect () {} | 152 void Disconnect (); |
159 | 153 |
160 const AudioFileID& GetFileID() const { return mAudioFileID; } | 154 OSStatus Read(char *buffer, UInt32 *len); |
161 | 155 |
162 const char* GetFileBuffer () { return mFileBuffer; } | 156 const char* GetFileBuffer () { return mFileBuffer; } |
163 | 157 |
164 const AudioFilePlayer& GetParent () const { return mParent; } | 158 const AudioFilePlayer& GetParent () const { return mParent; } |
165 | 159 |
166 virtual void SetPosition (SInt64 pos) = 0; // seek/rewind in the file | 160 void SetPosition (SInt64 pos); // seek/rewind in the file |
167 | 161 |
168 virtual int GetByteCounter () { return mByteCounter; } // return actual bytes streamed to audio hardware | 162 int GetByteCounter () { return mByteCounter; } // return actual bytes streamed to audio hardware |
169 | 163 |
170 virtual void SetEndOfFile (SInt64 pos) = 0; // set the "EOF" (will behave just like it reached eof) | 164 void SetEndOfFile (SInt64 pos); // set the "EOF" (will behave just like it reached eof) |
171 | 165 |
172 protected: | 166 protected: |
173 AudioFilePlayer& mParent; | 167 AudioFilePlayer& mParent; |
174 AudioConverterRef mParentConverter; | 168 AudioConverterRef mParentConverter; |
175 const AudioFileID mAudioFileID; | 169 SInt16 mForkRefNum; |
176 | 170 SInt64 mAudioDataOffset; |
177 char* mFileBuffer; | 171 |
178 | 172 char* mFileBuffer; |
173 | |
174 int mByteCounter; | |
175 | |
176 bool mReadFromFirstBuffer; | |
177 bool mLockUnsuccessful; | |
178 bool mIsEngaged; | |
179 | |
180 int mNumTimesAskedSinceFinished; | |
181 | |
182 public: | |
183 const UInt32 mChunkSize; | |
184 SInt64 mFileLength; | |
185 SInt64 mReadFilePosition; | |
186 bool mWriteToFirstBuffer; | |
187 bool mFinishedReadingData; | |
188 | |
189 protected: | |
179 OSStatus Render (AudioBuffer &ioData); | 190 OSStatus Render (AudioBuffer &ioData); |
180 | 191 |
181 int mByteCounter; | 192 OSStatus GetFileData (void** inOutData, UInt32 *inOutDataSize); |
182 | 193 |
183 virtual OSStatus GetFileData (void** inOutData, UInt32 *inOutDataSize) = 0; | 194 void DoConnect (); |
184 | |
185 virtual void DoConnect () = 0; | |
186 | 195 |
187 virtual void AfterRender () = 0; | 196 void AfterRender (); |
188 | 197 |
189 public: | 198 public: |
190 static OSStatus FileInputProc (void *inRefCon, | 199 static OSStatus FileInputProc (void *inRefCon, |
191 AudioUnitRenderActionFlags inActionFlags, | 200 AudioUnitRenderActionFlags inActionFlags, |
192 const AudioTimeStamp *inTimeStamp, | 201 const AudioTimeStamp *inTimeStamp, |
197 void** outData, | 206 void** outData, |
198 void* inUserData); | 207 void* inUserData); |
199 }; | 208 }; |
200 | 209 |
201 | 210 |
202 #pragma mark __________ AudioFileReaderThread | |
203 class AudioFileReaderThread | |
204 : public AudioFileManager | |
205 { | |
206 public: | |
207 const UInt32 mChunkSize; | |
208 SInt64 mFileLength; | |
209 SInt64 mReadFilePosition; | |
210 bool mWriteToFirstBuffer; | |
211 bool mFinishedReadingData; | |
212 | |
213 AudioFileReaderThread (AudioFilePlayer &inParent, | |
214 AudioFileID &inFile, | |
215 SInt64 inFileLength, | |
216 UInt32 inChunkSize); | |
217 | |
218 virtual void Disconnect (); | |
219 | |
220 virtual void SetPosition (SInt64 pos); // seek/rewind in the file | |
221 | |
222 virtual void SetEndOfFile (SInt64 pos); // set the "EOF" (will behave just like it reached eof) | |
223 | |
224 protected: | |
225 virtual void DoConnect (); | |
226 | |
227 virtual OSStatus GetFileData (void** inOutData, UInt32 *inOutDataSize); | |
228 | |
229 virtual void AfterRender (); | |
230 | |
231 private: | |
232 bool mReadFromFirstBuffer; | |
233 bool mLockUnsuccessful; | |
234 bool mIsEngaged; | |
235 | |
236 int mNumTimesAskedSinceFinished; | |
237 }; | |
238 | |
239 | |
240 #endif | 211 #endif |