• OC-系统音效播放


     

    一.介绍

    AudioToolbox.framework是一套基于C语言的框架,使用它来播放音效其本质是将短音频注册到系统声音服务(System Sound Service).System Sound Service是一种简单、底层的声音播放服务,但是它本身也存在着一些限制:

    音频播放时间不能超过30s
    数据必须是PCM或者IMA4格式
    音频文件必须打包成.caf、.aif、.wav中的一种(注意这是官方文档的说法,实际测试发现一些.mp3也可以播放)

    音效处理对应的框架是AudioToolbox,只不过AVFoundation框架包含了此框架


    二.使用

    使用System Sound Service 播放音效的步骤如下:


     方法播放音效(后者带有震动效果)

    2.使用对应的API,开始播放音效:

      (1)根据音效文件,来生成SystemSoundID

        

      (2)根据SystemSoundID,播放音效

        调用AudioServicesCreateSystemSoundID(CFURLRef  inFileURL, SystemSoundID*  outSystemSoundID)函数获得系统声音ID

        如果需要监听播放完成操作,

        则使用AudioServicesAddSystemSoundCompletion(SystemSoundID inSystemSoundID, CFRunLoopRef  inRunLoop, CFStringRef  inRunLoopMode

        或者使用 AudioServicesSystemSoundCompletionProc  inCompletionRoutine, void*  inClientData)方法注册回调函数。

        如果不需要监听播放完成的操作,

        则调用AudioServicesPlaySystemSound(SystemSoundID inSystemSoundID) 

        或者AudioServicesPlayAlertSound(SystemSoundID inSystemSoundID)

      (3)根据SoundID释放内存

        AudioServicesDisposeSystemSoundID(SystemSoundID inSystemSoundID),(如果是不需要监听播放完成的方法,则不需要这句代码)

       

    代码如下:

    //获取路径
        NSURL *url = [[NSBundle mainBundle] URLForResource:@"2018-11-27 10_36_51 1.wav" withExtension:nil];
        
        //根据音效文件创建systemSoundId
        SystemSoundID soundID = 0;
        AudioServicesCreateSystemSoundID((__bridge CFURLRef _Nonnull)(url), &soundID);
        
        
        //根据soundId播放音效一:
    //    AudioServicesPlaySystemSoundWithCompletion(soundID, ^{
    //        NSLog(@"play finish");
    //        //当音效播放完成时,我们需要根据SystemSoundID 释放内存资源
    //        AudioServicesDisposeSystemSoundID(soundID);
    //    });
        
        
        
    //    根据soundId播放音效二:播放音效时,手机会跟着震动;
        AudioServicesPlayAlertSoundWithCompletion(soundID, ^{
            NSLog(@"play finish");
            AudioServicesDisposeSystemSoundID(soundID);
        });
  • 相关阅读:
    PHP+MySQL存储数据出现中文乱码的问题
    IE和火狐的css兼容性问题
    JS调用Webservice
    NET-使用Js调用WebService
    ASP.NET 与 Ajax 的实现方式
    未能加载文件或程序集“System.Web.Extensions, Version=1.0.61025.0, Culture=neutral
    c#webservice的简单示例
    HttpRequest Get和Post调用其他页面的方法
    MYSQL 递归操作
    sql with as 用法
  • 原文地址:https://www.cnblogs.com/lyz0925/p/11767015.html
Copyright © 2020-2023  润新知