Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 1st, 2012  |  syntax: None  |  size: 3.99 KB  |  hits: 50  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. Parameter required to convert .caf to .wav format?
  2. OSStatus AudioFileCreateWithURL( CFURLRef   inFileRef, AudioFileTypeID   inFileType,const AudioStreamBasicDescription *inFormat, UInt32   inFlags,AudioFileID  *outAudioFile);
  3.        
  4. - (id)initWithURL:(NSURL *)url settings:(NSDictionary *)settings error:(NSError **)outError
  5.        
  6. -(BOOL)exportAssetAsWaveFormat:(NSString*)filePath                  
  7. {
  8.     NSError *error = nil ;
  9.  
  10.     NSDictionary *audioSetting = [NSDictionary dictionaryWithObjectsAndKeys:
  11.                                   [ NSNumber numberWithFloat:44100.0], AVSampleRateKey,
  12.                                   [ NSNumber numberWithInt:2], AVNumberOfChannelsKey,
  13.                                   [ NSNumber numberWithInt:16], AVLinearPCMBitDepthKey,
  14.                                   [ NSNumber numberWithInt:kAudioFormatLinearPCM], AVFormatIDKey,
  15.                                   [ NSNumber numberWithBool:NO], AVLinearPCMIsFloatKey,
  16.                                   [ NSNumber numberWithBool:0], AVLinearPCMIsBigEndianKey,
  17.                                   [ NSNumber numberWithBool:NO], AVLinearPCMIsNonInterleaved,
  18.                                   [ NSData data], AVChannelLayoutKey, nil ];
  19.  
  20.     NSString *audioFilePath = filePath;
  21.     AVURLAsset * URLAsset = [[AVURLAsset alloc]  initWithURL:[NSURL fileURLWithPath:audioFilePath] options:nil];
  22.  
  23.     if (!URLAsset) return NO ;
  24.  
  25.     AVAssetReader *assetReader = [AVAssetReader assetReaderWithAsset:URLAsset error:&error];
  26.     if (error) return NO;
  27.  
  28.     NSArray *tracks = [URLAsset tracksWithMediaType:AVMediaTypeAudio];
  29.     if (![tracks count]) return NO;
  30.  
  31.     AVAssetReaderAudioMixOutput *audioMixOutput = [AVAssetReaderAudioMixOutput
  32.                                                    assetReaderAudioMixOutputWithAudioTracks:tracks
  33.                                                    audioSettings :audioSetting];
  34.  
  35.     if (![assetReader canAddOutput:audioMixOutput]) return NO ;
  36.  
  37.     [assetReader addOutput :audioMixOutput];
  38.  
  39.     if (![assetReader startReading]) return NO;
  40.  
  41.  
  42.  
  43.     NSString *title = @"WavConverted";
  44.     NSArray *docDirs = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
  45.     NSString *docDir = [docDirs objectAtIndex: 0];
  46.     NSString *outPath = [[docDir stringByAppendingPathComponent :title]
  47.                          stringByAppendingPathExtension:@"wav" ];
  48.  
  49.     NSURL *outURL = [NSURL fileURLWithPath:outPath];
  50.     AVAssetWriter *assetWriter = [AVAssetWriter assetWriterWithURL:outURL
  51.                                                           fileType:AVFileTypeWAVE
  52.                                                              error:&error];
  53.     if (error) return NO;
  54.  
  55.     AVAssetWriterInput *assetWriterInput = [ AVAssetWriterInput assetWriterInputWithMediaType :AVMediaTypeAudio
  56.                                                                                 outputSettings:audioSetting];
  57.     assetWriterInput. expectsMediaDataInRealTime = NO;
  58.  
  59.     if (![assetWriter canAddInput:assetWriterInput]) return NO ;
  60.  
  61.     [assetWriter addInput :assetWriterInput];
  62.  
  63.     if (![assetWriter startWriting]) return NO;
  64.  
  65.  
  66.     [assetReader retain];
  67.     [assetWriter retain];
  68.  
  69.     [assetWriter startSessionAtSourceTime:kCMTimeZero ];
  70.  
  71.     dispatch_queue_t queue = dispatch_queue_create( "assetWriterQueue", NULL );
  72.  
  73.     [assetWriterInput requestMediaDataWhenReadyOnQueue:queue usingBlock:^{
  74.  
  75.         NSLog(@"start");
  76.  
  77.         while (1)
  78.         {
  79.             if ([assetWriterInput isReadyForMoreMediaData]) {
  80.  
  81.                 CMSampleBufferRef sampleBuffer = [audioMixOutput copyNextSampleBuffer];
  82.  
  83.                 if (sampleBuffer) {
  84.                     [assetWriterInput appendSampleBuffer :sampleBuffer];
  85.                     CFRelease(sampleBuffer);
  86.                 } else {
  87.                     [assetWriterInput markAsFinished];
  88.                     break;
  89.                 }
  90.             }
  91.         }
  92.  
  93.         [assetWriter finishWriting];
  94.         [assetReader release ];
  95.         [assetWriter release ];
  96.  
  97.         NSLog(@"finish");
  98.     }];
  99.  
  100.     dispatch_release(queue);
  101. }