xcode添加音效

xcode添加背景音乐/音效

背景音乐:http://www.cnblogs.com/jiayongqiang/p/5476069.html

音效:

一.介绍:

  又称“短音频”,通常在程序中的播放时长为1~2秒.最长可以播放29.9s.  

      在最后会讲解如何将长音乐MP3格式,制作成xcode能识别的音效格式(wav/aac/m4a等等).

二、音效的播放

  1.获得音效文件的路径

    NSURL *url = [[NSBundle mainBundle] URLForResource:@"m_03.wav" withExtension:nil];

  2.加载音效文件,得到对应的音效ID

    SystemSoundID soundID = 0;

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

  3.播放音效

    AudioServicesPlaySystemSound(soundID);

    注意:音效文件只需要加载1次

  4.音效播放常见函数总结

    加载音效文件 AudioServicesCreateSystemSoundID(CFURLRef inFileURL, SystemSoundID *outSystemSoundID)

    释放音效资源 AudioServicesDisposeSystemSoundID(SystemSoundID inSystemSoundID)

    播放音效 AudioServicesPlaySystemSound(SystemSoundID inSystemSoundID)

    播放音效带点震动  AudioServicesPlayAlertSound(SystemSoundID inSystemSoundID)

#import "ViewController.h"

//1.导入框架
#import <AVFoundation/AVFoundation.h>

@interface ViewController ()

//2.定义一个SystemSoundID属性
@property (nonatomic, assign) SystemSoundID soundID;
@end

@implementation ViewController

//3.懒加载SoundID
- (SystemSoundID)soundID {
    if (_soundID == 0) {
        // 3.1.获取资源的URL,音频文件要放在黄色文件夹中
        NSURL *buyaoUrl = [[NSBundle mainBundle] URLForResource:@"buyao.wav" withExtension:nil];

        // 3.2给SoundID赋值
        AudioServicesCreateSystemSoundID((__bridge CFURLRef)(buyaoUrl), &_soundID);
    }
    return _soundID;
}

- (void)viewDidLoad {
    [super viewDidLoad];    
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    // 4.1.播放音效,没有振动效果
    AudioServicesPlaySystemSound(self.soundID);
    // 4.2.播放音效,在真机上带有振动效果
    // AudioServicesPlayAlertSound(soundID);
}

三.将播放音效的功能封装成一个工具类.

  1.创建一个类PQAudioTool继承自NSObject.

  PQAudioTool.h文件:

#import <Foundation/Foundation.h>

@interface PQAudioTool : NSObject
/**
 *  播放音效
 *  @param soundName 音效名称
 */
+ (void)audioToolPlaySoundWithName:(NSString *)soundName;
/**
 *  销毁音效
 *  @param soundName 音效名称
 */
+ (void)audioToolDisposeSoundWihtName:(NSString *)soundName;
@end

  PQAudioTool.m文件:

#import "PQAudioTool.h"
#import <AVFoundation/AVFoundation.h>

@interface PQAudioTool()
//在此处定义一个成员属性. 那么在类方法中无法取到.所以需要定义一个静态成员属性.
@end

@implementation PQAudioTool

//定义一个静态成员属性,会一直保存在内存中.属于类的. 不属于哪一个对象的.
//定义一个字典放赋值的
soundID.
static NSMutableDictionary *_soundIDs;

+ (void)initialize {//该方法只会调用一次(前提是该类没有子类).
    _soundIDs = [NSMutableDictionary dictionary];
}

+ (void)audioToolPlaySoundWithName:(NSString *)soundName {
    // 1.从字典中取出音效的ID
    SystemSoundID soundID = [_soundIDs[soundName] unsignedIntValue];
    
    // 2.如果现在取出来的值是0
    if (soundID == 0) {
        // 2.1.获取资源的URL
        NSURL *buyaoUrl = [[NSBundle mainBundle] URLForResource:soundName withExtension:nil];
        
        // 2.2.给SoundID赋值
        AudioServicesCreateSystemSoundID((__bridge CFURLRef)(buyaoUrl), &soundID);
        
        // 2.3.放入字典中
        _soundIDs[soundName] = @(soundID);
    }
    
    // 3.播放音效
    AudioServicesPlaySystemSound(soundID);
}

+ (void)audioToolDisposeSoundWihtName:(NSString *)soundName {
    
    // 1.从字典中取出音效的ID
    SystemSoundID soundID = [_soundIDs[soundName] unsignedIntValue];
    
    // 2.如果soundID有值,则销毁音效
    if (soundID) {
        AudioServicesDisposeSystemSoundID(soundID);
    }
}
@end

  在viewController里调用

- (IBAction)buyaoClick:(id)sender {
    [PQAudioTool audioToolPlaySoundWithName:@"1-02 何かがおかしい.m4a"];
    
}

- (IBAction)oneClick:(id)sender {
     [PQAudioTool audioToolPlaySoundWithName:@"lose.aac"];
}

- (IBAction)twoClick:(id)sender {
     [PQAudioTool audioToolPlaySoundWithName:@"m_04.wav"];
}

四:将长音乐制作成小于30s的音效  1.打开iTunes

     

  2.将需要制作的音乐导入iTunes

          

  3.在iTunes中选择音乐-->右击-->显示简介

    

  4.选择选项卡-->设置开始/结束时间-->好

    

  5.选中音乐-->文件-->转换-->AAC

      

  6.成功.直接将转换好的短音乐 拖拽出来即可使用.

      

原文地址:https://www.cnblogs.com/jiayongqiang/p/5625886.html