topical media & game development

talk show tell print

#mobile-application-10-DerbyApp-build-iphone-Classes-AudioStreamer-AudioStreamerCUR.h / h



  //
  //  AudioStreamer.h
  //  StreamingAudioPlayer
  //
  //  Created by Matt Gallagher on 27/09/08.
  //  Copyright 2008 Matt Gallagher. All rights reserved.
  //
  //  Permission is given to use this source code file, free of charge, in any
  //  project, commercial or otherwise, entirely at your risk, with the condition
  //  that any redistribution (in part or whole) of source code must retain
  //  this copyright and permission notice. Attribution in compiled projects is
  //  appreciated but not required.
  //
  
  ifdef USE_TI_MEDIA
  
  ifdef TARGET_OS_IPHONE                        
  #import <UIKit/UIKit.h>
  else
  #import <Cocoa/Cocoa.h>
  endif TARGET_OS_IPHONE                        
  
  #import <AudioStreamer.h>
  include <pthread.h>
  include <AudioToolbox/AudioToolbox.h>
                                                                  
  @interface AudioStreamerCUR : NSObject<AudioStreamerProtocol>
  {
          NSURL *url;
          id<AudioStreamerDelegate> delegate;
  
          //
          // Special threading consideration:
          //        The audioQueue property should only ever be accessed inside a
          //        synchronized(self) block and only *after* checking that ![self isFinishing]
          //
          AudioQueueRef audioQueue;
          AudioFileStreamID audioFileStream;        // the audio file stream parser
          AudioStreamBasicDescription asbd;        // description of the audio
          NSThread *internalThread;                        // the thread where the download and
                                                                                  // audio file stream parsing occurs
          
          AudioQueueBufferRef audioQueueBuffer[kNumAQBufs];                // audio queue buffers
          AudioStreamPacketDescription packetDescs[kAQMaxPacketDescs];        // packet descriptions for enqueuing audio
          unsigned int fillBufferIndex;        // the index of the audioQueueBuffer that is being filled
          UInt32 packetBufferSize;
          size_t bytesFilled;                                // how many bytes have been filled
          size_t packetsFilled;                        // how many packets have been filled
          bool inuse[kNumAQBufs];                        // flags to indicate that a buffer is still in use
          NSInteger buffersUsed;
          NSDictionary *httpHeaders;
          
          TI_AudioStreamerState state;
          TI_AudioStreamerStopReason stopReason;
          TI_AudioStreamerErrorCode errorCode;
          OSStatus err;
          
          bool discontinuous;                        // flag to indicate middle of the stream
          
          pthread_mutex_t queueBuffersMutex;                        // a mutex to protect the inuse flags
          pthread_cond_t queueBufferReadyCondition;        // a condition varable for handling the inuse flags
  
          CFReadStreamRef stream;
          
          UInt32 bitRate;                                // Bits per second in the file
          NSInteger dataOffset;                // Offset of the first audio packet in the stream
          NSInteger fileLength;                // Length of the file in bytes
          NSInteger seekByteOffset;        // Seek offset within the file in bytes
          UInt64 audioDataByteCount;  // Used when the actual number of audio bytes in
                                                                  // the file is known (more accurate than assuming
                                                                  // the whole file is audio)
      NSUInteger bufferSize;      // Dynamic size of the buffer (buffer is default size of 2k if unspec'd)
  
          UInt64 processedPacketsCount;                // number of packets accumulated for bitrate estimation
          UInt64 processedPacketsSizeTotal;        // byte size of accumulated estimation packets
  
          double seekTime;
          BOOL seekWasRequested;
          double requestedSeekTime;
          double sampleRate;                        // Sample rate of the file (used to compare with
                                                                  // samples played by the queue for current playback
                                                                  // time)
          double packetDuration;                // sample rate times frames per packet
          double lastProgress;                // last calculated progress point
  }
  
  @property TI_AudioStreamerErrorCode errorCode;
  @property (readonly) TI_AudioStreamerState state;
  @property (readonly) double progress;
  @property (readonly) double duration;
  @property (readwrite) UInt32 bitRate;
  @property (readonly) NSDictionary *httpHeaders;
  @property (nonatomic,readwrite,assign) NSUInteger bufferSize;
  
  (id)initWithURL:(NSURL *)aURL;
  (void)start;
  (void)stop;
  (void)pause;
  (BOOL)isPlaying;
  (BOOL)isPaused;
  (BOOL)isWaiting;
  (BOOL)isIdle;
  (void)seekToTime:(double)newSeekTime;
  (double)calculatedBitRate;
  
  @end
  
  endif


(C) Æliens 04/09/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.