我们把音频播放分成两部分:
一种播放时间短的
一种播放时间长的
短的常做于系统提示音 它需要导入的框架为AudioToolBox
使用:
步奏1、声明声音ID SystemSoundID 系统播放声音文件时,就是靠声音ID来区分是哪一个音效 ID 是无符号整形
步奏2、创建播放声音文件的服务 这个服务里有两个参数,第一个指的是声音文件的路劲 第二个指的是声音的ID 这个步奏只是告诉系统,你要准备播放的资源,并没有开始播放
步奏3、播放声音
下面用一个代码的例子来表演给大家看
首先得导入这个框架
#import <AudioToolbox/AudioToolbox.h>
SystemSoundID soundtID = 1; 声明ID
AudioServicesCreateSystemSoundID((__bridge CFURLRef _Nonnull)([[NSBundle mainBundle]URLForResource:@"胜利.aiff" withExtension:nil]), &sountID); 创建系统声音的服务 这里我是以胜利的这个声音文件为例
AudioServicesPlaySystemSound(sountID); 播放
播放的时候有两个情况:
1.没有震动AudioServicesPlaySystemSound(sountID);
2.有震动AudioServicesPlayAlertSound(sountID);
长的就是像我们的音乐播放器里面的那些资源
它使用的框架为AVFoundation
需要这种播放的需要注意下几点:
1、必须声明全局变量的音乐播放对象或者是声明为属性
2、在退出音乐播放页面时,需要把播放对象给置空同时把delegate给置空
使用:
步奏1、资源文件路劲
步奏2、初始化播放器
步奏3、设置播放器
步奏4、预播放
步奏5、播放
其实真使用时比较简单
我这的视图控制器叫 MusicPlayViewController
#import <AVFoundation/AVFoundation.h>
@interface MusicPlayViewController ()< AVAudioPlayerDelegate >
{
AVAudioPlayer *audioPlayer;
}
@end
@implementation MusicPlayViewController
- ( void )viewDidLoad {
[ super viewDidLoad ];
UIButton *playSound = [ UIButton buttonWithType : UIButtonTypeCustom ];
[playSound setTitle : @" 播放 " forState : UIControlStateNormal ];
[playSound setTitle : @" 暂停 " forState : UIControlStateSelected ];
playSound. tag = 10 ;
playSound. frame = CGRectMake ( 100 , 100 , 100 , 100 );
[playSound addTarget : self action : @selector (playSound:) forControlEvents : UIControlEventTouchUpInside ];
[playSound setBackgroundColor :[ UIColor redColor ]];
[ self . view addSubview :playSound];
UIButton *playSound1 = [ UIButton buttonWithType : UIButtonTypeCustom ];
[playSound1 setTitle : @" 停止 " forState : UIControlStateNormal ];
playSound1. frame = CGRectMake ( 50 , 210 , 100 , 100 );
playSound1. tag = 11 ;
[playSound1 addTarget : self action : @selector (playSound:) forControlEvents : UIControlEventTouchUpInside ];
[playSound1 setBackgroundColor :[ UIColor redColor ]];
}
[ audioPlayer stop ]; // 停止
UIButton *button = [ self . view viewWithTag : 10 ];
[ audioPlayer play ]; // 播放
} else {
[ audioPlayer pause ]; // 暂停
}
-( void )playMusicWithName:( NSString *)name Type:( UIButton *)sender{
// 获得文件的路劲并声明一个播放器对象 有错误会把错误消息给 error
NSError *error;
audioPlayer = [[ AVAudioPlayer alloc ] initWithContentsOfURL :[[ NSBundle mainBundle ] URLForResource :name withExtension : nil ] error :&error];
// 判断是否有错误
if (error) {
NSLog ( @"%@" ,error);
return ;
}
// 开始预播放
[ audioPlayer prepareToPlay ];
//audioPlayer.numberOfChannels 获得音乐的声道
// 设置速率 必须设置 enableRate 为 yes
audioPlayer . enableRate = YES ;
audioPlayer . rate = 2 ; //0.5 一半 1.0 正常 2.0 双倍
// 设置峰值 必须设置 meteringEnabled 为 yes
audioPlayer . meteringEnabled = YES ;
[ audioPlayer updateMeters ]; // 更新峰值
// 当前峰值 [audioPlayer peakPowerForChannel:2]; 平均峰值 [audioPlayer averagePowerForChannel:2];
// 设置播放次数 audioPlayer.numberOfLoops 0 一次 1 播放两次 负数是无限循环
audioPlayer . numberOfLoops = 0 ;
}
- ( void )audioPlayerDidFinishPlaying:( AVAudioPlayer *)player successfully:( BOOL )flag{
[ super viewWillDisappear :animated];
// 如果不置空 下次返回来时会没有声音 *
audioPlayer = nil ;
audioPlayer . delegate = nil ;
今天就给大家分享这么多,希望对大家有帮助,明天介绍下录音。谢谢!