From 9215fe1635f62e359941df8c9b9a4f51a489e485 Mon Sep 17 00:00:00 2001 From: Matt Gallagher Date: Tue, 24 Aug 2010 12:31:01 +1000 Subject: [PATCH 01/21] Fix for thread release memory leak bug. --- Classes/AudioStreamer.m | 4 ++-- Classes/iPhoneStreamingPlayerAppDelegate.m | 6 ++++-- iPhoneStreamingPlayer.xcodeproj/project.pbxproj | 3 ++- main.m | 1 - 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/Classes/AudioStreamer.m b/Classes/AudioStreamer.m index 6804833..3985ec0 100644 --- a/Classes/AudioStreamer.m +++ b/Classes/AudioStreamer.m @@ -863,8 +863,8 @@ - (void)startInternal packetBufferSize = 0; self.state = AS_INITIALIZED; - internalThread = nil; [internalThread release]; + internalThread = nil; } [pool release]; @@ -1159,7 +1159,7 @@ - (void)stop } // -// handleReadFromStream:eventType:data: +// handleReadFromStream:eventType: // // Reads data from the network file stream into the AudioFileStream // diff --git a/Classes/iPhoneStreamingPlayerAppDelegate.m b/Classes/iPhoneStreamingPlayerAppDelegate.m index faf898d..1692819 100644 --- a/Classes/iPhoneStreamingPlayerAppDelegate.m +++ b/Classes/iPhoneStreamingPlayerAppDelegate.m @@ -20,9 +20,11 @@ @implementation iPhoneStreamingPlayerAppDelegate @synthesize window; @synthesize viewController; +- (void)applicationDidFinishLaunching:(UIApplication *)application { + NSDictionary *credentialStorage = + [[NSURLCredentialStorage sharedCredentialStorage] allCredentials]; + NSLog(@"Credentials: %@", credentialStorage); -- (void)applicationDidFinishLaunching:(UIApplication *)application { - // Override point for customization after app launch [window addSubview:viewController.view]; [window makeKeyAndVisible]; diff --git a/iPhoneStreamingPlayer.xcodeproj/project.pbxproj b/iPhoneStreamingPlayer.xcodeproj/project.pbxproj index 10ec8cb..6958bd7 100755 --- a/iPhoneStreamingPlayer.xcodeproj/project.pbxproj +++ b/iPhoneStreamingPlayer.xcodeproj/project.pbxproj @@ -219,6 +219,7 @@ GCC_PREFIX_HEADER = iPhoneStreamingPlayer_Prefix.pch; INFOPLIST_FILE = iPhoneInfo.plist; PRODUCT_NAME = iPhoneStreamingPlayer; + SDKROOT = iphoneos4.0; }; name = Debug; }; @@ -258,7 +259,7 @@ GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; PREBINDING = NO; - SDKROOT = iphoneos3.0; + SDKROOT = iphoneos4.0; }; name = Release; }; diff --git a/main.m b/main.m index 015a1ca..98a3da6 100644 --- a/main.m +++ b/main.m @@ -19,7 +19,6 @@ #endif int main(int argc, const char *argv[]) { - NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; #ifdef TARGET_OS_IPHONE int retVal = UIApplicationMain(argc, (char **)argv, nil, nil); From cbbda629c9bb433e7837ac669dbf00d5fc7ddaf6 Mon Sep 17 00:00:00 2001 From: Ray Hilton Date: Sat, 18 Sep 2010 19:11:35 +0800 Subject: [PATCH 02/21] add bufferFillPercentage property --- Classes/AudioStreamer.h | 1 + Classes/AudioStreamer.m | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/Classes/AudioStreamer.h b/Classes/AudioStreamer.h index 22fd1ab..8904bdf 100644 --- a/Classes/AudioStreamer.h +++ b/Classes/AudioStreamer.h @@ -182,6 +182,7 @@ extern NSString * const ASUpdateMetadataNotification; @property AudioStreamerErrorCode errorCode; @property (readonly) AudioStreamerState state; @property (readonly) double progress; +@property (readonly) double bufferFillPercentage; @property (readonly) double duration; @property (readwrite) UInt32 bitRate; @property (readonly) NSDictionary *httpHeaders; diff --git a/Classes/AudioStreamer.m b/Classes/AudioStreamer.m index f31530f..858c3b3 100644 --- a/Classes/AudioStreamer.m +++ b/Classes/AudioStreamer.m @@ -264,6 +264,17 @@ - (void)dealloc [super dealloc]; } +// +// bufferFillPercentage +// +// returns a value between 0 and 1 that represents how full the buffer is +// +-(double)bufferFillPercentage +{ + return (double)buffersUsed/(double)(kNumAQBufs - 1); +} + + // // isFinishing // From e39667edb35c82287f8f760686987d865affbfdb Mon Sep 17 00:00:00 2001 From: "U-HALCYON\\Grant" Date: Fri, 29 Oct 2010 04:05:15 +0800 Subject: [PATCH 03/21] Updated README --- README | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/README b/README index 52ff2bc..f5b495e 100644 --- a/README +++ b/README @@ -1,10 +1,26 @@ A fork of DigitalDJ's AudioStreamer (which is a fork jfricker's AudioStreamer (which is a fork of the original AudioStreamer by mattgallagher)) -- Fix alert spam / Invisible alerts by dispatching alerts on the main (GUI) thread instead of the notification thread -- Fix compilation issues in Mac OS X Sample App -- Fix compilation issue when SHOUTCAST_METADAT flag is defined -- Fix iPhone apps crashes in SHOUTCAST_METADATA mode when returning from Background +Forked and cherry-picked to get a number of community addons and fixes: +- Shoutcast metadata [jfricker] +- MIME type detection [andybee] +- HE-AACv2 [idevsoftware] +- Level Metering [idevsoftware] +- NSThread memory leak [mattgallagher] +- Fix alert spam / Invisible alerts by dispatching alerts on the main (GUI) thread instead of the notification thread [sebsto] +- Fix compilation issues in Mac OS X Sample App [sebsto] +- Fix compilation issue when SHOUTCAST_METADAT flag is defined [sebsto] +- Fix iPhone apps crashes in SHOUTCAST_METADATA mode when returning from Background [sebsto] + +Fixes and features I've implemented: +- Fixed interruption crashes +- Background buffering +- Play/pause from iPod controls +- Stop all UI updating and timers while backgrounded +- Retina display example +- Support for Pause button in UI +- Local Notifications (outside app) on error + From 6346ab2f37af9d6976dbb2db09e6f569e6def5ca Mon Sep 17 00:00:00 2001 From: "U-HALCYON\\Grant" Date: Fri, 29 Oct 2010 04:22:49 +0800 Subject: [PATCH 04/21] Added support for album metadata [nickpack] --- Classes/iPhoneStreamingPlayerViewController.h | 1 + Classes/iPhoneStreamingPlayerViewController.m | 10 +- iPhone Resources/MainWindow.xib | 453 ++++++++++- .../iPhoneStreamingPlayerViewController.xib | 729 +++++++++++++++--- 4 files changed, 1039 insertions(+), 154 deletions(-) mode change 100644 => 100755 iPhone Resources/MainWindow.xib mode change 100644 => 100755 iPhone Resources/iPhoneStreamingPlayerViewController.xib diff --git a/Classes/iPhoneStreamingPlayerViewController.h b/Classes/iPhoneStreamingPlayerViewController.h index fe95f85..8660197 100644 --- a/Classes/iPhoneStreamingPlayerViewController.h +++ b/Classes/iPhoneStreamingPlayerViewController.h @@ -25,6 +25,7 @@ IBOutlet UISlider *progressSlider; IBOutlet UITextField *metadataArtist; IBOutlet UITextField *metadataTitle; + IBOutlet UITextField *metadataAlbum; AudioStreamer *streamer; NSTimer *progressUpdateTimer; NSTimer *levelMeterUpdateTimer; diff --git a/Classes/iPhoneStreamingPlayerViewController.m b/Classes/iPhoneStreamingPlayerViewController.m index 10f5b59..82e2a36 100644 --- a/Classes/iPhoneStreamingPlayerViewController.m +++ b/Classes/iPhoneStreamingPlayerViewController.m @@ -360,6 +360,7 @@ - (void)metadataChanged:(NSNotification *)aNotification { NSString *streamArtist; NSString *streamTitle; + NSString *streamAlbum; //NSLog(@"Raw meta data = %@", [[aNotification userInfo] objectForKey:@"metadata"]); NSArray *metaParts = [[[aNotification userInfo] objectForKey:@"metadata"] componentsSeparatedByString:@";"]; @@ -385,16 +386,23 @@ - (void)metadataChanged:(NSNotification *)aNotification // this looks odd but not every server will have all artist hyphen title if ([streamParts count] >= 2) { streamTitle = [streamParts objectAtIndex:1]; + if ([streamParts count] >= 3) { + streamAlbum = [streamParts objectAtIndex:2]; + } else { + streamAlbum = @"N/A"; + } } else { streamTitle = @""; + streamAlbum = @""; } - NSLog(@"%@ by %@", streamTitle, streamArtist); + NSLog(@"%@ by %@ from %@", streamTitle, streamArtist, streamAlbum); // only update the UI if in foreground iPhoneStreamingPlayerAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; if (appDelegate.uiIsVisible) { metadataArtist.text = streamArtist; metadataTitle.text = streamTitle; + metadataAlbum.text = streamAlbum; } self.currentArtist = streamArtist; self.currentTitle = streamTitle; diff --git a/iPhone Resources/MainWindow.xib b/iPhone Resources/MainWindow.xib old mode 100644 new mode 100755 index e3d2c31..e49ec1e --- a/iPhone Resources/MainWindow.xib +++ b/iPhone Resources/MainWindow.xib @@ -1,31 +1,52 @@ - + 528 - 9E17 - 672 - 949.33 - 352.00 + 10F569 + 804 + 1038.29 + 461.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 123 + YES - YES com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + YES + + YES + + + YES + + YES IBFilesOwner + IBCocoaTouchFramework IBFirstResponder + IBCocoaTouchFramework + + + IBCocoaTouchFramework - iPhoneStreamingPlayerViewController + + 1 + + IBCocoaTouchFramework + NO @@ -38,6 +59,7 @@ NO NO + IBCocoaTouchFramework @@ -73,44 +95,42 @@ YES 0 - - YES - + -1 - - RmlsZSdzIE93bmVyA + + File's Owner 3 - + iPhoneStreamingPlayer App Delegate -2 - + 10 - + 12 - + YES - + YES -1.CustomClassName -2.CustomClassName @@ -137,9 +157,7 @@ YES - - YES - + YES @@ -147,9 +165,7 @@ YES - - YES - + YES @@ -165,7 +181,7 @@ NSObject YES - + YES viewController window @@ -176,6 +192,25 @@ UIWindow + + YES + + YES + viewController + window + + + YES + + viewController + iPhoneStreamingPlayerViewController + + + window + UIWindow + + + IBProjectSource Classes/iPhoneStreamingPlayerAppDelegate.h @@ -192,15 +227,383 @@ iPhoneStreamingPlayerViewController UIViewController + + YES + + YES + buttonPressed: + sliderMoved: + + + YES + id + UISlider + + + + YES + + YES + buttonPressed: + sliderMoved: + + + YES + + buttonPressed: + id + + + sliderMoved: + UISlider + + + + + YES + + YES + button + downloadSourceField + metadataAlbum + metadataArtist + metadataTitle + positionLabel + progressSlider + volumeSlider + + + YES + UIButton + UITextField + UITextField + UITextField + UITextField + UILabel + UISlider + UIView + + + + YES + + YES + button + downloadSourceField + metadataAlbum + metadataArtist + metadataTitle + positionLabel + progressSlider + volumeSlider + + + YES + + button + UIButton + + + downloadSourceField + UITextField + + + metadataAlbum + UITextField + + + metadataArtist + UITextField + + + metadataTitle + UITextField + + + positionLabel + UILabel + + + progressSlider + UISlider + + + volumeSlider + UIView + + + IBProjectSource Classes/iPhoneStreamingPlayerViewController.h + + YES + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSError.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFileManager.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueCoding.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueObserving.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyedArchiver.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSObject.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSRunLoop.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSThread.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURL.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURLConnection.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CAAnimation.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CALayer.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CIImageProvider.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIAccessibility.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UINibLoading.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIResponder.h + + + + UIApplication + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIApplication.h + + + + UIButton + UIControl + + IBFrameworkSource + UIKit.framework/Headers/UIButton.h + + + + UIControl + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIControl.h + + + + UILabel + UIView + + IBFrameworkSource + UIKit.framework/Headers/UILabel.h + + + + UIResponder + NSObject + + + + UISearchBar + UIView + + IBFrameworkSource + UIKit.framework/Headers/UISearchBar.h + + + + UISearchDisplayController + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UISearchDisplayController.h + + + + UISlider + UIControl + + IBFrameworkSource + UIKit.framework/Headers/UISlider.h + + + + UITextField + UIControl + + IBFrameworkSource + UIKit.framework/Headers/UITextField.h + + + + UIView + + + + UIView + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIView.h + + + + UIViewController + + IBFrameworkSource + MediaPlayer.framework/Headers/MPMoviePlayerViewController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UINavigationController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UIPopoverController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UISplitViewController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UITabBarController.h + + + + UIViewController + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIViewController.h + + + + UIWindow + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIWindow.h + + + 0 - iPhoneStreamingPlayer.xcodeproj + IBCocoaTouchFramework + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + + com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 + + + YES + ../iPhoneStreamingPlayer.xcodeproj 3 + 123 diff --git a/iPhone Resources/iPhoneStreamingPlayerViewController.xib b/iPhone Resources/iPhoneStreamingPlayerViewController.xib old mode 100644 new mode 100755 index e99073e..d11fbc9 --- a/iPhone Resources/iPhoneStreamingPlayerViewController.xib +++ b/iPhone Resources/iPhoneStreamingPlayerViewController.xib @@ -1,23 +1,34 @@ - + - 1024 + 768 10F569 - 1197 + 804 1038.29 - - IBUILabel - IBUISlider - IBUIButton - IBUIView - IBUITextField - IBProxyObject - - + 461.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 123 + + + YES + + + + YES com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - + + + YES + + YES + + + YES + + + + YES IBFilesOwner IBCocoaTouchFramework @@ -29,18 +40,18 @@ 274 - + + YES 292 - {{20, 49}, {300, 31}} + {{10, 5}, {253, 31}} - NO NO IBCocoaTouchFramework 0 - http://audio1.maxi80.com + http://thor.nickpack.com:9000 3 3 @@ -57,31 +68,11 @@ IBCocoaTouchFramework - - - 292 - {{20, 20}, {280, 21}} - - - NO - YES - NO - IBCocoaTouchFramework - Download URL: - - 1 - MCAwIDAAA - - - 1 - 10 - 292 - {{124, 88}, {72, 73}} + {{266, 5}, {40, 40}} - NO NO IBCocoaTouchFramework @@ -112,15 +103,17 @@ 292 - {{20, 169}, {280, 21}} + {{20, 53}, {280, 21}} - NO YES NO IBCocoaTouchFramework Time Played: - + + 1 + MCAwIDAAA + 1 10 @@ -130,7 +123,6 @@ 292 {{20, 376}, {280, 21}} - NO YES NO @@ -144,9 +136,8 @@ 292 - {{20, 405}, {280, 35}} + {{20, 405}, {280, 55}} - 3 MSAwAA @@ -157,9 +148,8 @@ 292 - {{18, 198}, {284, 23}} + {{18, 82}, {284, 23}} - NO IBCocoaTouchFramework NO @@ -172,11 +162,11 @@ 292 - {{83, 228}, {217, 31}} + {{83, 112}, {217, 31}} - NO YES + NO IBCocoaTouchFramework 0 @@ -195,11 +185,11 @@ 292 - {{83, 267}, {217, 31}} + {{83, 151}, {217, 31}} - NO YES + NO IBCocoaTouchFramework 0 @@ -218,9 +208,8 @@ 292 - {{20, 233}, {42, 21}} + {{20, 117}, {42, 21}} - NO YES 7 @@ -235,9 +224,8 @@ 292 - {{20, 270}, {42, 21}} + {{20, 154}, {42, 21}} - NO YES 7 @@ -249,10 +237,51 @@ 1 10 - - {{0, 20}, {320, 460}} + + + 292 + {{20, 195}, {49, 21}} + + NO + YES + 7 + NO + IBCocoaTouchFramework + Album + + + 1 + 10 + + + + 292 + {{83, 190}, {217, 31}} + + NO + YES + NO + + + + IBCocoaTouchFramework + 0 + + 3 + + 3 + MAA + + + YES + 17 + + IBCocoaTouchFramework + + + + {320, 460} - 1 MC44NTIwNDA4MyAwLjg1MjA0MDgzIDAuODUyMDQwODMAA @@ -261,17 +290,10 @@ IBCocoaTouchFramework - + - - - - view - - - - 7 - + + YES button @@ -354,12 +376,29 @@ 57 - + + + metadataAlbum + + + + 60 + + + + view + + + + 62 + + - + + YES 0 - + @@ -377,19 +416,21 @@ 6 - - + + YES + + - - - + - - + + + + @@ -397,16 +438,6 @@ - - 21 - - - - - 23 - - - 26 @@ -415,7 +446,9 @@ 35 - + + YES + @@ -448,61 +481,501 @@ - + + 58 + + + + + 61 + + + + + 23 + + + + + + + YES + + YES + -1.CustomClassName + -2.CustomClassName + 16.IBPluginDependency + 16.IBViewBoundsToFrameTransform + 23.IBPluginDependency + 23.IBViewBoundsToFrameTransform + 25.IBPluginDependency + 25.IBViewBoundsToFrameTransform + 26.IBPluginDependency + 26.IBViewBoundsToFrameTransform + 35.IBPluginDependency + 35.IBViewBoundsToFrameTransform + 46.IBPluginDependency + 46.IBViewBoundsToFrameTransform + 49.IBPluginDependency + 49.IBViewBoundsToFrameTransform + 50.IBPluginDependency + 50.IBViewBoundsToFrameTransform + 51.IBPluginDependency + 51.IBViewBoundsToFrameTransform + 52.IBPluginDependency + 52.IBViewBoundsToFrameTransform + 58.IBPluginDependency + 58.IBViewBoundsToFrameTransform + 6.IBEditorWindowLastContentRect + 6.IBPluginDependency + 61.IBPluginDependency + 61.IBViewBoundsToFrameTransform + + + YES + iPhoneStreamingPlayerViewController + UIResponder + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABBoAAAwpwAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABBQAAAwiAAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABBoAAAwt4AAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABByAAAw6QAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABByAAAw8OAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABBkAAAww4AAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABCpgAAwzQAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABCpgAAw1sAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABBoAAAwy8AAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABBoAAAw1QAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABCpgAAw4EAAA + + {{740, 290}, {320, 480}} + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABBoAAAw30AAA + + + + + YES + + + YES + - - iPhoneStreamingPlayerViewController - UIResponder - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - {{740, 290}, {320, 480}} - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - + + YES + + + YES + + - 57 + 70 - + + YES iPhoneStreamingPlayerViewController UIViewController - - id - id - - - UIButton - UITextField - UITextField - UITextField - UILabel - UISlider - UIView - + + YES + + YES + buttonPressed: + sliderMoved: + + + YES + id + UISlider + + + + YES + + YES + buttonPressed: + sliderMoved: + + + YES + + buttonPressed: + id + + + sliderMoved: + UISlider + + + + + YES + + YES + button + downloadSourceField + metadataAlbum + metadataArtist + metadataTitle + positionLabel + progressSlider + volumeSlider + + + YES + UIButton + UITextField + UITextField + UITextField + UITextField + UILabel + UISlider + UIView + + + + YES + + YES + button + downloadSourceField + metadataAlbum + metadataArtist + metadataTitle + positionLabel + progressSlider + volumeSlider + + + YES + + button + UIButton + + + downloadSourceField + UITextField + + + metadataAlbum + UITextField + + + metadataArtist + UITextField + + + metadataTitle + UITextField + + + positionLabel + UILabel + + + progressSlider + UISlider + + + volumeSlider + UIView + + + IBProjectSource - ./classes-xjh84/iPhoneStreamingPlayerViewController.h + Classes/iPhoneStreamingPlayerViewController.h + + + + + YES + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSError.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFileManager.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueCoding.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueObserving.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyedArchiver.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSObject.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSRunLoop.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSThread.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURL.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURLConnection.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CAAnimation.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CALayer.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CIImageProvider.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIAccessibility.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UINibLoading.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIResponder.h + + + + UIButton + UIControl + + IBFrameworkSource + UIKit.framework/Headers/UIButton.h + + + + UIControl + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIControl.h + + + + UILabel + UIView + + IBFrameworkSource + UIKit.framework/Headers/UILabel.h + + + + UIResponder + NSObject + + + + UISearchBar + UIView + + IBFrameworkSource + UIKit.framework/Headers/UISearchBar.h + + + + UISearchDisplayController + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UISearchDisplayController.h + + + + UISlider + UIControl + + IBFrameworkSource + UIKit.framework/Headers/UISlider.h + + + + UITextField + UIControl + + IBFrameworkSource + UIKit.framework/Headers/UITextField.h + + + + UIView + + + + UIView + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIView.h + + + + UIViewController + + IBFrameworkSource + MediaPlayer.framework/Headers/MPMoviePlayerViewController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UINavigationController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UIPopoverController.h - + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UISplitViewController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UITabBarController.h + + + + UIViewController + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIViewController.h + + + 0 IBCocoaTouchFramework + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + + com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 + + YES ../iPhoneStreamingPlayer.xcodeproj 3 - 106 + + playbutton.png + {64, 64} + + 123 From 88db266bb69df5bf21b3d192b5cfe855056696f0 Mon Sep 17 00:00:00 2001 From: Sebastien Stormacq Date: Thu, 28 Oct 2010 22:43:36 +0200 Subject: [PATCH 05/21] add name to Threads to ease debugging --- Classes/AudioStreamer.m | 1 + Classes/iPhoneStreamingPlayerAppDelegate.m | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/Classes/AudioStreamer.m b/Classes/AudioStreamer.m index f31530f..2359046 100644 --- a/Classes/AudioStreamer.m +++ b/Classes/AudioStreamer.m @@ -944,6 +944,7 @@ - (void)start initWithTarget:self selector:@selector(startInternal) object:nil]; + [internalThread setName:@"InternalThread"]; [internalThread start]; } } diff --git a/Classes/iPhoneStreamingPlayerAppDelegate.m b/Classes/iPhoneStreamingPlayerAppDelegate.m index 2c2213a..0e31363 100644 --- a/Classes/iPhoneStreamingPlayerAppDelegate.m +++ b/Classes/iPhoneStreamingPlayerAppDelegate.m @@ -39,6 +39,7 @@ - (void)applicationDidFinishLaunching:(UIApplication *)application { selector:@selector(presentAlertWithTitle:) name:ASPresentAlertWithTitleNotification object:nil]; + [[NSThread currentThread] setName:@"Main Thread"]; } @@ -50,12 +51,15 @@ - (void)dealloc { - (void)presentAlertWithTitle:(NSNotification *)notification { + NSString *title = [[notification userInfo] objectForKey:@"title"]; + NSString *message = [[notification userInfo] objectForKey:@"message"]; + + //NSLog(@"Current Thread = %@", [NSThread currentThread]); dispatch_queue_t main_queue = dispatch_get_main_queue(); dispatch_async(main_queue, ^{ - NSString *title = [[notification userInfo] objectForKey:@"title"]; - NSString *message = [[notification userInfo] objectForKey:@"message"]; + //NSLog(@"Current Thread (in main queue) = %@", [NSThread currentThread]); if (!uiIsVisible) { #ifdef TARGET_OS_IPHONE if(kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iPhoneOS_4_0) { @@ -77,11 +81,14 @@ - (void)presentAlertWithTitle:(NSNotification *)notification cancelButtonTitle:NSLocalizedString(@"OK", @"") otherButtonTitles: nil] autorelease]; + /* [alert performSelector:@selector(show) onThread:[NSThread mainThread] withObject:nil waitUntilDone:NO]; + */ + [alert show]; #else NSAlert *alert = [NSAlert @@ -90,11 +97,14 @@ - (void)presentAlertWithTitle:(NSNotification *)notification alternateButton:nil otherButton:nil informativeTextWithFormat:message]; + /* [alert performSelector:@selector(runModal) onThread:[NSThread mainThread] withObject:nil waitUntilDone:NO]; + */ + [alert runModal]; #endif } }); From 55319c9c257c3a4cf16769f011f16d14a8051710 Mon Sep 17 00:00:00 2001 From: Sebastien Stormacq Date: Thu, 28 Oct 2010 22:53:04 +0200 Subject: [PATCH 06/21] remove project artifacts --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index b8e4d86..0bf71c9 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,6 @@ build .DS_Store *.xcodeproj/*.mode* *.xcodeproj/*.pbxuser +*.xcodeproj/*.xcworkspace +*.xcodeproj/xcuserdata +*.xcodeproj/*.pbxproj From cbb8a471d835b9c4bf9f69c1ad7609ca8ae77b72 Mon Sep 17 00:00:00 2001 From: isalkind Date: Fri, 12 Nov 2010 10:35:53 -0800 Subject: [PATCH 07/21] Fix for playing non-VBR streams. Specifically to address playback of wav streams. Tested only on wav streams. --- Classes/AudioStreamer.h | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/Classes/AudioStreamer.h b/Classes/AudioStreamer.h index a75c3b3..0111373 100644 --- a/Classes/AudioStreamer.h +++ b/Classes/AudioStreamer.h @@ -12,11 +12,7 @@ // appreciated but not required. // -#ifdef TARGET_OS_IPHONE -#import -#else -#import -#endif TARGET_OS_IPHONE +#import #include #include @@ -155,6 +151,7 @@ extern NSString * const ASStatusChangedNotification; // time) double packetDuration; // sample rate times frames per packet double lastProgress; // last calculated progress point + BOOL vbr; // indicates VBR (or not) stream } @property AudioStreamerErrorCode errorCode; @@ -163,6 +160,7 @@ extern NSString * const ASStatusChangedNotification; @property (readonly) double duration; @property (readwrite) UInt32 bitRate; @property (readonly) NSDictionary *httpHeaders; +@property (readonly) BOOL vbr; - (id)initWithURL:(NSURL *)aURL; - (void)start; @@ -181,4 +179,3 @@ extern NSString * const ASStatusChangedNotification; - From 78c5e290165a92c0a5c7f5c4504de5a03beff43c Mon Sep 17 00:00:00 2001 From: isalkind Date: Fri, 12 Nov 2010 10:37:35 -0800 Subject: [PATCH 08/21] Fix for playing non-VBR streams. Specifically to address playback of wav streams. Tested only on wav streams. --- Classes/AudioStreamer.m | 47 +++++++++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 16 deletions(-) diff --git a/Classes/AudioStreamer.m b/Classes/AudioStreamer.m index 3985ec0..70368fa 100644 --- a/Classes/AudioStreamer.m +++ b/Classes/AudioStreamer.m @@ -214,6 +214,7 @@ @implementation AudioStreamer @synthesize state; @synthesize bitRate; @synthesize httpHeaders; +@synthesize vbr; // // initWithURL @@ -629,7 +630,7 @@ - (BOOL)openReadStream { CFHTTPMessageSetHeaderFieldValue(message, CFSTR("Range"), (CFStringRef)[NSString stringWithFormat:@"bytes=%ld-%ld", seekByteOffset, fileLength]); - discontinuous = YES; + discontinuous = vbr; } // @@ -1052,17 +1053,24 @@ - (double)progress // - (double)calculatedBitRate { - if (packetDuration && processedPacketsCount > BitRateEstimationMinPackets) + if (vbr) { - double averagePacketByteSize = processedPacketsSizeTotal / processedPacketsCount; - return 8.0 * averagePacketByteSize / packetDuration; - } + if (packetDuration && processedPacketsCount > BitRateEstimationMinPackets) + { + double averagePacketByteSize = processedPacketsSizeTotal / processedPacketsCount; + return 8.0 * averagePacketByteSize / packetDuration; + } - if (bitRate) + if (bitRate) + { + return (double)bitRate; + } + } + else { - return (double)bitRate; + bitRate = 8.0 * asbd.mSampleRate * asbd.mBytesPerPacket * asbd.mFramesPerPacket; + return bitRate; } - return 0; } @@ -1467,18 +1475,25 @@ - (void)createQueue } // get the packet size if it is available - UInt32 sizeOfUInt32 = sizeof(UInt32); - err = AudioFileStreamGetProperty(audioFileStream, kAudioFileStreamProperty_PacketSizeUpperBound, &sizeOfUInt32, &packetBufferSize); - if (err || packetBufferSize == 0) + if (vbr) { - err = AudioFileStreamGetProperty(audioFileStream, kAudioFileStreamProperty_MaximumPacketSize, &sizeOfUInt32, &packetBufferSize); + UInt32 sizeOfUInt32 = sizeof(UInt32); + err = AudioFileStreamGetProperty(audioFileStream, kAudioFileStreamProperty_PacketSizeUpperBound, &sizeOfUInt32, &packetBufferSize); if (err || packetBufferSize == 0) { - // No packet size available, just use the default - packetBufferSize = kAQDefaultBufSize; + err = AudioFileStreamGetProperty(audioFileStream, kAudioFileStreamProperty_MaximumPacketSize, &sizeOfUInt32, &packetBufferSize); + if (err || packetBufferSize == 0) + { + // No packet size available, just use the default + packetBufferSize = kAQDefaultBufSize; + } } } - + else + { + packetBufferSize = kAQDefaultBufSize; + } + // allocate audio queue buffers for (unsigned int i = 0; i < kNumAQBufs; ++i) { @@ -1676,6 +1691,7 @@ - (void)handleAudioPackets:(const void *)inInputData if (!audioQueue) { + vbr = (inPacketDescriptions != nil); [self createQueue]; } } @@ -1937,4 +1953,3 @@ - (void)handleInterruptionChangeToState:(AudioQueuePropertyID)inInterruptionStat @end - From 79c21b9a9ab8fc892640adffc5cc12430fa2848c Mon Sep 17 00:00:00 2001 From: sebsto Date: Fri, 12 Nov 2010 22:01:25 +0100 Subject: [PATCH 09/21] fix compilation issue --- Classes/iPhoneStreamingPlayerAppDelegate.m | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Classes/iPhoneStreamingPlayerAppDelegate.m b/Classes/iPhoneStreamingPlayerAppDelegate.m index 0e31363..6b03c93 100644 --- a/Classes/iPhoneStreamingPlayerAppDelegate.m +++ b/Classes/iPhoneStreamingPlayerAppDelegate.m @@ -14,6 +14,10 @@ #import +#ifndef kCFCoreFoundationVersionNumber_iPhoneOS_4_0 +#define kCFCoreFoundationVersionNumber_iPhoneOS_4_0 550.32 +#endif + #import "iPhoneStreamingPlayerAppDelegate.h" #import "iPhoneStreamingPlayerViewController.h" #import "AudioStreamer.h" From c1550442d2cbd3f3fdb80265c164641a7d27ec62 Mon Sep 17 00:00:00 2001 From: Flavio Suguimoto Date: Thu, 5 May 2011 05:15:13 +0800 Subject: [PATCH 10/21] Create an start buffer limit and a total buffer limit --- Classes/AudioStreamer.h | 4 +++- Classes/AudioStreamer.m | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Classes/AudioStreamer.h b/Classes/AudioStreamer.h index 0e24591..d080c6f 100644 --- a/Classes/AudioStreamer.h +++ b/Classes/AudioStreamer.h @@ -20,7 +20,9 @@ #define LOG_QUEUED_BUFFERS 0 -#define kNumAQBufs 16 // Number of audio queue buffers we allocate. +#define kNumStartsAQBufs 16 + +#define kNumAQBufs 1500 // Number of audio queue buffers we allocate. // Needs to be big enough to keep audio pipeline // busy (non-zero number of queued buffers) but // not so big that audio takes too long to begin diff --git a/Classes/AudioStreamer.m b/Classes/AudioStreamer.m index 5088652..e19f0e2 100644 --- a/Classes/AudioStreamer.m +++ b/Classes/AudioStreamer.m @@ -1828,7 +1828,7 @@ - (void)enqueueBuffer // AudioFileStream stays a small amount ahead of the AudioQueue to // avoid an audio glitch playing streaming files on iPhone SDKs < 3.0 // - if (state == AS_FLUSHING_EOF || buffersUsed == kNumAQBufs - 1) + if (state == AS_FLUSHING_EOF || buffersUsed == kNumStartsAQBufs - 1) { if (self.state == AS_BUFFERING) { From df570cd2e90c459c6736eed527d89193970ed01b Mon Sep 17 00:00:00 2001 From: "U-XPS-M1330\\Grant" Date: Mon, 6 Dec 2010 13:50:53 +0800 Subject: [PATCH 11/21] Possible fix for sending invalid HTTP byte range header [whyz] --- Classes/AudioStreamer.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Classes/AudioStreamer.m b/Classes/AudioStreamer.m index e19f0e2..a69d7c6 100644 --- a/Classes/AudioStreamer.m +++ b/Classes/AudioStreamer.m @@ -687,7 +687,7 @@ - (BOOL)openReadStream if (fileLength > 0 && seekByteOffset > 0) { CFHTTPMessageSetHeaderFieldValue(message, CFSTR("Range"), - (CFStringRef)[NSString stringWithFormat:@"bytes=%ld-%ld", seekByteOffset, fileLength]); + (CFStringRef)[NSString stringWithFormat:@"bytes=%ld-%ld", seekByteOffset, fileLength - 1]); discontinuous = vbr; } From d964d4afd1c2816449bba8fe8242f91a9762a83b Mon Sep 17 00:00:00 2001 From: Christopher Bradford Date: Fri, 7 Jan 2011 04:51:30 +0800 Subject: [PATCH 12/21] Added readonly access to the AudioStreamer's stop reason Fixed iOS 3 Compatability by checking for background task support --- Classes/AudioStreamer.h | 1 + Classes/AudioStreamer.m | 37 +++++++++++++++++++++---------------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/Classes/AudioStreamer.h b/Classes/AudioStreamer.h index d080c6f..eea5020 100644 --- a/Classes/AudioStreamer.h +++ b/Classes/AudioStreamer.h @@ -178,6 +178,7 @@ extern NSString * const ASUpdateMetadataNotification; @property AudioStreamerErrorCode errorCode; @property (readonly) AudioStreamerState state; +@property (readonly) AudioStreamerStopReason stopReason; @property (readonly) double progress; @property (readonly) double bufferFillPercentage; @property (readonly) double duration; diff --git a/Classes/AudioStreamer.m b/Classes/AudioStreamer.m index a69d7c6..6ec6172 100644 --- a/Classes/AudioStreamer.m +++ b/Classes/AudioStreamer.m @@ -226,6 +226,7 @@ @implementation AudioStreamer @synthesize errorCode; @synthesize state; +@synthesize stopReason; @synthesize bitRate; @synthesize httpHeaders; @synthesize numberOfChannels; @@ -1237,8 +1238,12 @@ - (void)pause else if (state == AS_PAUSED) { err = AudioQueueStart(audioQueue, NULL); -#if TARGET_OS_IPHONE - bgTaskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL]; +#if TARGET_OS_IPHONE + if ([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)]) { + if (bgTaskId != UIBackgroundTaskInvalid) { + bgTaskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL]; + } + } #endif if (err) { @@ -1834,7 +1839,9 @@ - (void)enqueueBuffer { err = AudioQueueStart(audioQueue, NULL); #if TARGET_OS_IPHONE - bgTaskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL]; + if ([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)]) { + bgTaskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL]; + } #endif if (err) { @@ -1848,8 +1855,10 @@ - (void)enqueueBuffer self.state = AS_WAITING_FOR_QUEUE_TO_START; err = AudioQueueStart(audioQueue, NULL); -#if TARGET_OS_IPHONE - bgTaskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL]; +#if TARGET_OS_IPHONE + if ([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)]) { + bgTaskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL]; + } #endif if (err) { @@ -2337,9 +2346,6 @@ - (void)handlePropertyChangeForQueue:(AudioQueueRef)inAQ propertyID:(AudioQueuePropertyID)inID { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; -#if TARGET_OS_IPHONE - UIBackgroundTaskIdentifier newTaskId = UIBackgroundTaskInvalid; -#endif @synchronized(self) { if (inID == kAudioQueueProperty_IsRunning) @@ -2364,21 +2370,20 @@ - (void)handlePropertyChangeForQueue:(AudioQueueRef)inAQ // By creating an NSRunLoop for the AudioQueue thread, it changes the // thread destruction order and seems to avoid this crash bug -- or // at least I haven't had it since (nasty hard to reproduce error!) - // -#if TARGET_OS_IPHONE - newTaskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL]; -#endif + // [NSRunLoop currentRunLoop]; self.state = AS_PLAYING; #if TARGET_OS_IPHONE - if (bgTaskId != UIBackgroundTaskInvalid) { - [[UIApplication sharedApplication] endBackgroundTask: bgTaskId]; + if ([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)]) { + if (bgTaskId != UIBackgroundTaskInvalid) { + [[UIApplication sharedApplication] endBackgroundTask: bgTaskId]; + } + + bgTaskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL]; } - - bgTaskId = newTaskId; #endif } else From 02d1c8336819287343047ed4252e44096d908de1 Mon Sep 17 00:00:00 2001 From: Kirby Turner Date: Sun, 30 Jan 2011 21:42:37 +0800 Subject: [PATCH 13/21] Added readme. --- README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..62df24f --- /dev/null +++ b/README.md @@ -0,0 +1,12 @@ +AudioStreamer +============= + +This is a fork of the [mattgallagher/AudioStreamer](https://github.com/mattgallagher/AudioStreamer) repo. + +History +------- + +January 30, 2011 + * Merged shoutcast branch from [jfricker/AudioStreamer](https://github.com/jfricker/AudioStreamer) adding support for retrieving shoutcast metadata and replacing the alert display with a notification message. + * Replaced SHOUTCAST_METADATA marco with retrieveShoutcastMetadata BOOL on the AudioStreamer class. + * Added this README. \ No newline at end of file From 191bfaf9e44ba6ab27069274c13d2ac0fc1fc2a4 Mon Sep 17 00:00:00 2001 From: Kirby Turner Date: Tue, 12 Apr 2011 22:30:36 +0800 Subject: [PATCH 14/21] Added a workspace containing the ios and mac projects. --- AudioStreamer.xcworkspace/contents.xcworkspacedata | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 AudioStreamer.xcworkspace/contents.xcworkspacedata diff --git a/AudioStreamer.xcworkspace/contents.xcworkspacedata b/AudioStreamer.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..b7ac451 --- /dev/null +++ b/AudioStreamer.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + From 0e7c4b5687de7a574cd6d6d9a618b3f175a12a3a Mon Sep 17 00:00:00 2001 From: Kirby Turner Date: Tue, 12 Apr 2011 22:32:32 +0800 Subject: [PATCH 15/21] Added Triple-J url. --- Classes/MacStreamingPlayerController.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Classes/MacStreamingPlayerController.m b/Classes/MacStreamingPlayerController.m index 2527d67..96c6e46 100644 --- a/Classes/MacStreamingPlayerController.m +++ b/Classes/MacStreamingPlayerController.m @@ -20,7 +20,7 @@ @implementation MacStreamingPlayerController - (void)awakeFromNib { - [downloadSourceField setStringValue:@"http://192.168.1.2/~matt/inside.m4a"]; + [downloadSourceField setStringValue:@"http://shoutmedia.abc.net.au:10326"]; } // From c126086a3aaa9b42af86c905cb5c215fe8f8425d Mon Sep 17 00:00:00 2001 From: Kirby Turner Date: Sun, 30 Jan 2011 21:43:13 +0800 Subject: [PATCH 16/21] Updated readme. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 62df24f..c76ecbf 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,7 @@ History ------- January 30, 2011 + * Merged shoutcast branch from [jfricker/AudioStreamer](https://github.com/jfricker/AudioStreamer) adding support for retrieving shoutcast metadata and replacing the alert display with a notification message. * Replaced SHOUTCAST_METADATA marco with retrieveShoutcastMetadata BOOL on the AudioStreamer class. * Added this README. \ No newline at end of file From a925eea6a7f79d39f648154361bdacf713c1187b Mon Sep 17 00:00:00 2001 From: Kirby Turner Date: Sun, 30 Jan 2011 21:44:22 +0800 Subject: [PATCH 17/21] Updated readme. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index c76ecbf..ef3f8bc 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ History January 30, 2011 + * Forked [mattgallagher/AudioStreamer](https://github.com/mattgallagher/AudioStreamer). * Merged shoutcast branch from [jfricker/AudioStreamer](https://github.com/jfricker/AudioStreamer) adding support for retrieving shoutcast metadata and replacing the alert display with a notification message. * Replaced SHOUTCAST_METADATA marco with retrieveShoutcastMetadata BOOL on the AudioStreamer class. * Added this README. \ No newline at end of file From edbd3c48ee78c2a6dcb32785fa9c4ea555d798cb Mon Sep 17 00:00:00 2001 From: Kirby Turner Date: Sun, 30 Jan 2011 21:59:00 +0800 Subject: [PATCH 18/21] Updated readme. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index ef3f8bc..0bff468 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ History January 30, 2011 * Forked [mattgallagher/AudioStreamer](https://github.com/mattgallagher/AudioStreamer). + * Replaced #ifdef TARGET_OS_IPHONE with #if TARGET_OS_IPHONE. This is Apple's recommend approach for [conditionalizing compilation and linking](http://developer.apple.com/library/ios/#documentation/Xcode/Conceptual/iphone_development/115-Configuring_Applications/configuring_applications.html#//apple_ref/doc/uid/TP40007959-CH19-SW3). Also, TargetConditionals.h header in Mac 10.6 SDK defines TARGET_OS_IPHONE as 0 so this change is needed if one wishes to compile against 10.6 or greater. * Merged shoutcast branch from [jfricker/AudioStreamer](https://github.com/jfricker/AudioStreamer) adding support for retrieving shoutcast metadata and replacing the alert display with a notification message. * Replaced SHOUTCAST_METADATA marco with retrieveShoutcastMetadata BOOL on the AudioStreamer class. * Added this README. \ No newline at end of file From d05cb85032af6cd26dba4197f82aa50c0d31ec34 Mon Sep 17 00:00:00 2001 From: Kirby Turner Date: Wed, 13 Apr 2011 00:21:08 +0800 Subject: [PATCH 19/21] Updated the readme. --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 0bff468..0c9c0f6 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,11 @@ This is a fork of the [mattgallagher/AudioStreamer](https://github.com/mattgalla History ------- +April 12, 2001 + * Updated AudioStream with the latest from [mattgallagher/AudioStreamer](https://github.com/mattgallagher/AudioStreamer). + * Added level meter code from [idevsoftware/AudioStreamer](https://github.com/idevsoftware/AudioStreamer) + * Added level meter display to the sample projects. + January 30, 2011 * Forked [mattgallagher/AudioStreamer](https://github.com/mattgallagher/AudioStreamer). From 5c3a871d4a535490d81a88448455f86a9f1ce006 Mon Sep 17 00:00:00 2001 From: Kirby Turner Date: Sun, 30 Jan 2011 22:00:04 +0800 Subject: [PATCH 20/21] Updated readme. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0c9c0f6..be46e77 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ April 12, 2001 January 30, 2011 * Forked [mattgallagher/AudioStreamer](https://github.com/mattgallagher/AudioStreamer). - * Replaced #ifdef TARGET_OS_IPHONE with #if TARGET_OS_IPHONE. This is Apple's recommend approach for [conditionalizing compilation and linking](http://developer.apple.com/library/ios/#documentation/Xcode/Conceptual/iphone_development/115-Configuring_Applications/configuring_applications.html#//apple_ref/doc/uid/TP40007959-CH19-SW3). Also, TargetConditionals.h header in Mac 10.6 SDK defines TARGET_OS_IPHONE as 0 so this change is needed if one wishes to compile against 10.6 or greater. + * Replaced #ifdef TARGET_OS_IPHONE with #if TARGET_OS_IPHONE. This is Apple's recommended approach for [conditionalizing compilation and linking](http://developer.apple.com/library/ios/#documentation/Xcode/Conceptual/iphone_development/115-Configuring_Applications/configuring_applications.html#//apple_ref/doc/uid/TP40007959-CH19-SW3). Also, TargetConditionals.h header in Mac 10.6 SDK defines TARGET_OS_IPHONE as 0 so this change is needed if one wishes to compile against 10.6 or greater. * Merged shoutcast branch from [jfricker/AudioStreamer](https://github.com/jfricker/AudioStreamer) adding support for retrieving shoutcast metadata and replacing the alert display with a notification message. * Replaced SHOUTCAST_METADATA marco with retrieveShoutcastMetadata BOOL on the AudioStreamer class. * Added this README. \ No newline at end of file From 46b45a3b1b7c01293dd3b24c28d0d4d76ec7b2b2 Mon Sep 17 00:00:00 2001 From: Kirby Turner Date: Wed, 13 Apr 2011 00:22:06 +0800 Subject: [PATCH 21/21] Fixed formatting in the readme. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index be46e77..c05087a 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,7 @@ History ------- April 12, 2001 + * Updated AudioStream with the latest from [mattgallagher/AudioStreamer](https://github.com/mattgallagher/AudioStreamer). * Added level meter code from [idevsoftware/AudioStreamer](https://github.com/idevsoftware/AudioStreamer) * Added level meter display to the sample projects.