iOS 音乐播放器的实现

申查猛
2023-12-01

iOS 音乐播放器的实现


一:现在好多公司都要开始植入音频播放,所以我也做研究下;音乐播放其实很简单,ios已经帮我们实现了这样的一个播放器 AVAudioPlayer。请看代码

//
//  WFMusicViewController.m
//  WFUtils
//
//  Created by PC on 4/8/16.
//  Copyright © 2016 ibmlib. All rights reserved.
//

#import "WFMusicViewController.h"
#import 
    
    
     
     

@interface WFMusicViewController ()
     
     
      
      

@property (strong, nonatomic) AVAudioPlayer *musicPlayer;

@property (strong, nonatomic) UIButton *btnPlay;

@property (strong, nonatomic) UIProgressView *progressView;
/*** 计时器 ***/
@property (strong, nonatomic) NSTimer *timer;

@end

@implementation WFMusicViewController

- (NSTimer *)timer
{
    if(_timer == nil)
    {
        _timer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(updateProgress) userInfo:nil repeats:YES];
    }
    return _timer;
}

#pragma mark - 初始化相关
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    self.title = @"雪千寻-轻音乐";
    
    // *** 1. 初始化播放器
    [self initMusicPlayer];
    // *** 2. 初始化播放、暂停按钮
    [self createPlayButton];
    // *** 3. 初始化进度条
    [self createProgress];
}

- (void)initMusicPlayer
{
    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"轻音乐 - 雪千寻.mp3" ofType:nil];
    self.musicPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:filePath] error:nil];
    self.musicPlayer.delegate = self;
}

- (void)createPlayButton
{
    self.btnPlay = [UIButton buttonWithType:UIButtonTypeCustom];
    self.btnPlay.frame = CGRectMake(50, self.view.frame.size.height - 100, 100, 50);
    self.btnPlay.center = CGPointMake(self.view.center.x, self.btnPlay.center.y);
    
    self.btnPlay.backgroundColor = [UIColor greenColor];
    [self.btnPlay setTitle:@"播放" forState:UIControlStateNormal];
    [self.btnPlay setTitle:@"暂停" forState:UIControlStateSelected];
    [self.btnPlay addTarget:self action:@selector(actionToPlay:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:self.btnPlay];
}

- (void)createProgress
{
    self.progressView = [[UIProgressView alloc] initWithFrame:CGRectMake(10, 200, self.view.frame.size.width - 20, 20)];
    
    [self.view addSubview:self.progressView];
    
    
}

#pragma mark -
- (void)updateProgress
{
    float progress = self.musicPlayer.currentTime / self.musicPlayer.duration;
    [self.progressView setProgress:progress animated:YES];
}

- (void)actionToPlay:(UIButton *)sender
{
    if(!sender.selected)
    {
        if(![self.musicPlayer isPlaying])
        {
            [self.musicPlayer play];
            self.timer.fireDate = [NSDate distantPast];
        }
    }
    else
    {
        [self.musicPlayer pause];
        self.timer.fireDate = [NSDate distantFuture];
    }
    sender.selected = !sender.selected;
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

#pragma mark - delegate AVAudioPlayer
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
    NSLog(@"音乐播放结束");
    self.btnPlay.selected = NO;
    [self.progressView setProgress:0];
    [self.timer invalidate];
    self.timer = nil;
}

/* if an error occurs while decoding it will be reported to the delegate. */
- (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError * __nullable)error
{
    
}

/* AVAudioPlayer INTERRUPTION NOTIFICATIONS ARE DEPRECATED - Use AVAudioSession instead. */

/* audioPlayerBeginInterruption: is called when the audio session has been interrupted while the player was playing. The player will have been paused. */
- (void)audioPlayerBeginInterruption:(AVAudioPlayer *)player NS_DEPRECATED_IOS(2_2, 8_0)
{
    
}

/* audioPlayerEndInterruption:withOptions: is called when the audio session interruption has ended and this player had been interrupted while playing. */
/* Currently the only flag is AVAudioSessionInterruptionFlags_ShouldResume. */
- (void)audioPlayerEndInterruption:(AVAudioPlayer *)player withOptions:(NSUInteger)flags NS_DEPRECATED_IOS(6_0, 8_0)
{
    
}

- (void)audioPlayerEndInterruption:(AVAudioPlayer *)player withFlags:(NSUInteger)flags NS_DEPRECATED_IOS(4_0, 6_0)
{
    
}

- (void)audioPlayerEndInterruption:(AVAudioPlayer *)player
{
    
}

@end

     
     
    
    

 类似资料: