Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 使用AVAudioRecorder录制语音后的空文件_Objective C_Avaudiorecorder - Fatal编程技术网

Objective c 使用AVAudioRecorder录制语音后的空文件

Objective c 使用AVAudioRecorder录制语音后的空文件,objective-c,avaudiorecorder,Objective C,Avaudiorecorder,我尝试用AVAudioRecorder录制语音,录制后我有一个0字节的空文件,当尝试播放时,我收到此警告 2016-12-31 15:28:59.511 FlowerProject[11209:4781594] 15:28:59.511 WARNING: [0x38cb1000] 998: Failure to setup sound, err = -50 我尝试使用像m4a这样的任何格式,它也有0字节大小。谢谢你的帮助 编辑: 同时,我尝试录制音频并用动画更新我的UI - (void)c

我尝试用AVAudioRecorder录制语音,录制后我有一个0字节的空文件,当尝试播放时,我收到此警告

2016-12-31 15:28:59.511 FlowerProject[11209:4781594] 15:28:59.511
 WARNING:  [0x38cb1000] 998: Failure to setup sound, err = -50
我尝试使用像m4a这样的任何格式,它也有0字节大小。谢谢你的帮助

编辑:

同时,我尝试录制音频并用动画更新我的UI

- (void)commanClickOnPetal:(FlowerObject *)flowerObject andButton:(UIButton *)sender {

    if ([[NSUserDefaults standardUserDefaults] boolForKey:flowerObject.imageName] == NO || ![[NSUserDefaults standardUserDefaults] boolForKey:flowerObject.imageName]) {

        [self.flowerObject changeRecordedState:YES andKey:flowerObject.imageName];

        self.view.userInteractionEnabled = NO;
        [self playFirstSound];

        [self initRecorderWithName:[NSString stringWithFormat:@"%@sound", flowerObject.imageName]];

        dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 10 * NSEC_PER_SEC);
        dispatch_after(popTime, dispatch_get_main_queue(), ^(void){

            [self startRecording];
            [self.recordIdentifierLabel setHidden:NO];


            [UIView animateWithDuration:1.f
                              delay:0.f
                            options: UIViewAnimationOptionRepeat | UIViewAnimationCurveLinear | UIViewAnimationOptionAutoreverse
                         animations:^{
                             [self.recordIdentifierLabel setAlpha:0.0f];
                         } completion:nil];


            [UIView transitionWithView:sender duration:29.0f options:UIViewAnimationOptionTransitionCrossDissolve | UIViewAnimationOptionAllowAnimatedContent animations:^{

                [sender setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"%@BW",flowerObject.imageName]] forState:UIControlStateNormal];


            } completion:^(BOOL finished) {

                self.view.userInteractionEnabled = YES;
                [self.recordIdentifierLabel setHidden:YES];

            }];

        });

    } else {

        [self playSoundFromPetal:[NSString stringWithFormat:@"%@sound", flowerObject.imageName]];

    }
}
下面是我使用recorder init的方法:

- (void)initRecorderWithName:(NSString *)name {

    self.recordName = [NSString stringWithFormat:@"%@.wav",name];

    NSArray *pathComponents = [NSArray arrayWithObjects:
                               [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject],
                               self.recordName, nil];

    NSURL *outputFileURL = [NSURL fileURLWithPathComponents:pathComponents];

    self.currentSession = [AVAudioSession sharedInstance];
    [self.currentSession setCategory:AVAudioSessionCategoryRecord error:nil];

    NSMutableDictionary *recordingSettings= [[NSMutableDictionary alloc] init];

    [recordingSettings setValue:[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey:AVFormatIDKey];
    [recordingSettings setValue:[NSNumber numberWithFloat:44100.0] forKey:AVSampleRateKey];
    [recordingSettings setValue:[NSNumber numberWithInt: 2] forKey:AVNumberOfChannelsKey];
    [recordingSettings setValue:[NSNumber numberWithInt: 16] forKey:AVLinearPCMBitDepthKey];
    [recordingSettings setValue:[NSNumber numberWithBool: NO] forKey:AVLinearPCMIsBigEndianKey];
    [recordingSettings setValue:[NSNumber numberWithBool: NO] forKey:AVLinearPCMIsFloatKey];
    [recordingSettings setValue:[NSNumber numberWithInt: AVAudioQualityHigh] forKey:AVEncoderAudioQualityKey];

    recorder = [[AVAudioRecorder alloc] initWithURL:outputFileURL settings:recordingSettings error:NULL];
    recorder.delegate = self;
    recorder.meteringEnabled = YES;
    [recorder prepareToRecord];

}
录制后,我使用MailCore通过电子邮件发送声音,但文件为0字节。录制持续30秒,然后调用方法[自停止录制]

- (void) startRecording {

    if (!recorder.recording) {
        AVAudioSession *session = self.currentSession;
        [session setActive:YES error:nil];
        [recorder record];
        self.timer = [NSTimer scheduledTimerWithTimeInterval: 1.0 target:self selector:@selector(updateCountdown) userInfo:nil repeats: YES];
    } else {
        [recorder stop];
    }

}

- (void) stopRecording {

    [recorder stop];
    AVAudioSession *audioSession = [AVAudioSession sharedInstance];
    [audioSession setActive:NO error:nil];
    self.dictionaryWithRecords = (NSMutableDictionary *) @{@"URL": recorder.url,
                                                           @"Name": self.recordName};

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        if ([[DBEmailSender sharedManager] emailAddress] != nil) {

            [[DBEmailSender sharedManager] sendMailWithAddress:[[NSUserDefaults standardUserDefaults] objectForKey:@"email"] andCode:nil andFilePath:[self.dictionaryWithRecords objectForKey:@"Name"]];

        }
    });
}

- (void)updateCountdown {

    self.tick += 1;
    double seconds = fmod(self.tick, 60.0);

    if (seconds == 29) {
        self.tick = 0;
        seconds = 0;
        [self.timer invalidate];
        self.timer = nil;
        [self stopRecording];
    }

}
下面是我通过点击按钮播放的声音:

- (void)playSoundFromPetal:(NSString *)soundName {

    SystemSoundID mySSID;
    NSString *path = [NSTemporaryDirectory() stringByAppendingPathComponent:soundName];
    AudioServicesCreateSystemSoundID((__bridge CFURLRef)[NSURL fileURLWithPath: path], &mySSID);
    AudioServicesPlaySystemSound(mySSID);

}

这可能有很多原因 但就我而言,
另一个对象已使用AVAudioSession播放音频。

原因可能很多 但就我而言,
另一个对象已经在使用AVAudioSession播放音频。

那么你是如何从该对象获取音频会话的?@hyd00嗯,我实际上意识到另一个对象的会话不是真的需要,所以我只是将其删除。但是你也可以尝试:让sharedSession=AVAudioSession.sharedInstance()做{尝试sharedSession.setCategory(AVAudioSessionCategoryRecord)尝试sharedSession.setActive(true)}捕捉{}那么你是如何从那个对象抓取音频会话的呢?@hyd00,实际上,我意识到另一个对象的会话并不是真正必要的,所以我只是删除了它。但您也可以尝试:让sharedSession=AVAudioSession.sharedInstance()执行{try sharedSession.setCategory(AVAudioSessionCategoryRecord)尝试sharedSession.setActive(true)}捕获{}