国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > iOS > 正文

講解iOS開發(fā)中對音效和音樂播放的簡單實(shí)現(xiàn)

2019-10-21 18:57:00
字體:
供稿:網(wǎng)友
這篇文章主要介紹了iOS開發(fā)中對音效和音樂播放的簡單實(shí)現(xiàn),代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下
 

音效的播放

一、簡單介紹

簡單來說,音頻可以分為2種

(1)音效

又稱“短音頻”,通常在程序中的播放時長為1~2秒

在應(yīng)用程序中起到點(diǎn)綴效果,提升整體用戶體驗(yàn)

(2)音樂

  比如游戲中的“背景音樂”,一般播放時間較長

框架:播放音頻需要用到AVFoundation.framework框架

二、音效的播放

1.獲得音效文件的路徑

復(fù)制代碼代碼如下:

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

 

2.加載音效文件,得到對應(yīng)的音效ID

復(fù)制代碼代碼如下:

  SystemSoundID soundID = 0;

 

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

 

3.播放音效

復(fù)制代碼代碼如下:

  AudioServicesPlaySystemSound(soundID);

 

 

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

4.音效播放常見函數(shù)總結(jié)

加載音效文件

復(fù)制代碼代碼如下:

  AudioServicesCreateSystemSoundID(CFURLRef inFileURL, SystemSoundID *outSystemSoundID)

釋放音效資源
復(fù)制代碼代碼如下:

  AudioServicesDisposeSystemSoundID(SystemSoundID inSystemSoundID)

播放音效
復(fù)制代碼代碼如下:

  AudioServicesPlaySystemSound(SystemSoundID inSystemSoundID)

播放音效帶點(diǎn)震動
復(fù)制代碼代碼如下:

  AudioServicesPlayAlertSound(SystemSoundID inSystemSoundID)

 

 

三、程序示例

先導(dǎo)入需要依賴的框架

講解iOS開發(fā)中對音效和音樂播放的簡單實(shí)現(xiàn)

導(dǎo)入需要播放的音效文件素材

講解iOS開發(fā)中對音效和音樂播放的簡單實(shí)現(xiàn)

說明:AVFoundation.framework框架中的東西轉(zhuǎn)換為CF需要使用橋接。

代碼示例:

復(fù)制代碼代碼如下:

YYViewController.m文件
//
//  YYViewController.m
//  14-音效播放
//
//  Created by apple on 14-8-8.
//  Copyright (c) 2014年 yangyong. All rights reserved.
//

 

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

@interface YYViewController ()

@end


復(fù)制代碼代碼如下:

@implementation YYViewController

 

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

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    //1.獲得音效文件的全路徑
    
    NSURL *url=[[NSBundle mainBundle]URLForResource:@"buyao.wav" withExtension:nil];
    
    //2.加載音效文件,創(chuàng)建音效ID(SoundID,一個ID對應(yīng)一個音效文件)
    SystemSoundID soundID=0;
    AudioServicesCreateSystemSoundID((__bridge CFURLRef)url, &soundID);
    
    //把需要銷毀的音效文件的ID傳遞給它既可銷毀
    //AudioServicesDisposeSystemSoundID(soundID);
    
    //3.播放音效文件
    //下面的兩個函數(shù)都可以用來播放音效文件,第一個函數(shù)伴隨有震動效果
    AudioServicesPlayAlertSound(soundID);
    //AudioServicesPlaySystemSound(<#SystemSoundID inSystemSoundID#>)
}

@end


說明:點(diǎn)擊屏幕可以播放音效文件。

 

 

 

音樂的播放

一、簡單說明

  音樂播放用到一個叫做AVAudioPlayer的類,這個類可以用于播放手機(jī)本地的音樂文件。

注意:

  (1)該類(AVAudioPlayer)只能用于播放本地音頻。

  (2)時間比較短的(稱之為音效)使用AudioServicesCreateSystemSoundID來創(chuàng)建,而本地時間較長(稱之為音樂)使用AVAudioPlayer類。

二、代碼示例

  AVAudioPlayer類依賴于AVFoundation框架,因此使用該類必須先導(dǎo)入AVFoundation框架,并包含其頭文件(包含主頭文件即可)。

講解iOS開發(fā)中對音效和音樂播放的簡單實(shí)現(xiàn)

講解iOS開發(fā)中對音效和音樂播放的簡單實(shí)現(xiàn)

導(dǎo)入必要的,需要播放的音頻文件到項(xiàng)目中。

代碼示例:

復(fù)制代碼代碼如下:

//
//  YYViewController.m
//  15-播放音樂
//

 

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

@interface YYViewController ()

@end


復(fù)制代碼代碼如下:

@implementation YYViewController

 

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

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    
    //1.音頻文件的url路徑
    NSURL *url=[[NSBundle mainBundle]URLForResource:@"235319.mp3" withExtension:Nil];
    
    //2.創(chuàng)建播放器(注意:一個AVAudioPlayer只能播放一個url)
    AVAudioPlayer *audioPlayer=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:Nil];
    
    //3.緩沖
    [audioPlayer prepareToPlay];
    
    //4.播放
    [audioPlayer play];
}

@end


