8

推定15%のユーザーが記録機能が機能していないと報告しているライブアプリを持っています。これはテストデバイスでは発生していませんが、レポートには、prepareToRecordがNOを返していることが問題であることが示されています。AAC形式のサンプル設定を見つけるのに苦労しました。設定のいずれかがオフになっていますか?アプリにはiOS5が必要で、ARCを使用します。

 AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryRecord error:nil];

NSDictionary *recordSettings = [NSDictionary dictionaryWithObjectsAndKeys:
 [NSNumber numberWithInt:kAudioFormatMPEG4AAC], AVFormatIDKey,
 [NSNumber numberWithFloat:44100.0], AVSampleRateKey,
 [NSNumber numberWithInt:1], AVNumberOfChannelsKey,
 [NSNumber numberWithInt:AVAudioQualityHigh], AVSampleRateConverterAudioQualityKey,
 [NSNumber numberWithInt:128000], AVEncoderBitRateKey,
 [NSNumber numberWithInt:16], AVEncoderBitDepthHintKey,
 nil];

NSString *fileName = [NSString stringWithFormat:@"%@%@.caf", verseGUID, bRecordingReference ? @"_ref" : @""];
NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/%@", [[Utilities sharedInstance] documentsDirectoryPath], fileName]];
NSError *error = nil;
audioRecorder = [[AVAudioRecorder alloc] initWithURL:url settings:recordSettings error:&error];
if([audioRecorder prepareToRecord]){
    [audioRecorder record];
}else{
    int errorCode = CFSwapInt32HostToBig([error code]);
    NSLog(@"Error: %@ [%4.4s])", [error localizedDescription], (char*)&errorCode);
}  
4

3 に答える 3

3

録音設定とは関係のないことがたくさんあります。

あなたが答えたい本当の質問は次のようです:録音が起こらない原因は何ですか?

audioRecorderがnilであるか、audioRecorderprepareToPlayがNOを返す可能性があります。前者の方が可能性が高いようです。

initWithURLに渡されたURLの形式が正しくない可能性があります:-verseGUID、bRecordReference値で遊んでテストしましたか?お使いのデバイスに悪いverseGUIDがない場合もありますが、記録が行われないデバイスにはnil/空のverseGUIDがあります。これにより、ファイル名が単に「.caf」になる可能性があります。

独自のクラスメソッド[UtilitiessharedInstance]があるようです。これは、何らかの理由でデバイスでは機能しますが、障害のあるデバイスでは機能しませんか?もしそうなら、あなたはあなたがそうするつもりがなかったときにトップレベルのディレクトリに記録するように頼むことができました。

あなたが持っているテスターを「ベータ」リストに入れることができますか?TestFlightやHockeyKitなどにサインアップし、記録に失敗した1人以上のユーザーにサインアップしてもらい、診断機能を備えたアプリのベータ版をアップロードすると、画面に「エラー」が表示されます。それは最も明白かもしれません。testflightapp.comを使用するのは、それが最初に試したからです。管理が非常に簡単で、ベータテスターに​​とっては非常に簡単でした。

于 2012-07-16T22:29:31.157 に答える
2

MPEG4AAC形式を記録するために使用したこの設定を試してください...それはうまく機能しています。

NSString *tempDir = NSTemporaryDirectory();
NSString *soundFilePath = [tempDir stringByAppendingPathComponent:@"sound.m4a"];

NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath];
NSDictionary *recordSettings = [NSDictionary dictionaryWithObjectsAndKeys:
                                  [NSNumber numberWithInt:kAudioFormatMPEG4AAC], AVFormatIDKey,
                                  [NSNumber numberWithInt:AVAudioQualityMin], AVEncoderAudioQualityKey,
                                  [NSNumber numberWithInt: 1], AVNumberOfChannelsKey,
                                  [NSNumber numberWithFloat:8000.0], AVSampleRateKey,
                                  nil];
于 2012-07-17T00:13:21.567 に答える
1

これは少し接線方向ですが、オーディオ設定に関連していると思われる、多くのユーザーが録音できないという非常によく似た問題が発生したことをお詫びします。

しかし、私にとっては、彼らがマイクへのアクセス許可を拒否していたことがわかりました。これは、それが機能しprepareToRecordていて(そしてファイルを切り捨てて)、機能recordしていることを報告していたことを意味しましたが、実際には何も記録していませんでした。

そして、私はこれを記録したいときに使用しました:

AVAudioSession.sharedInstance().requestRecordPermission({(granted: Bool)-> Void in
    if granted {
        // can record - create AVAudioRecorder here

    } else {
        // can't record - update UI (or react accordingly)
    }
})

彼らが同様の問題に遭遇した場合、それが誰かの時間を節約することを願っています。

于 2016-05-05T21:13:03.873 に答える