xcode:如何在使用AVFoundation录制音频后保存音频文件 [英] xcode: How to save audio file after recording audio using AVFoundation

查看:111
本文介绍了xcode:如何在使用AVFoundation录制音频后保存音频文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我浏览了与此主题相关的各种帖子,但答案并没有真正帮助。我使用这个教程来实现音频文件的录制和播放。似乎缺少的是如何保存记录永久。当我退出我的应用程序时,声音文件就在那里,但没有任何内容。我甚至不知道它是保存rocerd还是只是创建文件。
这是一个代码示例:

I browsed through all kinds of post related to this topic but the answers just do not really help. I used this tutorial to implement recording of audio files and playback. What seems to be missing is how to save the record permanently. When I exit my app the sound file is there but nothing is in it. I don't even know if it is saving the rocerd or just creating the file. Here is a code sample:

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的新手,我真的没有得到它,或者它只是不适合我。

I saw a possible solution to this problem here but since I'm new to iOS I do not really get it or it is just does not working for me.

请帮助并提供代码示例。我阅读了有关AVFoundation和其他课程的文档,但没有取得积极成果。

Please help and provide a code example. I read the documentation about AVFoundation and other classes but with no positive results.

SOS:)

UPDATE
这是我的录音方式:

UPDATE This is my recording method:

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

This is my 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];
    }

}

这是我的playBack方法:

This is my playBack method:

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

}

我在这里说清楚我做了什么。
我可能出错的任何建议?

I hopše this makes it clear what I do. Any suggestions where I might be wrong?

推荐答案

您需要停止录制才能将数据保存到永久存档:

You need to stop recording in order to save the data to the file permanently:

[recorder stop];

这篇关于xcode:如何在使用AVFoundation录制音频后保存音频文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