2009-06-22 5 views

답변

5

나는 일반적인 문제가 될 것이라고 생각했던 것에 대한 해결책을 발견했습니다. 따라서 시스템 사운드처럼 사운드를 재생하는 경우에도 앱이 자체 볼륨을 보유하고 사용자의 벨소리 볼륨을 어지럽히 지 않는 방식입니다.

AVFoundation 프레임 워크를 가져와야하고 AVAudioPlayer를 초기화 한 앱이 실행될 때마다 (또는 뷰 또는 앱 대리인)로드 된 상태로 유지되는 객체에 재생할 파일을 지정하고 "

#import <AVFoundation/AVFoundation.h> 

@interface MainViewController : UIViewController { 
    AVAudioPlayer *volumeOverridePlayer; 
} 

@property (nonatomic, retain) AVAudioPlayer *volumeOverridePlayer; 

구현 파일에서 : 헤더 파일에 : prepareToPlay는 "그것은 ...

내가 (즉,이 서브 뷰와 같은 다른 뷰를로드하는 데 사용됩니다) 내 주요보기에 무슨 짓을

@synthesize volumeOverridePlayer; 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    volumeOverridePlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL URLWithString:[[NSBundle mainBundle] pathForResource:@"something" ofType:@"caf"]] error:nil]; 
    [volumeOverridePlayer prepareToPlay]; 
//... 
} 

파일을 재생할 준비가 된 상태로 방금 사운드를 재생하지 않고도 자신 만의 볼륨 컨트롤을 즐기십시오! 물론 dealloc에서 해제하는 것을 잊지 마십시오.

+1

내가 게시 한 후 오랜 시간이 돌아와서, 볼륨을 줄이고 증가시키지 않고서 만 작동한다는 것을 알았습니다. 어쨌든, 이후 AVAudioplayers를 사용하여 사운드를 재생했습니다. (있는 경우) 경보를 통해 거의 사용하지 않습니다. – Dimitris

+0

그것은 오래된 주제입니다 -하지만 어쩌면 새 SDK가 약간의 변경 사항을 가지고 있을지 궁금합니다. 내 응용 프로그램이 벨소리 볼륨에 상관없이 파일에서 톤을 재생하고 사용자가 볼륨을 변경하거나 변경하는 것을 허용하지 않기를 바랍니다. 나는 사용자로부터 아무런 간섭도없이 가능한 큰 소리로 듣고 싶다. (벨소리 볼륨을 낮추거나 음소거 모드로 설정한다. 나는 여전히 소리를 크게 울리고 싶다.) 내가 무엇을 할 수 있는가? 내 코드는 AvAudioPlayer를 사용하고 있으며 나를 위해 작동하지 않습니다 ... –

+0

AudioServicesPlaySystemSound (someSoundID)를 시도하십시오; 경고 소리는 내가 생각하는 전화 벨소리 볼륨을 사용하고 있습니다. – Dimitris

2

Apple의 설명서에서 볼 수 있듯이 여기에는 두 가지 문제가 있습니다. 1. 응용 프로그램 및 OS/하드웨어 볼륨은 하드웨어/사용자 만 제어 할 수 있습니다. 2. 시스템 사운드를 재생 중입니다. 나는 시스템 사운드가 OS에 의해 관리된다고 믿습니다. 실제 사운드 파일을 재생하지 않는 한, 여기에서 운이 좋지 않을 것입니다. 사운드 파일을 사용할 수 있다면 here을보세요.

행운을 빈다.

+2

사운드 파일을 재생 중입니다. 시스템 사운드로 재생하고 있습니다. Apple은 짧은 사운드 (30 초 미만)를이 방법으로 재생할 것을 제안합니다. 이렇게 할 수 없다면 제안하는 다른 방법으로해야 할 수도 있습니다. 고마워요 :) – Dimitris