播放音频

音频文件介绍

有两类主要的音频文件格式: 

无损格式,例如WAV,PCM,TTA,FLAC,AU,APE,TAK,WavPack(WV) ,CAF

有损格式,例如MP3,Windows Media Audio(WMA),Ogg Vorbis(OGG),AAC 


移动音频文件

作为移动设备音频文件应该原则上比较小,一般的格式:

WAV、由于无损压缩效果最好。

MP3、有损压缩,文件比较小,由于去除的是人类无法感应到的声音,效果也很好。这是目前常用格式。

AAC、压缩比例更大,比MP3文件还要小。

CAF(Core Audio Format)是Apple专用的无损压缩格式。


 Core Audio

wps_clip_image-7562

高级API,易用 

System Sound API –播放短声音、警告音等。

AVFoundation 可以播放长时间声音,简单易用。

低级API,能够对音频有更多的控制

Audio Toolbox – 录制、播放、音频流有全面的控制。

OpenAL – 播放立体声,常用于游戏。


System Sound API 

System Sound 可以播放“短的”声音,所谓短声音就是5秒以内。 不循环、没有声音控制、立即播放。

播放格式限制:

1 线性PCM 和 IMA4

2 .caf .aif 或 .wav


播放“短声音” 

播放“短声音”主要就是两个步骤:

注册声音

AudioServicesCreateSystemSoundID ((CFURLRef)fileURL, &myID);

播放声音

AudioServicesPlaySystemSound (myID);

监听完成事件方法

AudioServicesAddSystemSoundCompletion

清除播放sound ID

SystemSoundID myID; 

AudioServicesDisposeSystemSoundID (myID);  


震动

也可以通过System Sound API让iPhone震动,但是iPod touch不能震动。

震动可以通过指定一个特殊的system sound ID—— kSystemSoundID_Vibrate实现。

AudioServicesPlaySystemSound (kSystemSoundID_Vibrate);


实例

wps_clip_image-14723


SystemSoundServices

添加AudioToolbox.framework框架


SystemSoundServicesViewController.h文件

#import <UIKit/UIKit.h>
#include <AudioToolbox/AudioToolbox.h>

@interface SystemSoundServicesViewController : UIViewController;

- (IBAction) playSystemSound;
- (IBAction) vibrate;

@end


- (IBAction) playSystemSound

{
    NSURL* system_sound_url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"BeepGMC500" ofType:@"wav"]];
    SystemSoundID system_sound_id;

    AudioServicesCreateSystemSoundID(
        (CFURLRef)system_sound_url,
        &system_sound_id
    );
    
    // Register the sound completion callback.
    AudioServicesAddSystemSoundCompletion(
        system_sound_id,
        NULL, // uses the main run loop
        NULL, // uses kCFRunLoopDefaultMode
        MySoundFinishedPlayingCallback, // the name of our custom callback function
        NULL // for user data, but we don't need to do that in this case, so we just pass NULL
    );


    // Play the System Sound
    AudioServicesPlaySystemSound(system_sound_id);
}


AudioServicesAddSystemSoundCompletion方法5个参数,第一参数SystemSoundID,第二参数是是否使用循环,第三个参数是循环模式,第四个参数是回调函数,就是当播放完成时候回调的方法,第五个参数是为回调函数提供参数。

这里回调的方法是C语言风格的函数:MySoundFinishedPlayingCallback。

回调函数

void MySoundFinishedPlayingCallback(SystemSoundID sound_id, void* user_data){
    AudioServicesDisposeSystemSoundID(sound_id);
}


震动方法调用
// Vibrate on action
- (IBAction) vibrate

{
    AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值