【问题标题】:Why is AVAudioPlayer failing to initialise? With OSStatus error 1685348671?为什么 AVAudioPlayer 无法初始化?使用 OSStatus 错误 1685348671?
【发布时间】:2014-07-04 22:53:18
【问题描述】:

我正在视图控制器中录制音频(语音备忘录)。这行得通。只要用户不关闭视图控制器,我就可以播放录制的音频。

但是,如果用户关闭视图控制器,然后再次打开视图控制器,初始化 AVAudioPlayer 将失败,并出现 OSStatus 错误 1685348671。

我也尝试使用 NSData: NSData *data = [[NSData alloc] initWithContentsOfURL:_outputFileURL]; _player = [[AVAudioPlayer alloc] initWithData:data error:&error2]; 初始化播放器,但这也不起作用

我已经尝试过 .caf,按照每个教程进行操作,但不知何故我无法让它工作...... 这个错误似乎是指无效文件左右,但我不确定。但是,如果我在管理器中下载该应用程序并在我的 Mac 上打开它,我可以播放它,因此文件本身不会损坏。

这是我的记录方法:

- (IBAction)recordPauseTapped:(id)sender {
    // Stop the audio player before recording
    if (_player.playing) {
        [_player stop];
    }
    if (!_recorder.recording) {
        AVAudioSession *session = [AVAudioSession sharedInstance];
        [session setActive:YES error:nil];

        // Start recording
        [_recorder record];
        [recordPauseButton setTitle:@"Pause" forState:UIControlStateNormal];

    } else {

    // Pause recording
        [_recorder pause];
        [recordPauseButton setTitle:@"Aufnahme" forState:UIControlStateNormal];
    }

    [stopButton setEnabled:YES];
    [playButton setEnabled:NO];
 }

录制成功,文件存在于 Documents 目录中。

这是我的播放方法,如果文件是在之前立即录制的,并且用户无需离开视图控制器,则该方法有效:

- (IBAction)playTapped:(id)sender {
    if (!_recorder.recording){

        AVAudioSession *audioSession = [AVAudioSession sharedInstance];
        [audioSession setActive:YES error:nil];

        NSError *error;
        BOOL success = [audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:&error];
        if(!success)
        {
            NSLog(@"error doing outputaudioportoverride - %@", [error localizedDescription]);
        }

        NSError *error2;
        NSLog(@"_outputFileURL: %@", _outputFileURL);

        _player = [[AVAudioPlayer alloc] initWithContentsOfURL:_outputFileURL error:&error2];
        if (error2) {
            NSLog(@"error initialising player - %@", [error2 localizedDescription]);
         }
        [_player setDelegate:self];
        [_player play];
    }
}

这是我的 viewDidLoad:

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.navigationController.navigationBar.translucent = NO;

    [stopButton setEnabled:NO];

    // Set the audio file
    if ([_audioFileName isEqualToString:@""]) {
        NSString *guid = [[NSUUID new] UUIDString];
        _audioFileName = [NSString  stringWithFormat:@"audio-%@.m4a", guid];
        [playButton setEnabled:NO];
    } else {
        [playButton setEnabled:YES];
    }
    NSLog(@"_audioFileName: %@", _audioFileName);
    NSArray *pathComponents = [NSArray arrayWithObjects:
                           [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject],
                           _audioFileName,
                           nil];
    _outputFileURL = [NSURL fileURLWithPathComponents:pathComponents];

    // Setup audio session
    AVAudioSession *session = [AVAudioSession sharedInstance];
    [session setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
    [session setActive:YES error:nil];

    // Define the recorder setting
    NSMutableDictionary *recordSetting = [[NSMutableDictionary alloc] init];

    [recordSetting setValue:[NSNumber numberWithInt:kAudioFormatMPEG4AAC] forKey:AVFormatIDKey];
    [recordSetting setValue:[NSNumber numberWithFloat:44100.0] forKey:AVSampleRateKey];
    [recordSetting setValue:[NSNumber numberWithInt: 2] forKey:AVNumberOfChannelsKey];

    // Initiate and prepare the recorder
    _recorder = [[AVAudioRecorder alloc] initWithURL:_outputFileURL settings:recordSetting error:nil];
    _recorder.delegate = self;
    _recorder.meteringEnabled = YES;
    [_recorder prepareToRecord];
}

【问题讨论】:

    标签: ios avaudioplayer avaudiorecorder avaudiosession


    【解决方案1】:

    你的问题是你有 [_recorder prepareToRecord];进入 viewLoad,这意味着 每次加载视图控制器时它都会被覆盖。 如果您不希望这种行为,您应该删除此行并将其放在开头 例如,recordPauseTapped。 这应该可以解决您的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-19
      • 2010-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多