2013-10-13 27 views
7

Câu hỏi này dường như được hỏi và trả lời nhiều lần nhưng không có câu trả lời cụ thể hoặc chính xác. Do đó tôi sẽ định lại câu hỏi cho iOS7 và hy vọng sẽ có một số trợ giúp.Kiểm soát âm lượng hệ thống âm thanh (chuông và cảnh báo) của iPhone iOS7

Tôi cần sử dụng AudioServicesPlaySystemSound để phát âm thanh khi thời gian là cực kỳ quan trọng và đây chỉ là cách để phát hiệu ứng âm thanh đồng thời một cách chính xác với thời gian biến (thử mọi tùy chọn khác).

Tính năng này hoạt động tốt nhưng tôi muốn điều chỉnh âm lượng. Cách duy nhất để có thể thực hiện điều này là với các nút mặc dù một số người sử dụng MPVolumeView (chỉ hoạt động cho âm nhạc), một số người nói sử dụng MPMusicPlayerController (nhưng điều này cũng chỉ hoạt động cho âm nhạc và hiện đang bị mất giá), và những người khác chỉ nói không thể được thực hiện - có vẻ như có nhiều khả năng hơn.

Tuy nhiên, với iOS7 có một điều khiển trượt trong cài đặt> âm thanh cho âm lượng chuông báo động. Có cách nào tôi có thể phân lớp, sao chép, hoặc truy cập điều khiển trượt này để thay đổi khối lượng này từ bên trong ứng dụng?

+0

Tôi nghĩ rằng tôi đã thấy điều này trong ứng dụng Waze. Tôi sẽ xem xét. –

+0

Hãy xem tại đây http://stackoverflow.com/questions/10286744/how-to-change-device-volume-on-ios-not-music-volume –

+0

@Paul Pivec Nếu bạn tìm thấy câu trả lời, vui lòng chia sẻ nó như tôi cũng đang tìm kiếm như vậy. Tôi không thể tin rằng Apple có những hạn chế ngu ngốc như vậy ... – user959631

Trả lời

0

Tôi nghĩ rằng bạn muốn kiểm soát khối lượng của bạn thông qua chương trình

- (void)setVolume:(float)Level 
    { 

     OSStatus errorMsg = AudioQueueSetParameter(audioQueue, kAudioQueueParam_Volume, Level); 

    if (errorMsg) { 
     NSLog(@"AudioQueueSetParameter returned %d when setting the volume.", errorMsg); 
    } 

} 
  • sử dụng mã này để thiết lập mức âm lượng đi qua từ mã của bạn bằng nút mà bạn muốn kiểm soát.
+0

nếu điều này không thông qua lập trình: vui lòng tham khảo liên kết này http://stackoverflow.com/questions/10855874/audioservicesplaysystemsound-volume –

1

Apple khuyến cáo sử dụng MPVolumeView, vì vậy tôi đã đưa ra với điều này:

Thêm volumeSlider tài sản:

@property (nonatomic, strong) UISlider *volumeSlider; 

Init MPVolumeView và thêm nơi nào đó để xem của bạn (có thể được ẩn, không khung, hoặc trống vì showsRouteButton = NOshowsVolumeSlider = NO):

MPVolumeView *volumeView = [MPVolumeView new]; 
volumeView.showsRouteButton = NO; 
volumeView.showsVolumeSlider = NO; 
[self.view addSubview:volumeView]; 
.210

Tìm và lưu tài liệu tham khảo để UISlider:

__weak __typeof(self)weakSelf = self; 
[[volumeView subviews] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
    if ([obj isKindOfClass:[UISlider class]]) { 
     __strong __typeof(weakSelf)strongSelf = weakSelf; 
     strongSelf.volumeSlider = obj; 
     *stop = YES; 
    } 
}]; 

Thêm hành động mục tiêu cho UIControlEventValueChanged:

[self.volumeSlider addTarget:self action:@selector(handleVolumeChanged:) forControlEvents:UIControlEventValueChanged]; 

Và sau đó cập nhật điều khiển tùy chỉnh của bạn khi khối lượng đã được thay đổi (ví dụ: bởi điều khiển âm lượng phần cứng):

- (void)handleVolumeChanged:(id)sender 
{ 
    NSLog(@"%s - %f", __PRETTY_FUNCTION__, self.volumeSlider.value); 
    self.myCustomVolumeSliderView.value = self.volumeSlider.value; 
} 

và cũng cách khác xung quanh:

- (IBAction)myCustomVolumeSliderViewValueChanged:(id)sender { 
    NSLog(@"set volume to: %f", self.myCustomVolumeSliderView.value); 
    self.volumeSlider.value = self.myCustomVolumeSliderView.value; 
} 

Chú ý: Hãy chắc chắn rằng thiết lập self.volumeSlider.value không thực hiện lặp lại để thiết lập self.myCustomVolumeSliderView.value.

Hy vọng điều này sẽ giúp ai đó (và Apple không loại bỏ MPVolumeSlider khỏi MPVolumeView).

+1

Điều này dường như thay đổi âm lượng hệ thống, không phải âm lượng chuông/cảnh báo, như được OP hỏi. – levigroker

Các vấn đề liên quan