录音怎么保存 如何保存电话录音

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了录音怎么保存 如何保存电话录音相关的知识,希望对你有一定的参考价值。

参考技术A 1、演示:华为p40、android10.0.1。

2、方法:打开华为手机的【拨号界面】,在拨号键盘的最下方有竖排的三个小点,点选择【设置】。

3、往下拉,找到【通话自动录音】,系统默认处于关闭状态,打开这有两个选项,【自动录音对象】跟【指定号码】。

4、打开【自动录音对象】有两个选项,【所有人】以及【指定号码】,知道需要录音对象的号码,可以选择【指定号码】不知道对方的号码,可以选择【所有人】。

5、点击【指定号码】,系统自动跳回【手机通讯录】,可以将需要录音对象的电话号码进行勾选,点击上方最右边的保持按键保存即可。

AVAudioRecorder 不保存录音

【中文标题】AVAudioRecorder 不保存录音【英文标题】:AVAudioRecorder not saving recording 【发布时间】:2015-02-15 12:52:56 【问题描述】:

我正在制作一款 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 委托方法:

-(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");

当我想播放、录制或停止音频时,我做了以下链接到 UIButtons 的 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 方法?

【问题讨论】:

【参考方案1】:

要制作一个工作记录器并保存记录的文件,您需要:

    创建一个新的音频会话 确保麦克风已连接/工作 开始录制 停止录制 保存录制的音频文件 播放保存的语音文件

您的代码中缺少第 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 之类的东西。

【讨论】:

感谢您的回答。但我没有得到的是代码中的“documentsPath”函数调用是什么。我猜它是一个返回文件路径字符串的函数?但是我使用什么路径?另外,如何确保 AVAudioPlayer 播放我想要的确切音频路径?我最终可能会保存多个音频文件?感谢您的帮助:) 好的...我假设您已经找到了解决方案,但是是的,这就是您告诉代码保存文件的路径。没有它,您将拥有一个第一次播放的临时文件,但关闭应用程序,您将丢失它。 另外,请记住在您的帖子中添加详细信息,因为仅链接的答案不被视为实际答案;如果链接发生变化,您的帖子将不会有任何有效的响应。 没问题,很高兴它有帮助。 (:【参考方案2】:

好的,非常感谢@Neeku 回答我的问题,当然需要考虑到一些问题,但它仍然没有解决问题。我四处寻找,发现这个例子完美地工作,更重要的是,我以错误的方式接近这整个功能。我认为我的另一个问题是我的应用程序会删除 ViewDidload 方法中先前保存的音频文件。而且我认为我没有正确使用 AVAudioSession 实例。

无论如何我找到的例子非常有用并且完美地解决了我的问题,你可以在这里找到它:Record audio and save permanently in iOS

希望对遇到类似问题的人有所帮助。

【讨论】:

出了什么问题?是因为你错过了 Neeku 解释的第 5 步吗?

以上是关于录音怎么保存 如何保存电话录音的主要内容,如果未能解决你的问题,请参考以下文章

电话录音怎么保存起来

手机上的录音怎么保存

手机打电话时如何录音

如何把歌曲保存到录音里?

录音怎么保存到手机

怎么用电脑录音并保存?