录制音频和iOS中永久保存(Record audio and save permanently in

2019-07-20 11:31发布

我做了2个iPhone应用程序,可以录制音频,并将其保存到一个文件,并再次回放。

其中一人使用AVAudiorecorder和AVAudioplayer。 第二个是苹果的SpeakHere例如与音频序列。

在Simulater两种运行以及设备。

但是,当我重新启动或者应用程序的记录文件没有找到! 我试过在计算器中找到的所有可能的建议,但它仍然不工作!

这是我用它来保存文件:

NSArray *dirPaths; 
NSString *docsDir; 

dirPaths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES); 
docsDir = [dirPaths objectAtIndex:0]; 

NSString *soundFilePath = [docsDir stringByAppendingPathComponent:@"sound1.caf"]; 
NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath];

Answer 1:

好吧,我终于解决了这个问题。 问题是,我设置了AVAudioRecorder和我ViewController.m覆盖现有文件具有相同名称的viewLoad文件的路径。

  1. 记录并保存到文件中的音频和停止的应用程序后,我能找到在Finder中的文件。 (/用户/ XXXXX /库/应用程序支持/ iPhone模拟器/ 6.0 /应用/ 0F107E80-27E3-4F7C-AB07-9465B575EDAB /文档/ sound1.caf)
  2. 当我重新启动应用程序的记录(从viewLoad)设置代码将只覆盖打电话给我的旧文件:

    sound1.caf

  3. 有一个新的。 名称相同,但没有内容。

  4. 在回放只会起到一个空的新文件。 - >没有声音明显。


因此,这里是我做过什么:

我NSUserDefaults的使用保存记录的文件名的路径,在我的播放方法后进行检索。


清洗viewLoad在ViewController.m:

- (void)viewDidLoad
{

     AVAudioSession *audioSession = [AVAudioSession sharedInstance];

     [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];

     [audioSession setActive:YES error:nil];

     [recorder setDelegate:self];

     [super viewDidLoad];
}

编辑记录在ViewController.m:

- (IBAction) record
{

    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]];

    // 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];
}

编辑播放在ViewController.m:

-(IBAction)playBack
{

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];


}

并且加入了全新dateString方法ViewController.m:

- (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"];
}

现在,它可以加载它通过加载NSUserDefaults的最后记录的文件:

    //Load recording path from preferences
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];


temporaryRecFile = [prefs URLForKey:@"Test1"];



player = [[AVAudioPlayer alloc] initWithContentsOfURL:temporaryRecFile error:nil];

在(IBAction为)播放。 temporaryRecFile是我的ViewController类NSURL变量。

声明如下ViewController.h:

@interface SoundRecViewController : UIViewController <AVAudioSessionDelegate,AVAudioRecorderDelegate, AVAudioPlayerDelegate>
{
......
......
    NSURL *temporaryRecFile;

    AVAudioRecorder *recorder;
    AVAudioPlayer *player;

}
......
......
@end


文章来源: Record audio and save permanently in iOS