音乐播放器是一种用于播放各种音乐文件的多媒体播放软件。它涵盖了各种音乐格式的播放工具,比如: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;
}