Я нашел решение, которое, как мне казалось, было бы распространенной проблемой. Итак, вот как ваше приложение может иметь собственную громкость и не вмешиваться в громкость звонка пользователя, даже если вы воспроизводите звуки только как системные звуки.
Вы должны импортировать структуру AVFoundation, а в объекте, который остается загруженным все время, пока выполняется ваше приложение (или просмотр, или делегат приложения), вы инициализируете AVAudioPlayer, даете ему файл для воспроизведения и устанавливаете его на «prepareToPlay». ..
Это то, что я сделал в основном представлении (которое используется для загрузки других представлений в качестве подпредставлений): в файле заголовка:
#import <AVFoundation/AVFoundation.h>
@interface MainViewController : UIViewController {
AVAudioPlayer *volumeOverridePlayer;
}
@property (nonatomic, retain) AVAudioPlayer *volumeOverridePlayer;
В файле реализации:
@synthesize volumeOverridePlayer;
- (void)viewDidLoad
{
[super viewDidLoad];
volumeOverridePlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL URLWithString:[[NSBundle mainBundle] pathForResource:@"something" ofType:@"caf"]] error:nil];
[volumeOverridePlayer prepareToPlay];
//...
}
Просто оставьте плеер готовым к воспроизведению вашего файла и наслаждайтесь собственным регулятором громкости, не проигрывая через него звуки! И, конечно же, не забудьте освободить его в режиме dealloc.
person
Dimitris
schedule
06.07.2009