一、知识点
iOS中音频播放从形式上可以分为音频播放和音乐播放
AAC ALAC IMA4 liner MP3 caf
音效播放:是播放一些短音频,常作为点缀音频, 使用AudioToolbox.frameWork.
音乐播放:是在一些较长的音频,对于一些音频的播放器通常需要进行精确的控制, 使用AVFoundation.framework。
音效:
AudioToolbox.framework
限制:
音频控制时间不能超过30s
数据必须是PCM或者IMA4格式
音频文件必须打包成.caf .aif .wav中的一种
使用System Sound Service 播放音效的步奏:
调用AudioToolboxPLAY 通过系统声音ID 播放音效
1.注册
2.播放
音效播放(系统声音服务) 是不允许去控制音频
二、 相关代码
注意:
(1)如果想使用音乐播放功能, 就必须导入
#import <AVFoundation/AVFoundation.h>
//
// ViewController.m
// UI-NO-19音频播放
//
// Created by 蜂蜜哦 on 15/8/19.
// Copyright (c) 2015年 guanyi. All rights reserved.
//
#import "ViewController.h"
#import <AudioToolbox/AudioToolbox.h>
// 如果想使用 音乐播放功能 就必须导入AVFoundation
#import <AVFoundation/AVFoundation.h>
@interface ViewController ()<AVAudioPlayerDelegate>
{
AVAudioPlayer *player;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
NSString *path = [[NSBundle mainBundle]pathForResource:@"胜利" ofType:@"aiff"];
// 1.注册系统声音的ID
SystemSoundID ID = 1;
AudioServicesCreateSystemSoundID((__bridge CFURLRef)([NSURL fileURLWithPath:path]), &ID);
// 2.播放
AudioServicesPlaySystemSound(ID);
/*
播放声音文件
使用AVFoundation(audio video) 处理 音频视频的操作
1.音频播放
如果想使用 音乐播放功能 就必须导入AVFoundation
使用AVAudioPlayer 播放音频
设置音频音量(volume) 音频播放速率(rate) 音频播放位置 得到总时长 检测音频是否播放完毕 音乐播放的循环次数 ...
*/
[self creatPlayerWithAudioName:nil];
}
- (void)creatPlayerWithAudioName:(NSString *)name
{
NSString *path = [[NSBundle mainBundle]pathForResource:@"张学友 - 每次都想呼喊你的名字" ofType:@"mp3"];
if (player) {
player = nil;
}
NSError *error;
// 初始化音乐播放器
player = [[AVAudioPlayer alloc]initWithContentsOfURL:[NSURL fileURLWithPath:path] error:&error];
// 预播放(把音乐文件的数据 加载到内存)
[player prepareToPlay];
// 音量
player.volume = 2;
// 速率
// 如果想设置播放速率 必须得先开启允许位置
player.enableRate = YES;
player.rate = 1;
// 声道(-1.0 左声道 0.0 中间 1.0 右声道 )
// player.pan = -1.0;
// 循环次数 0:播放一次 负数:循环播放 正数:设置次数+1
player.numberOfLoops = 0;
player.delegate = self;
// 设置音乐播放器 当前播放的时间
player.currentTime = 100;
NSLog(@"音乐的总时长%f", player.duration);
NSLog(@"通道的数量%ld", player.numberOfChannels);
// player.isPlaying
// 暂停
[player pause];
// 停止
[player stop];
// 播放
[player play];
NSLog(@"设备当前时间%lf", player.deviceCurrentTime);
}
#pragma mark - 音频播放结束 代理方法
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
NSLog(@"播放结束");
}
@end