2016-08-23 84 views
2

我想用NSDictionaryAVAudioFile保存到文檔目錄。誰能幫我?如何將AVAudioFile保存到文檔目錄?

AVAudioFile *audiofile=[[AVAudioFile alloc] initForWriting:destinationURL settings:settings error:&error]; 

保存此音頻文件到文件目錄...

+0

請此鏈接http://stackoverflow.com/questions/15059089/record-audio-and-save -permanently-in-ios –

+0

如何保存?這是問題,否則一切都很好,在哪裏添加這個音頻文件進行保存可以爲你提供代碼? –

+0

感謝兄弟,但在哪裏添加我的「audiofile」它不工作 –

回答

0

的路徑文件目錄:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:fileName]; 

保存音頻文件的文件目錄:

BOOL status = [NSDictionary writeToFile:filePath atomically:YES]; 
if(status){ 
NSLog(@"File write successfully"); 
} 
0
- (NSString *) dateString 
{ 
    // return a formatted string for a file name 
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    formatter.dateFormat = @"ddMMMYY_hhmmssa"; 
    return [[formatter stringFromDate:[NSDate date]]stringByAppendingString:@".aif"]; 
} 

它保存在下面在文件

23Aug16_044104PM.aif

爲什麼我們保存上面一樣的是,我們可以通過differenciate的time.So前一個下一個,我們現在不能混淆。

ViewController.h

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

@interface ViewController : UIViewController<AVAudioSessionDelegate,AVAudioRecorderDelegate, AVAudioPlayerDelegate> 
{ 

    NSURL *temporaryRecFile; 
    AVAudioRecorder *recorder; 
    AVAudioPlayer *player; 
} 

- (IBAction)actionRecordAudion:(id)sender; 

- (IBAction)actionPlayAudio:(id)sender; 

@end 

ViewController.m

#import "ViewController.h" 

@interface ViewController() 

@end 

@implementation ViewController 

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
// Do any additional setup after loading the view, typically from a nib. 
AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:nil]; 
[audioSession setActive:YES error:nil]; 
[recorder setDelegate:self]; 
} 

- (IBAction)actionRecordAudion:(id)sender 
{ 

    NSError *error; 

    // Recording settings 
    NSMutableDictionary *settings = [NSMutableDictionary dictionary]; 

    [settings setValue: [NSNumber numberWithInt:kAudioFormatLinearPCM] forKey:AVFormatIDKey]; 
    [settings setValue: [NSNumber numberWithFloat:8000.0] forKey:AVSampleRateKey]; 
    [settings setValue: [NSNumber numberWithInt: 1] forKey:AVNumberOfChannelsKey]; 
    [settings setValue: [NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey]; 
    [settings setValue: [NSNumber numberWithBool:NO] forKey:AVLinearPCMIsBigEndianKey]; 
    [settings setValue: [NSNumber numberWithBool:NO] forKey:AVLinearPCMIsFloatKey]; 
    [settings setValue: [NSNumber numberWithInt: AVAudioQualityMax] forKey:AVEncoderAudioQualityKey]; 

    NSArray *searchPaths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentPath_ = [searchPaths objectAtIndex: 0]; 
    NSString *pathToSave = [documentPath_ stringByAppendingPathComponent:[self dateString]]; 
    NSLog(@"the path is %@",pathToSave); 

    // File URL 
    NSURL *url = [NSURL fileURLWithPath:pathToSave];//FILEPATH]; 

    //Save recording path to preferences 
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
    [prefs setURL:url forKey:@"Test1"]; 
    [prefs synchronize]; 

    // Create recorder 
    recorder = [[AVAudioRecorder alloc] initWithURL:url settings:settings error:&error]; 
    [recorder prepareToRecord]; 
    [recorder record]; 
} 
- (IBAction)actionPlayAudio:(id)sender 
{ 
    AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 
    [audioSession setCategory:AVAudioSessionCategoryPlayback error:nil]; 
    [audioSession setActive:YES error:nil]; 
    //Load recording path from preferences 
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
    temporaryRecFile = [prefs URLForKey:@"Test1"]; 
    player = [[AVAudioPlayer alloc] initWithContentsOfURL:temporaryRecFile error:nil]; 
    player.delegate = self; 
    [player setNumberOfLoops:0]; 
    player.volume = 1; 
    [player prepareToPlay]; 
    [player play]; 
} 

Record and Save Audio Permanently

Record Audio File and save Locally

剛纔我試着下面的代碼與iPhone 4S和它完美的作品。

AudioViewController.h

#import <UIKit/UIKit.h> 
#import <AVFoundation/AVFoundation.h> 
@interface AudioViewController : UIViewController<AVAudioSessionDelegate,AVAudioRecorderDelegate,AVAudioPlayerDelegate> 

- (IBAction)actionRecordAudio:(id)sender; 
- (IBAction)actionPlayAudio:(id)sender; 
- (IBAction)actionStopAudio:(id)sender; 

@property (strong, nonatomic) AVAudioRecorder *audioRecorder; 
@property (strong, nonatomic) AVAudioPlayer *audioPlayer; 

@end 

AudioViewController.m

#import "AudioViewController.h" 

@interface AudioViewController() 

@end 

@implementation AudioViewController 

@synthesize audioPlayer,audioRecorder; 


- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 

    NSArray *dirPaths; 
    NSString *docsDir; 

    dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    docsDir = dirPaths[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; 

    AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:nil]; 

    audioRecorder = [[AVAudioRecorder alloc]initWithURL:soundFileURL settings:recordSettings error:&error]; 
    if (error) 
    { 
    NSLog(@"error: %@", [error localizedDescription]); 
    } 
    else { 
    [audioRecorder prepareToRecord]; 
    } 

} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 


- (IBAction)actionRecordAudio:(id)sender 
{ 
    if (!audioRecorder.recording) 
    { 
    [audioRecorder record]; 
    } 
} 

- (IBAction)actionPlayAudio:(id)sender 
{ 
    if (audioRecorder.recording) 
    { 
     NSError *error; 
     audioPlayer = [[AVAudioPlayer alloc] 
        initWithContentsOfURL:audioRecorder.url 
        error:&error]; 

     audioPlayer.delegate = self; 

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

- (IBAction)actionStopAudio:(id)sender 
{ 
    if (audioRecorder.recording) 
    { 
     [audioRecorder stop]; 
    } 
    else if (audioPlayer.playing) { 
    [audioPlayer stop]; 
    } 
} 

-(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag 
{ 

} 

-(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 

Here is source

+0

沒有它的不工作........對我來說我的AVAudioFile –

+0

可以爲我提供的解決方案,以保存「AVAudioFile」文件目錄您提供的代碼只是爲了播放錄製的音頻...我想改變錄製音頻的音高並將影響的音頻保存在文檔目錄中:( –

+0

現在查看我的答案。我更新了我的回答 – user3182143

相關問題