2013-05-16 2 views
0

Привет, я новичок в ios, и я хочу, чтобы приложение, которое воспроизводит радио, поэтому приложение работает нормально, но когда я попытался включить том в приложение, он является cruch и дает мне эту ошибку:AVAudioPlayer volume

[AVPlayer setVolume:]: unrecognized selector sent to instance 0x9d4f500 
2013-05-16 09:34:47.785 RadioFM[22061:12503] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[AVPlayer setVolume:]: unrecognized selector sent to instance 0x9d4f500' 

и вот мой исходный код, который я использую:

в PlayerViewController.h:

@interface PlayerViewController : UIViewController 
{ AVAudioPlayer *radioPlayer; IBOutlet UISlider *Volume; } 
- (IBAction)Volume:(id)sender; 

@property (nonatomic,retain) AVAudioPlayer *radioPlayer; 

и PlayerViewController.m:

@synthesize radioPlayer; 

- (void)viewDidLoad 
{ 
    NSString *RadStream=<@Radio stream>; 
    NSURL *url=[NSURL URLWithString:RadStream]; 
    NSError *error; 
    AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:url]; 
    self.radioPlayer = [AVPlayer playerWithPlayerItem:playerItem]; 
    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&error]; 
    [[AVAudioSession sharedInstance] setActive: YES error: nil]; 
    [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 
    [self.radioPlayer play]; 
    [super viewDidLoad]; 

}

и у меня есть вид слайдера и на действие этого ползунка у меня есть:

- (IBAction)Volume:(id)sender { 
if (self.radioPlayer != nil) 
{ 
    self.radioPlayer.volume = Volume.value; 
} 

}

поэтому, пожалуйста, может ли один помочь мне в этом? Благодарю вас.

+0

Проверьте название своей функции, я думаю, сначала это было 'setVolume'.поэтому привязка disconnet и привязка его к 'Volume'. И попробуйте это изменить громкость '- (void) sliderValueChanged: (UISlider *) слайдер { myPlayer.volume = slider.value/100.0; } ' – Buntylm

+0

На самом деле это не было установленоВообще, и чтобы проверить, действительно ли это, я только что создал новый uislider программно, и я назвал функцию, которую вы написали выше, и она продолжает давать мне ту же ошибку, новый исходный код: is viewdidload methode я создаю новый uislider, и я назвал этот метод выше. – Hamza

+0

попробуйте https://github.com/mattgallagher/AudioStreamer – Buntylm

ответ

0

пожалуйста, проверьте события IBAction является UIControlEventValueChanged

+0

да, это UIControlEventValueChanged. и если бы я попытался напечатать значения uisilder, напечатайте мне значения, как ожидалось. – Hamza

1

Сначала проверьте имя вашей функции я думаю, это было первым SetVolume. поэтому привязка disconnet и привязка его к Volume. И попробовать это, чтобы изменить громкость

- (void)sliderValueChanged:(UISlider *)slider 
{ 
myPlayer.volume = slider.value/100.0; 
} 

И связать ваш Silder с UIControlEventValueChanged. Действие

1

Во-первых, вы используете AVPLayer или AVAudioPlayer. Я задаю этот вопрос, Потому что

  • вы объявили radioPLayer как AVAudioPLayer.

    @property (неатомный, сохраняющий) AVAudioPlayer * radioPlayer;

  • и инициализировать radioPlayer в AVPlayer

    self.radioPlayer = [AVPlayer playerWithPlayerItem: playerItem];

Если вы планируете использовать AVAudioPlayer, жизнь станет легкой. Используйте volume свойство

self.radioPlayer.volume = iSlider.value; 

Если вы используете AVPlayer, то вы можете обратиться к этим шагам. Не пробовал, но кажется, что он помог многим: https://stackoverflow.com/a/6178912/942966

+0

да, что вы сказали правильно, я объявил, что radioPLayer как «AVAudioPLayer», и я инициализирую его как «AVPlayer» cuz 'playerWithPlayerItem: playerItem' не работает с' AVAudioPLayer', и когда я попытался использовать '[[AVAudioPlayer alloc] initWithContentsOfURL: ошибка url: & error]; 'радио не играет и не играет, я не знаю, не поддерживает ли AVPlayer эти потоки или что !! – Hamza

+0

'AVAudioPLayer' не может использоваться для потоковой передачи. «AVPlayer» должен использоваться. Итак, продолжайте и объявите 'radioPlayer' как' AVPlayer'. Тем не менее, этот том нельзя установить в AVPlayer, поэтому вместо этого перейдите к ссылке, на которую я ссылаюсь, и попробуйте использовать «AudioMix», чтобы установить, что значение – Roshit

0
self.radioPlayer.volume = Volume.value; 

выше линии не имеют никакого отношения какой-либо смысл. Volume.value означает setVolume & из-за отсутствия такого метода, он дает ошибку.

присвоение значения в соответствии с движением ползунка является хорошим.

+0

, назначающее значение в соответствии с движением ползунка, - это то, что я пытался сделать, а также когда я попытался дать объем к радиопроигрывателю, жестко закодированному, не работает, например, 'self.radioPlayer.volume = 0.8;'. – Hamza