- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在制作 iOS 游戏。我需要做的一件事是允许用户进行快速录音。这一切都有效,但录音只是暂时保存。因此,当用户关闭应用程序并重新打开它时,录音应该能够再次播放,但它没有,当我关闭应用程序时它被删除了。我不明白我做错了什么。下面是我的代码:
我在 ViewDidLoad
方法中设置了 AVAudioRecorder
,如下所示:
// Setup audio recorder to save file.
NSArray *pathComponents = [NSArray arrayWithObjects:[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject], @"MyAudioMemo.m4a", nil];
NSURL *outputFileURL = [NSURL fileURLWithPathComponents:pathComponents];
// Setup audio session.
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
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];
audio_recorder = [[AVAudioRecorder alloc] initWithURL:outputFileURL settings:recordSetting error:nil];
audio_recorder.delegate = self;
audio_recorder.meteringEnabled = YES;
[audio_recorder prepareToRecord];
我也有 AVAudio
委托(delegate)方法:
-(void)audio_playerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag {
NSLog(@"Did finish playing: %d", flag);
}
-(void)audio_playerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError *)error {
NSLog(@"Decode Error occurred");
}
-(void)audio_recorderDidFinishRecording:(AVAudioPlayer *)recorder successfully:(BOOL)flag {
NSLog(@"Did finish recording: %d", flag);
}
-(void)audio_recorderEncodeErrorDidOccur:(AVAudioPlayer *)recorder error:(NSError *)error {
NSLog(@"Encode Error occurred");
}
当我想播放、录制或停止音频时,我做了以下链接到 UIButton 的 IBAction:
-(IBAction)play_audio {
NSLog(@"Play");
if (!audio_recorder.recording){
audio_player = [[AVAudioPlayer alloc] initWithContentsOfURL:audio_recorder.url error:nil];
[audio_player setDelegate:self];
[audio_player play];
}
}
-(IBAction)record_voice {
NSLog(@"Record");
if (!audio_recorder.recording) {
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setActive:YES error:nil];
// Start recording.
[audio_recorder record];
}
else {
// Pause recording.
[audio_recorder pause];
}
}
-(IBAction)stop_audio {
NSLog(@"Stop");
[audio_recorder stop];
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setActive:NO error:nil];
}
如果您尝试我的代码,您会发现它可以工作,但它似乎只是暂时保存音频文件。
我做错了什么?我以为我已经使用了所有正确的 AVAudioRecorder
方法?
最佳答案
要制作工作录音机并保存录音文件,您需要:
您的代码中缺少第 5 步,因此刚刚录制的文件仍然可供您播放,但是一旦您关闭应用程序,因为它没有保存到应用程序目录中某处的实际文件中,您会丢失它。您应该添加一个方法来将录制的音频保存到一个文件中,以便您以后可以随时访问它:
-(void) saveAudioFileNamed:(NSString *)filename {
destinationString = [[self documentsPath] stringByAppendingPathComponent:filename];
NSLog(@"%@", destinationString);
NSURL *destinationURL = [NSURL fileURLWithPath: destinationString];
NSDictionary *settings = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithFloat: 44100.0], AVSampleRateKey,
[NSNumber numberWithInt: kAudioFormatAppleLossless], AVFormatIDKey,
[NSNumber numberWithInt: 1], AVNumberOfChannelsKey,
[NSNumber numberWithInt: AVAudioQualityMax], AVEncoderAudioQualityKey,
nil];
NSError *error;
audio_recorder = [[AVAudioRecorder alloc] initWithURL:destinationURL settings:settings error:&error];
audio_recorder.delegate = self;
}
与此问题无关,但一般要提及的是,在定义变量等时必须遵循 Apple(Objective-C)的命名约定。audio_recording
绝不遵循这些准则。您可以改用 audioRecording
之类的东西。
关于ios - AVAudioRecorder 不保存录音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28526236/
以下是我的录制按钮方法的内容。它创建了所需的文件,但无论我记录多长时间,创建的文件的长度始终为 4kb 和 0 秒,我无法弄清楚为什么它无效。对于averagePowerPerChannel,计量也返
在我的设备上使用 Xcode 5.0 并运行 iOS 7.0.2。 我正在使用这种代码: AVAudioRecorder *audioRecorder; ……… [audioRecorder reco
我希望有人能支持我...... 我一直在开发一个应用程序,该应用程序允许最终用户录制一个小音频文件以供以后播放,并且正在测试内存泄漏。当 AVAudioRecorder 的“停止”方法尝试关闭其正在录
我在进入后台后暂停 AVAudioRecorder 时遇到问题。基本上,它是这样的(_recorder 是我的 AVAudioRecorder 实例): 开始录制: [_recorder record
AVAudioRecorder的peakPowerForChannel和averagePowerForChannel方法有什么区别? 为什么返回的值为负数?不是应该在没有声音时为 0,在声音幅度增大时
我有一个可以录制音频的应用程序。我想知道如何才能增加增益。有没有办法标准化音频或以某种方式放大它? 谢谢,豪伊 最佳答案 看来我找到了解决方案。根据文档,AVAudioPlayer 音量可以在 0.0
简单地说,我正在尝试根据 iPhone 麦克风输入流中的分贝读数对某些内容进行口型同步,但我得到的值并不完全是我想要的值。我正在使用 AVAudioRecorder 的peakPowerForChan
这是我的方法: -(void) playOrRecord:(UIButton *)sender { if (playBool == YES) { NSError *error
无法获取 AVAudioRecorder 与 URL 配合使用的代码。有人能够在 iOS 和 Swift 3 上录制音频吗?下面的粗体文本是我收到以下错误的地方: "Cannot invoke ini
我正在制作 iOS 游戏。我需要做的一件事是允许用户进行快速录音。这一切都有效,但录音只是暂时保存。因此,当用户关闭应用程序并重新打开它时,录音应该能够再次播放,但它没有,当我关闭应用程序时它被删除了
我需要开发一个在检测到语音时播放mp3的App女巫。我可以使用“在这里说”示例吗?还是有人知道类似的例子? 我当时在看FFT和aurioTouch的示例,但对我来说似乎很难... 提前致谢 最佳答案
我正在制作一个应用程序,可以记录用户的声音并以高音调播放给他们。 (像花栗鼠)。适用于 iOS 5.0 或更高版本以及 Xcode 4.6 这个问题之前已经在这里问过 Record the sound
我正在使用 AVAudioRecorder 录制具有以下配置的不同长度的音频文件: - (AVAudioRecorder*)recorder { if(!_recorder) {
我正在使用 AVAudioRecorder 进行录制,当我录制时,我按主页按钮并来到前台并检查 AVAudioRecorder (isRecording) 的状态仍然是 是。但是当我播放音频时,它只播
我最近发现我的应用程序存在漏洞。我把所有的代码都注释掉了,一步一步去掉注释。这一切都导致了 AVAudioRecorder。 ViewController.h: #import @interface
我正在使用 AVAudioRecorder 录制音频,它录制流畅,我可以播放或获取保存文件我正在使用以下代码初始化 AVAudioRecorder NSDictionary *settings =
我现在正在为 AVAudioRecorder(和 Player)苦苦挣扎。我有一个应用程序,其中有三个简单的按钮可以录制/播放/停止通话,我正在使用 AVAudioRecorder 和 AVAudio
我正在使用 AVAudioRecorder 录制并保存到具有以下设置的 audio.m4a 文件: NSMutableDictionary *recordSetting = [[NSMutableDi
如何在被来电打断后继续录音?现在来电后我的录音停止了,但我希望能够继续录音 func audioRecorderDidFinishRecording(_ recorder: AVAudioRecord
我正在努力实现我认为会非常容易但事实并非如此的事情。 我正在玩“react-native-audio”库的源代码。但是你可以假设我是为了这个问题而在本地工作。 这是一个reference for th
我是一名优秀的程序员,十分优秀!