IOS UI_音频AVAudioPlayer

41 篇文章 0 订阅
23 篇文章 0 订阅
#import "AdiuoViewController.h"
#import <AVFoundation/AVFoundation.h>

@interface AdiuoViewController ()<AVAudioPlayerDelegate>
{
    AVAudioPlayer * _adudioPlayer;
    UIButton * _playButton;
    UIButton * _nextButton;
    UIButton * _previousButton;
    NSInteger _currentMusic;
    NSArray * _musciArray;
    UISlider * _progressSlider;
    UILabel * _currentProgress;
    UILabel * _allTime;
}

@property (nonatomic, strong) UIImageView * imageView;

@end

@implementation AdiuoViewController
- (void)dealloc
{
    [_musciArray release];
    [_playButton release];
    [_nextButton release];
    [_previousButton release];
    [_allTime release];
    [_currentProgress release];
    [_progressSlider release];
    [_allTime release];
    [_adudioPlayer release];
    [super dealloc];
}

- (void)viewDidLoad {
    [super viewDidLoad];
    [self initData];
    [self initUserVC];
    
    [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(updateSliderValue) userInfo:nil repeats:YES];
}

- (void)initData
{
    UITabBarItem * item =[[UITabBarItem alloc] initWithTitle:@"音频" image:[UIImage imageNamed:@"erji"] tag:0];
    self.tabBarItem = item;
    
    //打印应用安装后Bundle包的位置
    NSLog(@"%@",[[NSBundle mainBundle] pathForAuxiliaryExecutable:@""]);
    
    
    _musciArray = [[NSArray alloc]initWithObjects:  @"牛奶咖啡 - 明天,你好.mp3",@"陈奕迅 - 一生中最爱 - live 版.mp3",@"beyond - 海阔天空.mp3", @"不才 - 化身孤岛的鲸.mp3", @"朴树 - 平凡之路.mp3", nil];
    _currentMusic = 0;
    
    _currentProgress = [[UILabel alloc] initWithFrame:CGRectMake(30,344 , 48, 20)];
    _currentProgress.text = @"0:00";
    _currentProgress.textColor = [UIColor whiteColor];
    _currentProgress.font = [UIFont systemFontOfSize:16];
    [self.view addSubview:_currentProgress];
    
    _allTime = [[UILabel alloc] initWithFrame:CGRectMake(294, 344, 48, 20)];
    _allTime.text = @"0:00";
    _allTime.textColor = [UIColor whiteColor];
    _allTime.font = [UIFont systemFontOfSize:16];
    [self.view addSubview:_allTime];
    
    [self initAudioPlayerWithMusicName:_musciArray[_currentMusic] autoPlay:NO]; //设置开始的时候不是自动播放

}

