码迷,mamicode.com
首页 > 其他好文 > 详细

音频处理

时间:2014-07-16 18:42:21      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   使用   文件   os   

1. 背景音乐

1> 添加AVFoundation.framework框架,import该框架头文件

2> 加载背景音乐路径

  NSString *path = [[NSBundle mainBundle] pathForResource:@”music.mp3” ofType:nil];

3> 路径转化成 url ,从本地读取文件,需要使用 fileURLWithPath

  NSURL *url = [NSURL fileURLWithPath:path];

4> 初始化AVAudioPlayer

  AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];

5> 设置循环播放次数 0 一次, 1两次, 负数 无线循环

  [player setNumberOfLoop:-1];

6> 准备播放 (预加载)

  [player prepareToPlay];

7> 播放背景音乐

  [player play];

8> 播放音量

  [player setVolume:0.5f];

2. 音效

1> 添加AudioToolbox.framework 框架,import 到文件

2> 加载路径

   NSString *path = [[NSBundle mainBundle] partForResource:@”sound.aiff” ofType:nil];

3> 转成url格式

  NSURL *url = [NSURL fileURLWithPath:path];

4> 定义SystemSoundID

  SystemSoundID soundID;

5> 创建音频id

  AudioServicesCreateSystemSoundID((_bridge CFURLRef)(url), &soundID);

6> 播放音效

  AudioServicesPlaySystemSound(soundID);

7> 播放音效的同时产生震动  

  AudioServicesPlayAlertSound(soundID);


 

例子 

//
//  MHViewController.m
//  01-石头剪刀布
//
//  Created by ZM on 14-7-15.
//  Copyright (c) 2014年 MH. All rights reserved.
//

// 0.png == 石头   1.png == 剪刀   2.png == 布

#import "MHViewController.h"
#import <AVFoundation/AVFoundation.h>
#import <AudioToolbox/AudioToolbox.h>

// 输赢信息的缩放比例
#define kScaleX     1.5
#define kScaleY     1.3

// 显示输赢信息动画持续的时间
#define kMessageDurationTime  0.5
// 出拳动画播放持续的时间
#define kDurationTime  1

// 音效
#define kWinSound       @"胜利.aiff"
#define kFailureSound   @"失败.aiff"
#define kDrawSound      @"和局.aiff"
#define kClickSound     @"点击按钮.aiff"
// 背景音乐
#define kBgMusic        @"bgMusic.mp3"

@interface MHViewController ()
{
    // 玩家和电脑的得分  NSInteger 没有赋值,默认初始值为 0
    NSInteger _plScore;
    NSInteger _cpScore;
    
    // 数组存放图片
    NSMutableArray *_imageArray;
    
    // 背景音乐
    AVAudioPlayer *_bgMusic;
}
@end

@implementation MHViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    _imageArray = [NSMutableArray array];
    // 1. 添加需要执行动画的图片
    for (int i = 0; i < 3; i++) {
        NSString *name = [NSString stringWithFormat:@"%d.png", i];
        UIImage *image = [UIImage imageNamed:name];
        [_imageArray addObject:image];
    }
    
    // 2. 设置播放数组
    [_playerImage setAnimationImages:_imageArray];
    [_computerImage setAnimationImages:_imageArray];
    
    // 3. 播放持续时间
    [_playerImage setAnimationDuration:kDurationTime];
    [_computerImage setAnimationDuration:kDurationTime];
    
    // 4. 开始播放
    [_playerImage startAnimating];
    [_computerImage startAnimating];
    
    // 5. 初始化背景音乐
    _bgMusic = [self initbgWithMusic:kBgMusic loopTime:-1];
    [_bgMusic play];
    
}

#pragma mark 音效处理
- (SystemSoundID)loadSoundWithSoundName:(NSString *)soundName
{
    // 1. 加载路径
    NSString *path = [[NSBundle mainBundle] pathForResource:soundName ofType:nil];
    // 2. 转成url
    NSURL *url = [NSURL fileURLWithPath:path];
    // 3. SystemSoundID
    SystemSoundID soundID;
    // 4. 创建音频id
    AudioServicesCreateSystemSoundID((__bridge CFURLRef)(url), &soundID);
 
    return soundID;
}

