ios-AVAudioPlayer无法播放音频的问题

问题描述

AVAudioPlayer无法播放音频的问题

今天开始做录音的功能。点击recordbtn开始录音,再次点击,则停止录音,点击play键播放录音

然后就遇到问题了。
点击play键后,[self.audioPlayer prepareToPlay] 总是为no,即使把这个去掉,强制[self.audioPlayer play];也没有效果,请问是怎么回事?
另:用player播放其他音频是可以的,作为对比测试,播放了一首歌曲,没问题,就是播放自己录制的音频出问题,是不是录制的时候就出错了?
附代码:

 -(void)record{
    NSLog(@"recording");
    AVAudioSession *audioSession  = [AVAudioSession sharedInstance];

    [audioSession setCategory:AVAudioSessionCategoryRecord error:nil];
    [audioSession setActive:YES error:nil];
    NSString *tripReportAudioPath = [self audioRecordingPath];
    NSError *err = nil;
    NSURL *tripReportAudioURL = [NSURL URLWithString:tripReportAudioPath];
    AVAudioRecorder *tripReportRecorder = [[AVAudioRecorder alloc]initWithURL:tripReportAudioURL settings:[self audioRecordingSetting] error:&err];
    if (tripReportRecorder  != nil) {
        tripReportRecorder.delegate = self;
        if ([tripReportRecorder prepareToRecord] && self.recordBtn.selected == NO) {
            self.recordBtn.selected = YES;
            [tripReportRecorder record];
        }else if (self.recordBtn.selected == YES){
            self.recordBtn.selected = NO;
            [tripReportRecorder stop ];
        }
    }else{
        NSLog(@"record err:%@",[err description]);
    }
}

//生成录音文件地址
-(NSString *)audioRecordingPath{
    NSString *result = nil;
    NSArray *folders = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *docdir = [folders objectAtIndex:0];
    result = [docdir stringByAppendingPathComponent:@"tripReport.caf"];
    return result;
}
//录音器的相关设置
-(NSDictionary *)audioRecordingSetting{
    NSDictionary *result = nil;
    NSMutableDictionary *settings = [[NSMutableDictionary alloc]init ];
    //录制的音频格式
    [settings setValue:[NSNumber numberWithInteger:kAudioFormatMPEG4AAC] forKey:AVFormatIDKey];
    //采样率
    [settings setValue:[NSNumber numberWithFloat:44100.0f] forKey:AVSampleRateKey];
    //信道数
    [settings setValue:[NSNumber numberWithInteger:1] forKey:AVNumberOfChannelsKey];
    //录音的质量
    [settings setValue:[NSNumber numberWithInteger:AVAudioQualityHigh] forKey:AVEncoderAudioQualityKey];
    [settings setValue:[NSNumber numberWithInt:12800] forKey:AVEncoderBitRateKey];
    [settings setValue:[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey];

    result = [NSDictionary dictionaryWithDictionary:settings];
    return result;
}

-(void)play{
    AVAudioSession *audioSession  = [AVAudioSession sharedInstance];

    [audioSession setCategory:AVAudioSessionCategoryPlayback error:nil];
     [audioSession setActive:YES error:nil];

    NSError *playBackError = nil;
    NSError *readingError = nil;
    NSString *audioPath = [self audioRecordingPath];
    //        NSString *audioPath  = [[NSBundle mainBundle]pathForResource:@"Love" ofType:@"mp3"];
    NSLog(@"path:%@",audioPath);
    NSURL *url = [NSURL URLWithString:audioPath];
    NSData *fileData = [NSData dataWithContentsOfFile:audioPath options:NSDataReadingMapped error:&readingError];
    self.audioPlayer = [[AVAudioPlayer alloc]initWithData:fileData error:&playBackError];

    if (self.audioPlayer != nil) {
        NSLog(@"finishi3");
        self.audioPlayer.delegate = self;
        self.audioPlayer.volume = 50.0;

        if ([self.audioPlayer prepareToPlay]) {
            NSLog(@"finishi4");
            UInt32 doChangeDefaultRoute = 1;
            AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryDefaultToSpeaker, sizeof(doChangeDefaultRoute), &doChangeDefaultRoute);
            [self.audioPlayer play];
        }
    }else{
        NSLog(@"error:%@",[playBackError description]);
    }

}

解决方案

我也是菜鸟!所以只能给你个链接,你自己看看吧!我觉得写的挺好的,希望对你有帮助!http://www.cnblogs.com/kenshincui/p/4186022.html

时间: 2024-08-31 14:21:40

ios-AVAudioPlayer无法播放音频的问题的相关文章

详解iOS App中调用AVAudioPlayer播放音频文件的用法_IOS

要给工程中添加音频,首先要导入音频的框架 AVFoundation.framework 然后新建一个类继承于UIViewController, 我这里就叫FirstVC. 首先在 AppDelegate.m中初始化根视图 复制代码 代码如下: #import "AppDelegate.h" #import "FirstVC.h" @implementation AppDelegate - (void)dealloc {     [_window release];

详解iOS应用中播放本地视频以及选取本地音频的组件用法_IOS

MPMoviePlayerControlle播放本地视频 MPMoviePlayerControlle与AVAudioPlayer有点类似,前者播放视频,后者播放音频,不过也有很大不同,MPMoviePlayerController 可以直接通过远程URL初始化,而AVAudioPlayer则不可以.不过大体上用起来感觉差不多.废话少说进入体验. 格式支持:MOV.MP4.M4V.与3GP等格式,还支持多种音频格式. 首先你得引入 MediaPlayer.framework.然后在使用到MPMo

音乐播放器-ios开发:使用audioqueue播放音频文件

问题描述 ios开发:使用audioqueue播放音频文件 想问下使用Audioqueue播放本地音频文件时怎样拖动其播放进度? PS:不是用系统自带的播放控件(比如avplayer,avaudioplayer,musicplayercontroller等等),而是用audioqueue自己实现.

IOS开发之简单音频播放器

        今天第一次接触IOS开发的UI部分,之前学OC的时候一直在模拟的使用Target-Action回调模式,今天算是真正的用了一次.为了熟悉一下基本控件的使用方法,和UI部分的回调,下面开发了一个特别简易的音频播放器,来犒劳一下自己这一天的UI学习成果.在用到UI的控件时如果很好的理解之前博客在OC中的Target-Action回调模式,感觉控件的用法会很顺手.下面的简易播放器没有用到多高深的技术,只是一些基本控件和View的使用.         话不多说简单的介绍一下今天的音频播

iOS播放音频消息没有声音

问题描述 iOS播放音频 解决方案 demo试了吗,有声音吗?录制和播放都是用的demo里面的方法吗?解决方案二:试了,现在可以听见了,就是声音太小了

iOS中 UIMPMediaPickerController播放系统音乐

版权声明:本文为博主原创文章,未经博主允许不得转载. 布局如下: 引入框架: #import <AVFoundation/AVFoundation.h> #import <MediaPlayer/MediaPlayer.h> 遵循协议及引入头文件 [objc] view plain copy #import "ViewController.h"   #import <AVFoundation/AVFoundation.h>   #import <

Xcode模拟器中无法播放音频文件的原因分析

在本猫的Mac Mini上开发iOS app,发现当执行到播放音频的代码时,发生错误,log如下: 2015-10-05 07:22:17.122 LearnSpriteBuilder[10321:559370] 07:22:17.122 ERROR: 98: Error '!obj' trying to fetch default input device's sample rate 2015-10-05 07:22:17.122 LearnSpriteBuilder[10321:559370

iOS 视频流在线播放问题

问题描述 iOS 视频流在线播放问题 这种格式的视频里怎么在线播放http://kzy2015.wicp.net:4267/zh/api/webapi/DownScenicAreaFile/6?filetype=1&ScenicAreaId=4&fuid=19&fsbm=oAqU3dIetpiM6HeehcVC

与众不同windows phone (15) Media(媒体)之后台播放音频

介绍 与众不同 windows phone 7.5 (sdk 7.1) 之媒体 通过 AudioPlayerAgent 实现在后台播放音频 示例 演示如何通过后台代理的方式来实现音频在后台的播放 1.后台代理 MyAudioPlayerAgent/AudioPlayer.cs /* * 本例演示如何播放后台音频(以 AudioPlayerAgent 为例,另 AudioStreamingAgent 用于流式播放音频) * 建议使用 AudioPlaybackAgent 类型的模板创建此项目 *