- (void)initUserVC
{
    //创建播放界面
    _playButton     = [[UIButton alloc] initWithFrame:CGRectMake(170, 245, 50, 50)];
    [_playButton setImage:[UIImage imageNamed:@"bofang"] forState:UIControlStateNormal];
    [_playButton setImage:[UIImage imageNamed:@"zanting"] forState:UIControlStateSelected];//设置选中状态的图片
    [_playButton addTarget:self action:@selector(pressedPlayerButton) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:_playButton];
    
    _nextButton     = [[UIButton alloc] initWithFrame:CGRectMake(CGRectGetMaxX(_playButton.frame)+30, CGRectGetMinY(_playButton.frame)+10, 30, 30)];
    [_nextButton setImage:[UIImage imageNamed:@"kuaijin"] forState:UIControlStateNormal];
    [_nextButton addTarget:self action:@selector(pressedNextButton) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:_nextButton];
    
    _previousButton = [[UIButton alloc] initWithFrame:CGRectMake(CGRectGetMinX(_playButton.frame)-60, CGRectGetMinY(_playButton.frame)+10, 30, 30)];
    [_previousButton setImage:[UIImage imageNamed:@"kuaitui"] forState:UIControlStateNormal];
    [_previousButton addTarget:self action:@selector(pressedPreviousButton) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:_previousButton];
    
    
    _progressSlider = [[UISlider alloc] initWithFrame:CGRectMake(CGRectGetMinX(_previousButton.frame)-30, CGRectGetMaxY(_playButton.frame)+50, 210, 20)];
    [_progressSlider addTarget:self action:@selector(progressOfMusicChange:) forControlEvents:UIControlEventValueChanged];
    //    [_progressSlider addTarget:self action:@selector(progressOfMusic:) forControlEvents:UIControlEventTouchUpInside];
    _progressSlider.minimumTrackTintColor = [UIColor blackColor];
    _progressSlider.maximumTrackTintColor = [UIColor colorWithRed:11/255.0 green:169/255.0 blue:251/255.0 alpha:1];
    [self.view addSubview:_progressSlider];
    
    UISlider * volumeSlider = [[UISlider alloc] initWithFrame:CGRectMake(285, CGRectGetMaxY(_nextButton.frame)-60, 150, 30)];
    volumeSlider.minimumTrackTintColor = [UIColor blackColor];
    volumeSlider.maximumTrackTintColor = [UIColor colorWithRed:11/255.0 green:169/255.0 blue:251/255.0 alpha:1];
    volumeSlider.transform = CGAffineTransformMakeRotation(- M_PI_2);
    volumeSlider.value = 0.8;
    [volumeSlider addTarget:self action:@selector(volumeChange:) forControlEvents:UIControlEventValueChanged];
    [self.view addSubview:volumeSlider];
    [volumeSlider release];
    
    UIImageView * volumePic = [[UIImageView alloc] initWithFrame:CGRectMake(350, CGRectGetMidY(volumeSlider.frame)+87, 20, 20)];
    volumePic.image = [UIImage imageNamed:@"yinliang"];
    [self.view addSubview:volumePic];
    [volumePic release];
}

- (void)volumeChange:(UISlider *)sender
{
    _adudioPlayer.volume = sender.value;
    NSLog(@"%f",sender.value);

}

- (void)progressOfMusicChange:(UISlider *)sender
{
    _adudioPlayer.currentTime = sender.value * _adudioPlayer.duration;
}

//- (void)progressOfMusic:(UISlider *)sender
//{
//
//    _adudioPlayer.currentTime = sender.value * _adudioPlayer.duration;
//}

- (void)updateSliderValue
{
    _progressSlider.value = _adudioPlayer.currentTime/_adudioPlayer.duration;
    NSString * currrentTime;
    int minute = ((int)_adudioPlayer.currentTime) / 60;
    int second = ((int)_adudioPlayer.currentTime) % 60;
    if (minute < 10) {
        if (second < 10) {
            currrentTime = [NSString stringWithFormat:@"0%d:0%d",minute,second];
        }else {
            currrentTime = [NSString stringWithFormat:@"0%d:%d",minute, second];
        }
    }
    else {
        if (second < 10) {
            currrentTime = [NSString stringWithFormat:@"%d:0%d",minute,second];
        }else {
            currrentTime = [NSString stringWithFormat:@"%d:%d",minute, second];
        }
        
    }
//    NSLog(@"%@", currrentTime);
    _currentProgress.text = currrentTime;
}



