2013-09-14 10 views
2

Я работаю над записью звука. Я могу записать свой звук в caf (Core audio format). I после этого урока Recording Audio on an iPhone with AVAudioRecorder. Теперь я не хочу записывать звук в формате .aac напрямую, мне нужно преобразовать записанный .caf аудиофайл в .aac аудиофайл ... любая идея, как это сделать?iPhone - Как конвертировать .caf аудиофайлы в .aac?

#import <UIKit/UIKit.h> 
#import <AVFoundation/AVFoundation.h> 

@interface recordViewController : UIViewController 
    <AVAudioRecorderDelegate, AVAudioPlayerDelegate> 
{ 
    AVAudioRecorder *audioRecorder; 
    AVAudioPlayer *audioPlayer; 
    UIButton *playButton; 
    UIButton *recordButton; 
    UIButton *stopButton; 
} 
@property (nonatomic, retain) IBOutlet UIButton *playButton; 
@property (nonatomic, retain) IBOutlet UIButton *recordButton; 
@property (nonatomic, retain) IBOutlet UIButton *stopButton; 
-(IBAction) recordAudio; 
-(IBAction) playAudio; 
-(IBAction) stop; 
@end 

#import "recordViewController.h" 

@implementation recordViewController 
@synthesize playButton, stopButton, recordButton; 


- (void)viewDidLoad { 
[super viewDidLoad]; 
playButton.enabled = NO; 
stopButton.enabled = NO; 

NSArray *dirPaths; 
NSString *docsDir; 

dirPaths = NSSearchPathForDirectoriesInDomains(
    NSDocumentDirectory, NSUserDomainMask, YES); 
docsDir = [dirPaths objectAtIndex:0]; 
NSString *soundFilePath = [docsDir 
    stringByAppendingPathComponent:@"sound.caf"]; 

NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath]; 

NSDictionary *recordSettings = [NSDictionary 
     dictionaryWithObjectsAndKeys: 
     [NSNumber numberWithInt:AVAudioQualityMin], 
     AVEncoderAudioQualityKey, 
     [NSNumber numberWithInt:16], 
     AVEncoderBitRateKey, 
     [NSNumber numberWithInt: 2], 
     AVNumberOfChannelsKey, 
     [NSNumber numberWithFloat:44100.0], 
     AVSampleRateKey, 
     nil]; 

NSError *error = nil; 

audioRecorder = [[AVAudioRecorder alloc] 
       initWithURL:soundFileURL 
       settings:recordSettings 
       error:&error]; 

if (error) 
{ 
     NSLog(@"error: %@", [error localizedDescription]); 

} else { 
     [audioRecorder prepareToRecord]; 
} 
} 
-(void) recordAudio 
{ 
if (!audioRecorder.recording) 
{ 
     playButton.enabled = NO; 
     stopButton.enabled = YES; 
     [audioRecorder record]; 
} 
} 
-(void)stop 
{ 
stopButton.enabled = NO; 
playButton.enabled = YES; 
recordButton.enabled = YES; 

if (audioRecorder.recording) 
{ 
     [audioRecorder stop]; 
} else if (audioPlayer.playing) { 
     [audioPlayer stop]; 
} 
} 
-(void) playAudio 
{ 
if (!audioRecorder.recording) 
{ 
    stopButton.enabled = YES; 
    recordButton.enabled = NO; 

    if (audioPlayer) 
      [audioPlayer release]; 
    NSError *error; 

    audioPlayer = [[AVAudioPlayer alloc] 
    initWithContentsOfURL:audioRecorder.url          
    error:&error]; 

    audioPlayer.delegate = self; 

    if (error) 
      NSLog(@"Error: %@", 
      [error localizedDescription]); 
    else 
      [audioPlayer play]; 
} 
} 

