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