iOS 앱 에서 재생 음향 효과 와 음악 기능 을 실현 하 는 간단 한 예시
iOS 개발 과정 에서 음향 효 과 를 재생 하 는 기능 을 만 날 수 있 습 니 다.
사실 간단 합 니 다.iOS 는 음향 효 과 를 직접 재생 하 는 프레임 워 크 를 제공 합 니 다.AudioToolbox.framework
새 항목 TestWeChatSounds
새 항목 에 AudioToolbox.framework 가 져 오기
가 져 오기 성공 후 다음 그림
프로젝트 디 렉 터 리 는 다음 과 같 습 니 다.
다음은 프로젝트 에 caf 형식의 음향 효과 파일 을 몇 개 추가 합 니 다.
다음은 프로젝트 의 기본 생 성 뷰 컨트롤 러 에 코드 를 추가 합 니 다.
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(@" ...");
}
코드 부분 캡 처됐어.
음악 을 틀다
애플 이 제공 하 는 프레임 워 크 인 AV Foundation.framework 를 사용 합 니 다.
우선,새 항목
프로젝트 이름 짓 기:TestAVGoundation
다음 프레임 워 크 가 져 오기
가 져 오기 성공 후 다음 과 같 습 니 다.
프로젝트 구조
코드 를 쓰기 전에 우 리 는 노래 한 곡 을 찾 아 프로젝트 에 넣 었 다.
여기 서 저희 가 좀 클래식 한 노래 를 틀 어 볼 게 요.주화 건 씨 의 친구.
마찬가지 로 우 리 는 프로젝트 의 기본 생 성 된 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 파일 열기
하나 추가
2.ViewController.m 을 열 고 다음 과 같은 방법 으로 한 단락 을 추가 합 니 다.
됐 습 니 다.백 스테이지 해 보 세 요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
View의 레이아웃 방법을 AutoLayout에서 따뜻한 손 계산으로 하면 성능이 9.26배로 된 이야기이 기사는 의 15 일째 기사입니다. 어제는 에서 이었습니다. 손 계산을 권하는 의도는 없고, 특수한 상황하에서 계측한 내용입니다 화면 높이의 10 배 정도의 contentView가있는 UIScrollView 레이아...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.