-(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag 
{ 
    recordButton.enabled = YES; 
    stopButton.enabled = NO; 
} 

-(void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError *)error 
{ 
    NSLog(@"Decode Error occurred"); 
} 

-(void)audioRecorderDidFinishRecording:(AVAudioRecorder *)recorder successfully:(BOOL)flag 
{ 
} 

-(void)audioRecorderEncodeErrorDidOccur:(AVAudioRecorder *)recorder error:(NSError *)error 
{ 
    NSLog(@"Encode Error occurred"); 
} 
@end 
+1

делает эту помощь HTTPS : //developer.apple.com/library/ios/samplecode/iPhoneExtAudioFileConvertTest/Introduction/Intro.html и nother tute http://atastypixel.com/blog/easy-aac-compressed-audio-conversion-on-ios/ – DogCoffee

+0

@Smick я уже пробовал it.first один пример проекта iPhoneExtAudioFileConvertTest при преобразовании .caf в .aac-преобразование файла в порядке но он не играет ... второй TPAACAudioConverter проект все работает отлично, за исключением .aac преобразования – Ravindhiran

+0

Я с нетерпением жду, чтобы это решение было решено. Я попытался сделать частотное приложение, чтобы сменить музыку на 432 Гц .... не смог ее решить. Я постараюсь ответить на этот вопрос. – DogCoffee

ответ

3

Попробуйте этот шаг 1) Я скачал TPAACAudioConverter образец проекта

из https://github.com/michaeltyson/TPAACAudioConverter

шаг 2) AACConverterViewController.m

я поставил исходный файл и файл назначения формата

- (IBAction)convert:(id)sender { 
if (![TPAACAudioConverter AACConverterAvailable]) { 
    [[[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Converting audio", @"") 
           message:NSLocalizedString(@"Couldn't convert audio: Not supported on this device", @"") 
           delegate:nil 
         cancelButtonTitle:nil 
         otherButtonTitles:NSLocalizedString(@"OK", @""), nil] autorelease] show]; 
    return; 
} 

// Initialise audio session, and register an interruption listener, important for AAC conversion 
if (!checkResult(AudioSessionInitialize(NULL, NULL, interruptionListener, self), "initialise audio session")) { 
    [[[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Converting audio", @"") 
           message:NSLocalizedString(@"Couldn't initialise audio session!", @"") 
           delegate:nil 
         cancelButtonTitle:nil 
         otherButtonTitles:NSLocalizedString(@"OK", @""), nil] autorelease] show]; 
    return; 
} 


// Set up an audio session compatible with AAC conversion. Note that AAC conversion is incompatible with any session that provides mixing with other device audio. 
UInt32 audioCategory = kAudioSessionCategory_MediaPlayback; 
if (!checkResult(AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(audioCategory), &audioCategory), "setup session category")) { 
    [[[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Converting audio", @"") 
           message:NSLocalizedString(@"Couldn't setup audio category!", @"") 
           delegate:nil 
         cancelButtonTitle:nil 
         otherButtonTitles:NSLocalizedString(@"OK", @""), nil] autorelease] show]; 
    return; 
} 

NSArray *documentsFolders = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
audioConverter = [[[TPAACAudioConverter alloc] initWithDelegate:self 
                 source:[[NSBundle mainBundle] pathForResource:@"audio" ofType:@"aiff"] 
                destination:[[documentsFolders objectAtIndex:0] stringByAppendingPathComponent:@"audio.m4a"]] autorelease]; 
((UIButton*)sender).enabled = NO; 
[self.spinner startAnimating]; 
self.progressView.progress = 0.0; 
self.progressView.hidden = NO; 

[audioConverter start]; 
} 

игра преобразуется аудио

- (IBAction)playConverted:(id)sender { 
if (audioPlayer) { 
    [audioPlayer stop]; 
    [audioPlayer release]; 
    audioPlayer = nil; 
    [(UIButton*)sender setTitle:@"Play converted" forState:UIControlStateNormal]; 
} else { 
    NSArray *documentsFolders = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *path = [[documentsFolders objectAtIndex:0] stringByAppendingPathComponent:@"audio.aac"]; 
    audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL]; 
    [audioPlayer play]; 

    [(UIButton*)sender setTitle:@"Stop" forState:UIControlStateNormal]; 
} 
} 

шаг 3) TPAACAudioConverter.m

просто я изменил тип аудиофайла найти и заменить kAudioFileM4AType в kAudioFileAAC_ADTSType