音乐播放

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

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

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

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

   (1)SystemSoundID

        创建系统声音对象

   (2)AudioServicesCreateSystemSoundID

        系统声音自带SoundID

   (3)AudioServicesPlaySystemSound

        系统SoundID分类默认ID

   (4)AudioServicesPlayAlertSound

        带振动的系统ID

  3、音效的使用步骤

    (1)导入系统框架

          (2)声明soundID,依靠soundID来区分是哪一个音效,soundID是一个无符号整形。

          (3)创建播放对声音的服务(告诉系统,有一个可以使用的soundID):包含两个方面1.声音文件路径 2.soundID

           (4)播放声音(通过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、使用的类的介绍
    (1)AVAudioPlayer

    (2)AVAudioPlayer初始化

        注意:必须声明全局变量、属性的音乐播放的对象才可以播放

        在退出播放页面的时候,一定要将播放对象置空,同时将delegate置空

   3、使用步骤
    (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;

//    获得峰值 必须设置meteringEnabledYES

    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;

}



 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值