代碼說明:運(yùn)行程序,點(diǎn)擊模擬器界面,卻并沒有能夠播放音頻文件,原因是代碼中創(chuàng)建的AVAudioPlayer播放器是一個局部變量,應(yīng)該調(diào)整為全局屬性。

 

可將代碼調(diào)整如下,即可播放音頻:

復(fù)制代碼代碼如下:

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

 

@interface YYViewController ()
@property(nonatomic,strong)AVAudioPlayer *audioplayer;
@end


復(fù)制代碼代碼如下:

@implementation YYViewController

 

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

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    
    //1.音頻文件的url路徑
    NSURL *url=[[NSBundle mainBundle]URLForResource:@"235319.mp3" withExtension:Nil];
    
    //2.創(chuàng)建播放器(注意:一個AVAudioPlayer只能播放一個url)
    self.audioplayer=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:Nil];
    
    //3.緩沖
    [self.audioplayer prepareToPlay];
    
    //4.播放
    [self.audioplayer play];
}

@end


注意:一個AVAudioPlayer只能播放一個url,如果想要播放多個文件,那么就得創(chuàng)建多個播放器。

 

三、相關(guān)說明

新建一個項(xiàng)目,在storyboard中放三個按鈕,分別用來控制音樂的播放、暫停和停止。

講解iOS開發(fā)中對音效和音樂播放的簡單實(shí)現(xiàn)

程序代碼如下:

復(fù)制代碼代碼如下:

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

 

@interface YYViewController ()
@property(nonatomic,strong)AVAudioPlayer *player;
- (IBAction)play;
- (IBAction)pause;
- (IBAction)stop;
@end

@implementation YYViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    //1.音頻文件的url路徑
    NSURL *url=[[NSBundle mainBundle]URLForResource:@"235319.mp3" withExtension:Nil];
    
    //2.創(chuàng)建播放器(注意:一個AVAudioPlayer只能播放一個url)
    self.player=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:Nil];
    
    //3.緩沖
    [self.player prepareToPlay];

}

- (IBAction)play {
    //開始播放/繼續(xù)播放
    [self.player play];
}

- (IBAction)pause {
    //暫停
    [self.player pause];
}

- (IBAction)stop {
    //停止
    //注意:如果點(diǎn)擊了stop,那么一定要讓播放器重新創(chuàng)建,否則會出現(xiàn)一些莫名其面的問題
    [self.player stop];
}
@end


注意:如果點(diǎn)了“停止”,那么一定要播放器重新創(chuàng)建,不然的話會出現(xiàn)莫名其妙的問題。

 

  點(diǎn)擊了stop之后,播放器實(shí)際上就不能再繼續(xù)使用了,如果還繼續(xù)使用,那么后續(xù)的一些東西會無法控制。

推薦代碼:

復(fù)制代碼代碼如下:

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

 

@interface YYViewController ()
@property(nonatomic,strong)AVAudioPlayer *player;
- (IBAction)play;
- (IBAction)pause;
- (IBAction)stop;
@end


復(fù)制代碼代碼如下:

@implementation YYViewController

 

#pragma mark-懶加載
-(AVAudioPlayer *)player
{
    if (_player==Nil) {
        
        //1.音頻文件的url路徑
        NSURL *url=[[NSBundle mainBundle]URLForResource:@"235319.mp3" withExtension:Nil];
        
        //2.創(chuàng)建播放器(注意:一個AVAudioPlayer只能播放一個url)
        self.player=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:Nil];
        
        //3.緩沖
        [self.player prepareToPlay];
    }
    return _player;
}

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

- (IBAction)play {
    //開始播放/繼續(xù)播放
    [self.player play];
}

- (IBAction)pause {
    //暫停
    [self.player pause];
}

- (IBAction)stop {
    //停止
    //注意:如果點(diǎn)擊了stop,那么一定要讓播放器重新創(chuàng)建,否則會出現(xiàn)一些莫名其面的問題
    [self.player stop];
    self.player=Nil;
}
@end


四、播放多個文件
講解iOS開發(fā)中對音效和音樂播放的簡單實(shí)現(xiàn)
點(diǎn)擊,url,按住common建查看。

 

講解iOS開發(fā)中對音效和音樂播放的簡單實(shí)現(xiàn)

可以發(fā)現(xiàn),這個url是只讀的,因此只能通過initWithContentsOfUrl的方式進(jìn)行設(shè)置,也就意味著一個播放器對象只能播放一個音頻文件。

那么如何實(shí)現(xiàn)播放多個音頻文件呢?

可以考慮封裝一個播放音樂的工具類,下一篇文章將會介紹具體怎么實(shí)現(xiàn)。



注:相關(guān)教程知識閱讀請移步到IOS開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 绵竹市| 兴海县| 克山县| 梅州市| 安国市| 公安县| 张北县| 定结县| 章丘市| 华蓥市| 秀山| 磐安县| 松原市| 定结县| 宣恩县| 安岳县| 宜宾市| 钟山县| 恩施市| 沁源县| 贞丰县| 宜阳县| 蚌埠市| 钦州市| 兴隆县| 文登市| 客服| 句容市| 仁寿县| 连州市| 黄大仙区| 巴南区| 拉萨市| 青田县| 隆化县| 忻城县| 库尔勒市| 永胜县| 沛县| 庆城县| 星子县|