如何将CoreData(NSManagedObject)设置为AvAudioRecorder的目标?

时间:2014-07-25 14:14:48

标签: ios core-data swift avaudiorecorder

我可以将NSManagedObject设置为AVAudioRecorder的目标(与NSURL相对)的方法是什么?我想保存微小的声音咬合作为选择“外部存储”选项的二进制核心数据类型......当然还要播放它们。我已经看到几个问题绕过这个主题,似乎有一些问题正在做这个,但我还没有找到任何硬核代码示例。到目前为止,我已经通过遵循本教程获得了基本文件类型录制的成功:http://www.supersuraccoon-cocos2d.com/2011/06/05/voice-record-demo/,我只想将其直接带到核心数据。

仅供参考 - 我确实认识到最佳做法是存储URL,然后检索,但我真的很想直接将二进制文件转换为CoreData(如果可能)。

谢谢!

P.S。如果你有一个Swift的样本,我将不胜感激!

1 个答案:

答案 0 :(得分:3)

您需要将音频保存为NSData。您需要将文件保存在磁盘中并转换为NSData。

我有一个配置My Audio的功能,还有一个可以进行转换的功能!!!

-(void)persistDataAudioPlaylet{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,      YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"myAudio.caf"];
    NSData *fileContents = [NSData dataWithContentsOfFile:filePath];
    self.playlet.sound = fileContents;
}


-(void)configureAudioRecord{
     NSArray *dirPaths;
     NSString *docsDir;

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

     NSString *soundFilePath = [docsDir
                           stringByAppendingPathComponent:@"myAudio.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];

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

    if (error)
    {
        NSLog(@"error: %@", [error localizedDescription]);
    } else {
        [self.audioRecorder prepareToRecord];
    }
}