#pragma mark 初始化背景音乐
- (AVAudioPlayer *)initbgWithMusic:(NSString *)musicName loopTime:(NSInteger) loopTime
{
    // 1 加载背景音乐路径
    NSString *path = [[NSBundle mainBundle] pathForResource:musicName ofType:nil];
    // 2 转成 url. 从本地读取文件,需要使用 fileURLWithPath
    NSURL *url = [NSURL fileURLWithPath:path];
    // 3 初始化
    AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
    // 4 设置背景音乐循环的次数 0 循环一次, 1 循环两次 负数 无线循环
    [_bgMusic setNumberOfLoops:loopTime];
    // 5 播放之前都要执行一个操作 : 准备
    [_bgMusic prepareToPlay];
    // 6 设置音量大小
    [_bgMusic setVolume:0.5f];
    
    return player;
}

#pragma mark 从新开始游戏
- (IBAction)resumePlaye:(UIButton *)sender {
    
    // 播放点击音效
    AudioServicesPlaySystemSound([self loadSoundWithSoundName:kClickSound]);
    
    [UIView animateWithDuration:2 animations:^{
        // 显示操作按钮
        _actionView.hidden = NO;
    }];
    
    // 开始播放
    [_playerImage startAnimating];
    [_computerImage startAnimating];
    
    // 恢复 _resultMeaage 
    _resultMessage.transform = CGAffineTransformIdentity;
    
    // 隐藏显示信息的Label
    _resultMessage.hidden = YES;
}

#pragma mark 玩家出拳
// 0.png == 石头   1.png == 剪刀   2.png == 布
- (IBAction)playerAction:(UIButton *)sender {
    
    // 停止游戏
    [_playerImage stopAnimating];
    [_computerImage stopAnimating];
    
    // 玩家出拳
    NSString *name = [NSString stringWithFormat:@"%d.png", sender.tag];
    _playerImage.image = [UIImage imageNamed:name];
    
    // 电脑随机出拳
    int num = arc4random_uniform(_imageArray.count);
    NSString *compImage = [NSString stringWithFormat:@"%d.png", num];
    _computerImage.image = [UIImage imageNamed:compImage];
    
    // 调用判断玩家输赢的方法
    [self judgeWinWithPlayerTag:sender.tag computerNum:num];
    
    // 执行动画
    [self resultWithAnimation];
}

#pragma mark 判断输赢
- (void)judgeWinWithPlayerTag:(NSInteger)playerNum computerNum:(NSInteger)computerNum
{
    
    // 玩家赢 0.png == 石头   1.png == 剪刀   2.png == 布
    // 左边为电脑    1剪刀 - 0石头 = 1 ,   2布 - 1剪刀 = 1 ,     玩家 :2布 - 电脑 :0石头
    BOOL flage = (computerNum - playerNum == 1) || (playerNum - computerNum == 2);
    
    if (flage) {    // 玩家赢
        // 播放音效
        AudioServicesPlaySystemSound([self loadSoundWithSoundName:kWinSound]);

         _resultMessage.text = @"屌丝, 你赢了";
        // 玩家得分
        _playerScore.text = [NSString stringWithFormat:@"%d", ++_plScore];
        
    } else if (computerNum == playerNum) {  // 平局
        AudioServicesPlaySystemSound([self loadSoundWithSoundName:kDrawSound]);
        _resultMessage.text = @"土豪,我们再玩一局吧";
        
    } else {    // 电脑赢
        AudioServicesPlaySystemSound([self loadSoundWithSoundName:kFailureSound]);
        _resultMessage.text = @"屌丝, 你输了";
        _computerScore.text = [NSString stringWithFormat:@"%d", ++_cpScore];
    }
}

#pragma mark 显示 出拳解决 执行动画
- (void)resultWithAnimation
{
    // 设置 _resultMeaage 属性
    // 添加动画
    [UIView animateWithDuration:kMessageDurationTime animations:^{
        // 文字缩放
        _resultMessage.transform = CGAffineTransformScale(_resultMessage.transform, kScaleX, kScaleY);
        // 显示信息
        _resultMessage.hidden = NO;
    } completion:^(BOOL finished) {
        
        // 动画反转
        [UIView animateWithDuration:kMessageDurationTime animations:^{
            _resultMessage.transform = CGAffineTransformInvert(_resultMessage.transform);
        }];
        
        // 显示操作按钮
        _actionView.hidden = YES;
    }];
}

@end

 

音频处理,布布扣,bubuko.com

音频处理

标签:style   blog   color   使用   文件   os   

原文地址:http://www.cnblogs.com/mdCode/p/3845127.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!