iOS 앱 에서 재생 음향 효과 와 음악 기능 을 실현 하 는 간단 한 예시

재생 효과
iOS 개발 과정 에서 음향 효 과 를 재생 하 는 기능 을 만 날 수 있 습 니 다.
사실 간단 합 니 다.iOS 는 음향 효 과 를 직접 재생 하 는 프레임 워 크 를 제공 합 니 다.AudioToolbox.framework
새 항목  TestWeChatSounds
201633193440239.png (730×430)
201633193511334.png (730×430)
새 항목 에 AudioToolbox.framework 가 져 오기
201633193536489.png (1128×895)
201633193742629.png (400×460)
가 져 오기 성공 후 다음 그림
201633193805421.png (304×149)
프로젝트 디 렉 터 리 는 다음 과 같 습 니 다.
201633193846873.png (252×297)
다음은 프로젝트 에 caf 형식의 음향 효과 파일 을 몇 개 추가 합 니 다.
201633193904175.png (231×326)
다음은 프로젝트 의 기본 생 성 뷰 컨트롤 러 에 코드 를 추가 합 니 다.
AudioToolbox 가 져 오기

#import <AudioToolbox/AudioToolbox.h> 
뷰 에 button 을 추가 하고 클릭 해서 음향 효 과 를 재생 합 니 다.

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
     
    UIButton *btn1=[[UIButton alloc] initWithFrame:CGRectMake(20, 100, 120, 36)]; 
    [btn1 setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 
    [btn1 setTitle:@" " forState:UIControlStateNormal]; 
    [btn1 addTarget:self action:@selector(btn1Act) forControlEvents:UIControlEventTouchUpInside]; 
    [self.view addSubview:btn1]; 
     
    UIButton *btn2=[[UIButton alloc] initWithFrame:CGRectMake(20, 150, 120, 36)]; 
    [btn2 setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 
    [btn2 setTitle:@" " forState:UIControlStateNormal]; 
    [btn2 addTarget:self action:@selector(btn2Act) forControlEvents:UIControlEventTouchUpInside]; 
    [self.view addSubview:btn2]; 

재생 효과 구현

-(void)btn1Act { 
     
    [self playSoundEffect:@"alarm.caf"]; 

-(void)btn2Act { 
     
    [self playSoundEffect:@"ct-error.caf"]; 

 
-(void)playSoundEffect:(NSString *)name{ 
    NSString *audioFile=[[NSBundle mainBundle] pathForResource:name ofType:nil]; 
    NSURL *fileUrl=[NSURL fileURLWithPath:audioFile]; 
    //1. ID 
    SystemSoundID soundID=0; 
    /**
     * inFileUrl: url
     * outSystemSoundID: id( ID)
     */ 
    AudioServicesCreateSystemSoundID((__bridge CFURLRef)(fileUrl), &soundID); 
    // ,  
    AudioServicesAddSystemSoundCompletion(soundID, NULL, NULL, soundCompleteCallback, NULL); 
    //2.  
    AudioServicesPlaySystemSound(soundID);//  
    //    AudioServicesPlayAlertSound(soundID);//  

 
void soundCompleteCallback(SystemSoundID soundID,voidvoid * clientData){ 
    NSLog(@" ..."); 

코드 부분 캡 처
201633193930760.jpg (1131×791)
됐어.
음악 을 틀다
애플 이 제공 하 는 프레임 워 크 인 AV Foundation.framework 를 사용 합 니 다.
우선,새 항목
201633193953166.png (730×430)
프로젝트 이름 짓 기:TestAVGoundation
201633194017611.png (730×430)
다음 프레임 워 크 가 져 오기
201633194046751.png (400×460)
가 져 오기 성공 후 다음 과 같 습 니 다.
201633194102800.png (362×143)
프로젝트 구조
201633194126690.png (249×325)
코드 를 쓰기 전에 우 리 는 노래 한 곡 을 찾 아 프로젝트 에 넣 었 다.
여기 서 저희 가 좀 클래식 한 노래 를 틀 어 볼 게 요.주화 건 씨 의 친구.
201633194145282.png (248×309)
마찬가지 로 우 리 는 프로젝트 의 기본 생 성 된 ViewController.m 을 열 어 재생 기능 을 추가 합 니 다.
우선 헤더 파일 가 져 오기

#import <AVFoundation/AVFoundation.h>

다음 컨트롤 만 들 기

@property (nonatomic,strong) AVAudioPlayer *audioPlayer;//  
@property (strong, nonatomic) UIProgressView *playProgress;//  
@property (strong, nonatomic) UIButton *playOrPause; // / ( tag 0 ,1 ) 
 
@property (strong ,nonatomic) NSTimer *timer;//  
인터페이스 초기 화

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    self.view.backgroundColor=[UIColor lightGrayColor]; 
    [self initUserFace]; 
     

 
-(void)initUserFace{ 
     
    // playProgress 
     
    _playProgress= [[UIProgressView alloc] initWithProgressViewStyle: UIProgressViewStyleDefault]; 
     
    _playProgress.frame=CGRectMake(0, 100, self.view.bounds.size.width, 36); 
     
    [self.view addSubview:_playProgress]; 
     
    //  
    _playOrPause=[[UIButton alloc]initWithFrame:CGRectMake(0, 150, 120, 36)]; 
    [_playOrPause setTitle:@" " forState:UIControlStateNormal]; 
    [_playOrPause setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 
    [_playOrPause addTarget:self action:@selector(playOrPauseAct:) forControlEvents:UIControlEventTouchUpInside]; 
    [self.view addSubview:_playOrPause]; 
     

재생,일시 정지,노래 진행 표시 줄 을 수정 하 는 방법 을 추가 합 니 다.

-(NSTimer *)timer{ 
    if (!_timer) { 
        _timer=[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(updateProgress) userInfo:nil repeats:true]; 
    } 
    return _timer; 

 
-(AVAudioPlayer *)audioPlayer{ 
    if (!_audioPlayer) { 
        NSString *urlStr=[[NSBundle mainBundle]pathForResource:@" .mp3" ofType:nil]; 
        NSURL *url=[NSURL fileURLWithPath:urlStr]; 
        NSError *error=nil; 
        // , Url , HTTP Url 
        _audioPlayer=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:&error]; 
        //  
        _audioPlayer.numberOfLoops=0;// 0  
        _audioPlayer.delegate=self; 
        [_audioPlayer prepareToPlay];//  
        if(error){ 
            NSLog(@" , :%@",error.localizedDescription); 
            return nil; 
        } 
    } 
    return _audioPlayer; 

 
 
/**
 * 
 */ 
-(void)play{ 
    if (![self.audioPlayer isPlaying]) { 
        [self.audioPlayer play]; 
        self.timer.fireDate=[NSDate distantPast];//  
    } 

 
/**
 * 
 */ 
-(void)pause{ 
    if ([self.audioPlayer isPlaying]) { 
        [self.audioPlayer pause]; 
        self.timer.fireDate=[NSDate distantFuture];// , invalidate , ,  
         
    } 

 
/**
 * 
 */ 
-(void)updateProgress{ 
    float progress= self.audioPlayer.currentTime /self.audioPlayer.duration; 
    [self.playProgress setProgress:progress animated:true]; 

 
#pragma mark -  
-(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag{ 
    NSLog(@" ..."); 
     
    [_playOrPause setTitle:@" " forState:UIControlStateNormal]; 
     

재생 버튼 에 클릭 이 벤트 를 추가 합 니 다.

-(void)playOrPauseAct:(UIButton *)sender{ 
    NSString *strPlay=sender.titleLabel.text; 
    NSLog(@"strPlay=%@",strPlay); 
    if ([strPlay isEqualToString:@" "]) { 
        [sender setTitle:@" " forState:UIControlStateNormal]; 
        [self play]; 
    }else{ 
        [sender setTitle:@" " forState:UIControlStateNormal]; 
        [self pause]; 
    } 

자,여기까지 만 들 었 습 니 다.실행 할 수 있 습 니 다.
자세 한 분 들 은 저희 앱 이 음악 을 재생 하 는 과정 에서 백 스테이지 로 전환 하면 음악 이 멈 췄 다 는 걸 알 수 있 을 거 예요.  다시 켰 다가 다시 틀 었 어 요.
백 스테이지 에서 도 음악 을 계속 틀 어 주시 면 저희 가 두 군데 수정 을 해 야 돼 요.
1,프로젝트 plist 파일 열기
201633194211928.png (164×257)
하나 추가
201633194233047.png (684×185)
2.ViewController.m 을 열 고 다음 과 같은 방법 으로 한 단락 을 추가 합 니 다.
201633194347772.jpg (704×378)
됐 습 니 다.백 스테이지 해 보 세 요.

좋은 웹페이지 즐겨찾기