音乐播放器是一种用于播放各种音乐文件的多媒体播放软件。它涵盖了各种音乐格式的播放工具,比如:MP3播放器,WMA播放器,MP4播放器等。它们不仅界面美观,而且操作简单,带你进入一个完美的音乐空间。下面我们就来介绍一下音乐播放为的实现。  

    一、介绍音乐播放和音效播放的区别

     1、音效播放:用于播放时间短小的,常用于系统的提示声音,使用到的框架名AudioToolBox。

  2、音效播放使用到的类:

   (1)SystemSoundID

        创建系统声音对象

   (2)AudioServicesCreateSystemSoundID

        系统声音自带SoundID

   (3)AudioServicesPlaySystemSound

        系统SoundID分类默认ID

   (4)AudioServicesPlayAlertSound

        带振动的系统ID

  3、音效的使用步骤

    (1)导入系统框架

soundID来区分是哪一个音效,soundID是一个无符号整形。

soundID):包含两个方面1.声音文件路径 2.soundID

soundID)

代码:

#import "ViewController.h"
//    1、导入系统框架<AudioToolbox/AudioToolbox.h>
#import <AudioToolbox/AudioToolbox.h>
 

 
 
@interface  ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
    [super viewDidLoad];
 //创建一个按钮,点击按钮播放声音
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    button.frame = CGRectMake(50,100, 110, 50);
    button.backgroundColor = [UIColor greenColor];
    [self.view addSubview:button];
    [button addTarget:self action:@selector(playSound) forControlEvents:(UIControlEventTouchDown)];
}
#pragma mark-----音频播放---
- (void)playSound{
    //    2、声明一个soundID
     //    根据这个数字来区分是哪一个系统声音
    SystemSoundID soundID = 1;
     //    3、创建一个系统声音的服务
    AudioServicesCreateSystemSoundID((__bridge CFURLRef  _Nonnull)([[NSBundle mainBundle] URLForResource:@"正确.wav" withExtension:nil]), &soundID);
    //   4、播放系统的声音
    AudioServicesPlayAlertSound(soundID);
}
 
 

 
 
   音乐播放
 
 
   1、 
  用于播放比较长的音频、说明、音乐,使用 
  AVFoundation框架
 
 

 
 
   2、使用的类的介绍
 
 
AVAudioPlayer 
  
    (2)AVAudioPlayer初始化
        注意:必须声明全局变量、属性的音乐播放的对象才可以播放
        在退出播放页面的时候,一定要将播放对象置空,同时将delegate置空
 
    (1 
 )资源文件路径 
 
 
 
    (2)初始化播放器
    (3)设置播放器
    (4)预播放
    (5)播放
代码:

#import "ViewController.h"
//1、导入框架
#import <AVFoundation/AVFoundation.h>
@interface  ViewController ()<AVAudioPlayerDelegate>
{
    AVAudioPlayer *audioPlayer;
}
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    点击按钮播放音乐
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    button.frame = CGRectMake(100, 100, 100, 100);
    button.backgroundColor = [UIColor brownColor];
    [button setTitle:@"开始" forState:UIControlStateNormal];
    [button setTitle:@"暂停" forState:UIControlStateSelected];
    [button addTarget:self action:@selector(play:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:button];
    [self playMusicWithName:@"爱的供养.mp3"];
}
- (void)play:(UIButton *)sender{
//    [audioPlayer play];开始
//    [audioPlayer stop];停止
//    [audioPlayer pause];暂停
    sender.selected = !sender.selected;
    sender.selected != YES ? [audioPlayer stop]:[audioPlayer play];
     [audioPlayer playAtTime:5];
}

#pragma mark----音乐播放---
- (void)playMusicWithName:(NSString *)name{
//    初始化方式
//    - (nullable instancetype)initWithContentsOfURL:(NSURL *)url error:(NSError **)outError;
//    - (nullable instancetype)initWithData:(NSData *)data error:(NSError **)outError
//    - (nullable instancetype)initWithContentsOfURL:(NSURL *)url fileTypeHint:(NSString * __nullable)utiString error:(NSError **)outError NS_AVAILABLE(10_9, 7_0);
//    - (nullable instancetype)initWithData:(NSData *)data fileTypeHint:(NSString * __nullable)utiString error:(NSError **)outError NS_AVAILABLE(10_9, 7_0);

//    声明一个error错误对象,如果有错误,系统会赋值给error
    NSError *error;
//    1、创建音乐播放的对象
    audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[[NSBundle mainBundle] URLForResource:name withExtension:nil] error:&error];
//    如果有错误 打印
    if (error) {
        NSLog(@"%@",error);
    }
//    2、预播放
    [audioPlayer prepareToPlay];
//    3、播放
//    [audioPlayer play];
    
//    获得当前音乐的声道
    NSLog(@"%ld",audioPlayer.numberOfChannels);
//    duration:获得播放音频的时间
    
//    pan:设置声道-1.0左 0.0中间 1.0右
//    audioPlayer.pan = 1.0;
//    volume设置音量默认是1.0 范围0.0-1.0
    audioPlayer.volume = 1.0;
    
//    enableRate设置速率,必须设置为YES
    audioPlayer.enableRate = YES;
//    设置速率的范围 0.5是一半的速度
    audioPlayer.rate = 1.0;
//    获得峰值 必须设置meteringEnabled为YES
    audioPlayer.meteringEnabled = YES;
//  更新峰值
    [audioPlayer updateMeters];

//    获得当前峰值
    NSLog(@"当前%f",[audioPlayer peakPowerForChannel:2]);
//    获得平均峰值
    NSLog(@"平均%f",[audioPlayer averagePowerForChannel:2]);
    
//    设置播放次数
//    负数是无线循环的,0是一次 1是两次......
    audioPlayer.numberOfLoops =1;
    
    audioPlayer.delegate = self;
}
//播放完成的时候调用
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag{
    NSLog(@"播放完成");
}
//解码出现错误的时候调用
- (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError * __nullable)error{
}
//被打扰开始中断的时候调用
- (void)audioPlayerBeginInterruption:(AVAudioPlayer *)player{
}
//中断结束的时候调用
- (void)audioPlayerEndInterruption:(AVAudioPlayer *)player withOptions:(NSUInteger)flags{
 }
- (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
//    如果不置空再次进入的时候不会播放出声音
    audioPlayer = nil;
    audioPlayer.delegate = nil;
}