- (void)initAudioPlayerWithMusicName:(NSString *)musicName autoPlay:(BOOL)autoPlay
{
    if (_adudioPlayer) {
        
        [_adudioPlayer release]; //把上一首播放的歌释放掉
    }
    NSError * error = nil;
    [self picture];
    
    //初始化音乐播放器
    //获取本地音乐的URL
    NSURL * musicURL = [[NSBundle mainBundle]URLForAuxiliaryExecutable:musicName];
    _adudioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:musicURL error:&error];
    
    _adudioPlayer.delegate = self;
    if (error) {  //没找到音乐的地址时才去初始化error,error存在就说明初始化失败了
        NSLog(@"初始化失败:%@", error.localizedDescription);
    } else {  //error不存在说明音乐初始化成功了
        //音量
        _adudioPlayer.volume = 1; //0到1
        
        NSLog(@"音乐初始化成功!");
        NSLog(@"%@", _musciArray[_currentMusic]);
        NSLog(@"%f秒",_adudioPlayer.duration);
  
        //显示音乐播放的总时间
        NSString * allTime;
        int minute2 = ((int)_adudioPlayer.duration) / 60;
        int second2 = ((int)_adudioPlayer.duration) % 60;
        if (minute2 < 10) {
            if (second2 < 10) {
                allTime = [NSString stringWithFormat:@"0%d:0%d",minute2,second2];
            }else {
                allTime = [NSString stringWithFormat:@"0%d:%d",minute2,second2];
            }
        }
        else {
            if (second2 < 10) {
                allTime = [NSString stringWithFormat:@"%d:0%d",minute2,second2];
            }else {
                allTime = [NSString stringWithFormat:@"%d:%d",minute2,second2];
            }
        
        }
        NSLog(@"%@",allTime);
        _allTime.text = allTime;

        if (autoPlay) { //如果是自动播放,进入页面是就开始播放
            NSLog(@"音乐初始化成功,自动播放!");
            //音乐的时长(秒)
            NSLog(@"%f秒",_adudioPlayer.duration);
            [_adudioPlayer prepareToPlay];
            [_adudioPlayer play];
        
            //音乐循环次数
            _adudioPlayer.numberOfLoops = 0;
        
        }else {
            
        }
    }
}

//下一曲
- (void)pressedNextButton
{
    if (_currentMusic == _musciArray.count - 1) { //如果播放的歌曲
        _currentMusic = 0;
    } else {
         _currentMusic ++;
    }
    _playButton.selected = YES;
    [self initAudioPlayerWithMusicName:_musciArray[_currentMusic] autoPlay:YES];
}

//上一曲
- (void)pressedPreviousButton
{
    if (_currentMusic == 0) {
        _currentMusic = _musciArray.count - 1;
    }else {
        _currentMusic --;
    }

    [self initAudioPlayerWithMusicName:_musciArray[_currentMusic] autoPlay:YES];
}

// 播放/暂停按钮
- (void)pressedPlayerButton
{
    _playButton.selected = !_playButton.selected; //播放/暂停按钮的切换(默认开始时是NO)
    
    if (_playButton.selected) {  //如果是选中状态(YES)
        //准备播放
        [_adudioPlayer prepareToPlay];
        //开始播放
        [_adudioPlayer play];
    }else {                     //如果是选中状态(NO)
        //暂停播放
        [_adudioPlayer pause];
    }
}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    if (_adudioPlayer) {
        [_adudioPlayer pause];
        _playButton.selected = NO;
    }
}

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
    [self pressedNextButton];
}



- (void)picture
{
    //初始化专辑图片
    UIImageView * imageView = [[UIImageView alloc]initWithFrame:CGRectMake(113, 50, 160, 160)];
    imageView.layer.cornerRadius = 80;
    imageView.layer.masksToBounds = YES;
    [self.view addSubview:imageView];
    self.imageView = imageView;
    [imageView release];

    //获取音乐文件专辑图片
    AVURLAsset * urlAsset = [AVURLAsset URLAssetWithURL:[[NSBundle mainBundle]URLForAuxiliaryExecutable:_musciArray[_currentMusic]] options:nil];
   
    BOOL flag = NO;
    for (NSString * format in [urlAsset availableMetadataFormats]) {
        for (AVMetadataItem * metadataItem in [urlAsset metadataForFormat:format]) {
            if ([metadataItem.commonKey isEqualToString:@"artwork"]) {
                //                NSLog(@"%@",metadataItem.value);
                NSData * data = [metadataItem.value copyWithZone:nil];
                //得到图片数据
                
                //通过图片数据设置图片视图
                if (data) {
                    [self.imageView setImage:[UIImage imageWithData:data]];
                }
                flag = YES;
            }
        }
        
    }
    if (!flag) {
        [self.imageView setImage:[UIImage imageNamed:@"yyue.jpg"]];
    }
}
@end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值