ビューが読み込まれるときに、次の方法で AVAudioRecorder インスタンスを設定します。
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
audioSession.delegate = self;
[audioSession setActive:YES error:nil];
[audioSession setCategory:AVAudioSessionCategoryRecord error:nil];
NSString *tempDir = NSTemporaryDirectory();
NSString *soundFilePath = [tempDir stringByAppendingPathComponent:@"sound.m4a"];
NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath];
NSLog(@"%@", soundFileURL);
NSDictionary *recordSettings = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt:kAudioFormatMPEG4AAC], AVFormatIDKey,
[NSNumber numberWithInt:AVAudioQualityMin], AVEncoderAudioQualityKey,
[NSNumber numberWithInt:16], AVEncoderBitRateKey,
[NSNumber numberWithInt: 1], AVNumberOfChannelsKey,
[NSNumber numberWithFloat:8000.0], AVSampleRateKey,
[NSNumber numberWithInt:8], AVLinearPCMBitDepthKey,
nil];
NSError *error = nil;
self.recorder = [[AVAudioRecorder alloc]
initWithURL:soundFileURL
settings:recordSettings
error:&error];
self.recorder.delegate = self;
if (error) {
NSLog(@"error: %@", [error localizedDescription]);
} else {
[self.recorder prepareToRecord];
}
次に、ユーザーが記録ボタンを押すと、次のようになります。
- (IBAction)record:(id)sender {
if (!self.isRecording) {
self.isRecording = YES;
[self.recorder record];
self.recordButton.enabled = NO;
}
}
次に、録音/再生を停止します。
- (IBAction)stop:(id)sender {
if (self.isRecording) {
[self.recorder stop];
self.recordButton.enabled = YES;
self.isRecording = NO;
}
if (self.isPlaying) {
[self.player stop];
self.isPlaying = NO;
self.playButton.enabled = YES;
}
}
その後、録音したものを再生できるようにしたいので、次のようにします。
- (IBAction)play:(id)sender {
NSError *error = nil;
self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:self.recorder.url error:&error];
self.player.delegate = self;
if (error) {
NSLog(@"%@", error.localizedDescription);
} else {
self.isPlaying = YES;
[self.player play];
self.playButton.enabled = NO;
}
}
しかし、ファイルを再生すると、OSStatus エラー -43 file not found が表示されます。
これはすべてデバイスで実行されており、シミュレーターでは、レコーダーまたはプレーヤーをインスタンス化しようとするとエラーが発生します。これはシミュレーターの問題であることがわかりました。
編集 1: OSStatus エラー -43 の部分を解決しました。エンコード形式と関係があります。形式をコメントアウトし、ファイルを適切に記録および再生しましたが、圧縮形式で記録する必要があります。これの設定わかる人いますか?
編集 2:圧縮された AAC オーディオで機能する設定を見つけることができました。2 分間のオーディオ ファイルは 256 KB になります。現在の状態を反映するようにコードを更新しました。あなたの助けに答えてくれたすべての人に感謝します。