Skip to content

Latest commit

 

History

History
173 lines (128 loc) · 6.46 KB

AudioFilePlayer.h

File metadata and controls

173 lines (128 loc) · 6.46 KB
 
1
2
/*
SDL - Simple DirectMedia Layer
Jan 4, 2004
Jan 4, 2004
3
Copyright (C) 1997-2004 Sam Lantinga
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Sam Lantinga
slouken@libsdl.org
This file based on Apple sample code. We haven't changed the file name,
so if you want to see the original search for it on apple.com/developer
*/
Feb 21, 2006
Feb 21, 2006
25
#include "SDL_config.h"
Mar 9, 2006
Mar 9, 2006
27
28
29
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
AudioFilePlayer.h
*/
30
31
32
33
34
35
#ifndef __AudioFilePlayer_H__
#define __AudioFilePlayer_H__
#include <CoreServices/CoreServices.h>
#include <AudioUnit/AudioUnit.h>
Dec 28, 2007
Dec 28, 2007
36
37
38
#ifdef AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER
#include <AudioUnit/AUNTComponent.h>
#endif
Jul 22, 2003
Jul 22, 2003
40
#include "SDL_error.h"
41
42
43
const char* AudioFilePlayerErrorStr (OSStatus error);
Sep 22, 2005
Sep 22, 2005
44
/*
45
46
47
48
49
50
void ThrowResult (OSStatus result, const char *str);
#define THROW_RESULT(str) \
if (result) { \
ThrowResult (result, str); \
}
Sep 22, 2005
Sep 22, 2005
51
*/
52
53
54
55
56
57
58
59
60
61
62
typedef void (*AudioFilePlayNotifier)(void *inRefCon,
OSStatus inStatus);
enum {
kAudioFilePlayErr_FilePlayUnderrun = -10000,
kAudioFilePlay_FileIsFinished = -10001,
kAudioFilePlay_PlayerIsUninitialized = -10002
};
Sep 22, 2005
Sep 22, 2005
63
struct S_AudioFileManager;
64
65
#pragma mark __________ AudioFilePlayer
Sep 22, 2005
Sep 22, 2005
66
typedef struct S_AudioFilePlayer
Mar 9, 2006
Mar 9, 2006
68
/*public:*/
Sep 22, 2005
Sep 22, 2005
69
70
int (*SetDestination)(struct S_AudioFilePlayer *afp, AudioUnit *inDestUnit);
void (*SetNotifier)(struct S_AudioFilePlayer *afp, AudioFilePlayNotifier inNotifier, void *inRefCon);
Mar 9, 2006
Mar 9, 2006
71
72
73
void (*SetStartFrame)(struct S_AudioFilePlayer *afp, int frame); /* seek in the file */
int (*GetCurrentFrame)(struct S_AudioFilePlayer *afp); /* get the current frame position */
void (*SetStopFrame)(struct S_AudioFilePlayer *afp, int frame); /* set limit in the file */
Sep 22, 2005
Sep 22, 2005
74
75
76
77
78
79
80
int (*Connect)(struct S_AudioFilePlayer *afp);
void (*Disconnect)(struct S_AudioFilePlayer *afp);
void (*DoNotification)(struct S_AudioFilePlayer *afp, OSStatus inError);
int (*IsConnected)(struct S_AudioFilePlayer *afp);
AudioUnit (*GetDestUnit)(struct S_AudioFilePlayer *afp);
void (*Print)(struct S_AudioFilePlayer *afp);
Mar 9, 2006
Mar 9, 2006
81
/*private:*/
82
AudioUnit mPlayUnit;
Jan 4, 2004
Jan 4, 2004
83
SInt16 mForkRefNum;
84
85
86
87
88
AudioUnitInputCallback mInputCallback;
AudioStreamBasicDescription mFileDescription;
Sep 22, 2005
Sep 22, 2005
89
int mConnected;
Sep 22, 2005
Sep 22, 2005
91
struct S_AudioFileManager* mAudioFileManager;
92
93
94
95
96
97
98
99
AudioFilePlayNotifier mNotifier;
void* mRefCon;
int mStartFrame;
#pragma mark __________ Private_Methods
Sep 22, 2005
Sep 22, 2005
100
101
102
103
104
105
106
107
int (*OpenFile)(struct S_AudioFilePlayer *afp, const FSRef *inRef, SInt64 *outFileSize);
} AudioFilePlayer;
AudioFilePlayer *new_AudioFilePlayer(const FSRef *inFileRef);
void delete_AudioFilePlayer(AudioFilePlayer *afp);
108
109
#pragma mark __________ AudioFileManager
Sep 22, 2005
Sep 22, 2005
110
typedef struct S_AudioFileManager
Mar 9, 2006
Mar 9, 2006
112
113
114
/*public:*/
/* this method should NOT be called by an object of this class
as it is called by the parent's Disconnect() method */
Sep 22, 2005
Sep 22, 2005
115
116
117
118
119
void (*Disconnect)(struct S_AudioFileManager *afm);
int (*DoConnect)(struct S_AudioFileManager *afm);
OSStatus (*Read)(struct S_AudioFileManager *afm, char *buffer, UInt32 *len);
const char* (*GetFileBuffer)(struct S_AudioFileManager *afm);
const AudioFilePlayer *(*GetParent)(struct S_AudioFileManager *afm);
Mar 9, 2006
Mar 9, 2006
120
121
122
void (*SetPosition)(struct S_AudioFileManager *afm, SInt64 pos); /* seek/rewind in the file */
int (*GetByteCounter)(struct S_AudioFileManager *afm); /* return actual bytes streamed to audio hardware */
void (*SetEndOfFile)(struct S_AudioFileManager *afm, SInt64 pos); /* set the "EOF" (will behave just like it reached eof) */
Mar 9, 2006
Mar 9, 2006
124
/*protected:*/
Sep 22, 2005
Sep 22, 2005
125
AudioFilePlayer* mParent;
Jan 4, 2004
Jan 4, 2004
126
127
SInt16 mForkRefNum;
SInt64 mAudioDataOffset;
Jan 4, 2004
Jan 4, 2004
129
char* mFileBuffer;
Jan 4, 2004
Jan 4, 2004
131
132
int mByteCounter;
Sep 22, 2005
Sep 22, 2005
133
134
135
int mReadFromFirstBuffer;
int mLockUnsuccessful;
int mIsEngaged;
Jan 4, 2004
Jan 4, 2004
136
137
int mNumTimesAskedSinceFinished;
Aug 21, 2004
Aug 21, 2004
139
140
141
142
void* mTmpBuffer;
UInt32 mBufferSize;
UInt32 mBufferOffset;
Mar 9, 2006
Mar 9, 2006
143
/*public:*/
Sep 22, 2005
Sep 22, 2005
144
UInt32 mChunkSize;
Jan 4, 2004
Jan 4, 2004
145
146
SInt64 mFileLength;
SInt64 mReadFilePosition;
Sep 22, 2005
Sep 22, 2005
147
148
int mWriteToFirstBuffer;
int mFinishedReadingData;
Jan 4, 2004
Jan 4, 2004
149
Mar 9, 2006
Mar 9, 2006
150
/*protected:*/
Sep 22, 2005
Sep 22, 2005
151
152
153
154
OSStatus (*Render)(struct S_AudioFileManager *afm, AudioBuffer *ioData);
OSStatus (*GetFileData)(struct S_AudioFileManager *afm, void** inOutData, UInt32 *inOutDataSize);
void (*AfterRender)(struct S_AudioFileManager *afm);
Mar 9, 2006
Mar 9, 2006
155
156
/*public:*/
/*static*/
Sep 22, 2005
Sep 22, 2005
157
158
159
160
161
162
OSStatus (*FileInputProc)(void *inRefCon,
AudioUnitRenderActionFlags inActionFlags,
const AudioTimeStamp *inTimeStamp,
UInt32 inBusNumber,
AudioBuffer *ioData);
} AudioFileManager;
Sep 22, 2005
Sep 22, 2005
165
166
167
168
169
170
171
AudioFileManager *new_AudioFileManager (AudioFilePlayer *inParent,
SInt16 inForkRefNum,
SInt64 inFileLength,
UInt32 inChunkSize);
void delete_AudioFileManager(AudioFileManager *afm);