• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Convert Kills App
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Convert Kills App


  • Subject: Convert Kills App
  • From: cocell <email@hidden>
  • Date: Tue, 08 Mar 2011 13:58:41 -0800 (PST)

When adding songs from iPod Library and converting it to .caf, the conversion kills the app. I used instruments and Still can't figure out why it's not working correctly. Any someone plz help? There are also a lot of memory leaks that I can't seem to fix.
 
#define EXPORT_NAME @"exported.caf" 
 
@implementation VTM_AViPodReaderViewController 
 
@synthesize songLabel; 
@synthesize artistLabel; 
@synthesize sizeLabel; 
@synthesize coverArtView; 
@synthesize conversionProgress; 
 

#pragma mark event handlers 
 
-(IBAction) convertTapped: (id) sender { 
   
// set up an AVAssetReader to read from the iPod Library 
    NSURL
*assetURL = [song valueForProperty:MPMediaItemPropertyAssetURL]; 
   
AVURLAsset *songAsset = [AVURLAsset URLAssetWithURL:assetURL options:nil]; 
 
   
NSError *assetError = nil; 
   
AVAssetReader *assetReader = [[AVAssetReader assetReaderWithAsset:songAsset 
                                                               error
:&assetError] 
                                  retain
]; 
   
if (assetError) { 
       
NSLog (@"error: %@", assetError); 
       
return; 
   
} 
 
   
AVAssetReaderOutput *assetReaderOutput = [[AVAssetReaderAudioMixOutput  
                                              assetReaderAudioMixOutputWithAudioTracks
:songAsset.tracks 
                                                                        audioSettings
: nil] 
                                              retain
]; 
   
if (! [assetReader canAddOutput: assetReaderOutput]) { 
       
NSLog (@"can't add reader output... die!"); 
       
return; 
   
} 
   
[assetReader addOutput: assetReaderOutput]; 
 
   
NSArray *dirs = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
   
NSString *documentsDirectoryPath = [dirs objectAtIndex:0]; 
   
NSString *exportPath = [[documentsDirectoryPath stringByAppendingPathComponent:EXPORT_NAME] retain]; 
   
if ([[NSFileManager defaultManager] fileExistsAtPath:exportPath]) { 
       
[[NSFileManager defaultManager] removeItemAtPath:exportPath error:nil]; 
   
} 
    NSURL
*exportURL = [NSURL fileURLWithPath:exportPath]; 
   
AVAssetWriter *assetWriter = [[AVAssetWriter assetWriterWithURL:exportURL 
                                                          fileType
:AVFileTypeCoreAudioFormat 
                                                             error
:&assetError] 
                                  retain
]; 
   
if (assetError) { 
       
NSLog (@"error: %@", assetError); 
       
return; 
   
} 
   
AudioChannelLayout channelLayout; 
    memset
(&channelLayout, 0, sizeof(AudioChannelLayout)); 
    channelLayout
.mChannelLayoutTag = kAudioChannelLayoutTag_Stereo; 
   
NSDictionary *outputSettings = [NSDictionary dictionaryWithObjectsAndKeys: 
                                   
[NSNumber numberWithInt:kAudioFormatLinearPCM], AVFormatIDKey,  
                                   
[NSNumber numberWithFloat:44100.0], AVSampleRateKey, 
                                   
[NSNumber numberWithInt:2], AVNumberOfChannelsKey, 
                                   
[NSData dataWithBytes:&channelLayout length:sizeof(AudioChannelLayout)], AVChannelLayoutKey, 
                                   
[NSNumber numberWithInt:16], AVLinearPCMBitDepthKey, 
                                   
[NSNumber numberWithBool:NO], AVLinearPCMIsNonInterleaved, 
                                   
[NSNumber numberWithBool:NO],AVLinearPCMIsFloatKey, 
                                   
[NSNumber numberWithBool:NO], AVLinearPCMIsBigEndianKey, 
                                    nil
]; 
   
AVAssetWriterInput *assetWriterInput = [[AVAssetWriterInput assetWriterInputWithMediaType:AVMediaTypeAudio 
                                                                              outputSettings
:outputSettings] 
                                            retain
]; 
   
if ([assetWriter canAddInput:assetWriterInput]) { 
       
[assetWriter addInput:assetWriterInput]; 
   
} else { 
       
NSLog (@"can't add asset writer input... die!"); 
       
return; 
   
} 
 
    assetWriterInput
.expectsMediaDataInRealTime = NO; 
 
   
[assetWriter startWriting]; 
   
[assetReader startReading]; 
 
   
AVAssetTrack *soundTrack = [songAsset.tracks objectAtIndex:0]; 
   
CMTime startTime = CMTimeMake (0, soundTrack.naturalTimeScale); 
   
[assetWriter startSessionAtSourceTime: startTime]; 
 
    __block
UInt64 convertedByteCount = 0; 
 
    dispatch_queue_t mediaInputQueue
= dispatch_queue_create("mediaInputQueue", NULL); 
   
[assetWriterInput requestMediaDataWhenReadyOnQueue:mediaInputQueue  
                                            usingBlock
: ^  
     
{ 
         
// NSLog (@"top of block"); 
         
while (assetWriterInput.readyForMoreMediaData) { 
           
CMSampleBufferRef nextBuffer = [assetReaderOutput copyNextSampleBuffer]; 
           
if (nextBuffer) { 
               
// append buffer 
               
[assetWriterInput appendSampleBuffer: nextBuffer]; 
               
//              NSLog (@"appended a buffer (%d bytes)",  
               
//                     CMSampleBufferGetTotalSampleSize (nextBuffer)); 
                convertedByteCount
+= CMSampleBufferGetTotalSampleSize (nextBuffer); 
               
// oops, no 
               
// sizeLabel.text = [NSString stringWithFormat: @"%ld bytes converted", convertedByteCount]; 
 
               
NSNumber *convertedByteCountNumber = [NSNumber numberWithLong:convertedByteCount]; 
               
[self performSelectorOnMainThread:@selector(updateSizeLabel:) 
                                       withObject
:convertedByteCountNumber 
                                    waitUntilDone
:NO]; 
           
} else { 
               
// done! 
               
[assetWriterInput markAsFinished]; 
               
[assetWriter finishWriting]; 
               
[assetReader cancelReading]; 
               
NSDictionary *outputFileAttributes = [[NSFileManager defaultManager] 
                                                      attributesOfItemAtPath
:exportPath 
                                                      error
:nil]; 
               
NSLog (@"done. file size is %ld", 
                       
[outputFileAttributes fileSize]); 
               
NSNumber *doneFileSize = [NSNumber numberWithLong:[outputFileAttributes fileSize]]; 
               
[self performSelectorOnMainThread:@selector(updateCompletedSizeLabel:) 
                                       withObject
:doneFileSize 
                                    waitUntilDone
:NO]; 
               
// release a lot of stuff 
               
[assetReader release]; 
               
[assetReaderOutput release]; 
               
[assetWriter release]; 
               
[assetWriterInput release]; 
               
[exportPath release]; 
               
break; 
           
} 
       
} 
 
     
}]; 
   
NSLog (@"bottom of convertTapped:"); 
} 
 
-(void) updateSizeLabel: (NSNumber*) convertedByteCountNumber { 
   
UInt64 convertedByteCount = [convertedByteCountNumber longValue]; 
    sizeLabel
.text = [NSString stringWithFormat: @"%ld bytes converted", convertedByteCount]; 
} 
 
-(void) updateCompletedSizeLabel: (NSNumber*) convertedByteCountNumber { 
   
UInt64 convertedByteCount = [convertedByteCountNumber longValue]; 
    sizeLabel
.text = [NSString stringWithFormat: @"done. file size is %ld", convertedByteCount]; 
} 
 
 
@end 
 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Coreaudio-api mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:

This email sent to email@hidden

  • Prev by Date: Re: Write array of float's to wav file?
  • Next by Date: AU Lab doesn't re-start audio
  • Previous by thread: Re: Write array of float's to wav file?
  • Next by thread: Re: Convert Kills App
  • Index(es):
    • Date
    • Thread