xcode: Как сохранить аудиофайл после записи аудио с помощью AVFoundation - PullRequest
1 голос
/ 22 февраля 2012

Я просмотрел все виды постов, связанных с этой темой, но ответы не очень помогают. Я использовал этот учебник для реализации записи аудиофайлов и воспроизведения. Кажется, что не хватает, как сохранить запись навсегда . Когда я выхожу из приложения, звуковой файл есть, но в нем ничего нет. Я даже не знаю, сохраняет ли он rocerd или просто создает файл. Вот пример кода:

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

tempRecFile = [NSURL fileURLWithPath:soundFilePath];

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

recorder = [[AVAudioRecorder alloc] initWithURL:tempRecFile settings:recSettings error:nil];
[recorder setDelegate:self];
[recorder prepareToRecord];
[recorder record];

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

Пожалуйста, помогите и приведите пример кода. Я прочитал документацию по AVFoundation и другим классам, но без положительных результатов.

SOS:)

UPDATE Это мой метод записи:

-(IBAction)recording{
    //***** METHOD for recording

    if(isNotRecording){
        isNotRecording = NO;
        [recButton setTitle:@"Stop"  forState:UIControlStateNormal];
        recStateLabel.text = @"Recording";

        [recorder setDelegate:self];
        [recorder prepareToRecord];
        [recorder record];

    }
    else{
        isNotRecording = YES;
        [recButton setTitle:@"Rec Begin" forState:UIControlStateNormal];
        playButton.hidden = NO;
        recStateLabel.text = @"Not recording";
        [recorder stop];
    }


}

Это мой viewDidLoad:

- (void)viewDidLoad
{
    //record sound test code - start
    isNotRecording = YES;
    //playButton.hidden = YES;
    recStateLabel.text = @"Not recording";

    AVAudioSession *audioSession = [AVAudioSession sharedInstance];

    [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];

    [audioSession setActive:YES error:nil];
    //record sound test code -  END

    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.

    // code for generating the sound file that is to be saved
    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;

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

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

    } else {
        [recorder prepareToRecord];
    }

}

Это мой метод воспроизведения:

-(IBAction)playback{
    //AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:temporaryRecFile error:nil];
    NSError *error;
    // setting the uri of the formed created file
    NSArray *dirPaths;
    NSString *docsDir;



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

NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath];

AVAudioPlayer *player = [[AVAudioPlayer alloc]initWithContentsOfURL:soundFileURL error:&error];



[player setNumberOfLoops:0];
[player prepareToPlay];
[player setVolume:1];
[player play];
NSLog(@"URL je: %@", soundFileURL);


//method 2
if (error)
    NSLog(@"Error: %@", 
          [error localizedDescription]);
else
{

    [player play];
    if(player.isPlaying==YES)
    {
        NSLog(@"It's playing");
    }
}

}

Надеюсь, это проясняет, что я делаю. Есть предложения, где я могу ошибаться?

Ответы [ 3 ]

3 голосов
/ 12 июля 2013

Проблема в том, что когда вы сообщаете XCode (в методе viewDidLoad) [рекордер prepareToRecord];он избавляется от ранее записанного аудиофайла.Исключите этот фрагмент кода в выражении «if», и ваш аудиофайл будет сохранен при выходе и повторном входе в приложение.

2 голосов
/ 22 февраля 2012

Вам необходимо остановить запись, чтобы сохранить данные в файл навсегда:

[recorder stop];
1 голос
/ 23 апреля 2013

FYI - метод «[Recorder prepareToRecord]» создает новый аудиофайл, перезаписывая любой предыдущий записанный файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...