2013-05-16 40 views
0

嗨,我是在IOS新的,我想使一個應用程序,玩無線電,因此應用程序工作正常,但是當我試圖包括捲到應用程序,這是cruch,給我這個錯誤:AVAudioPlayer量

[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 *)slider {myPlayer.volume = slider.value/100.0; }' – Buntylm

+0

實際上它不是setVolume,並且檢查是否真的我只是以編程方式創建了一個新的uislider,並且我調用了上面所寫的函數,並且保持給出相同的錯誤,新的源代碼是: 是viewdidload方法我創建一個新的uislider,我稱之爲上面的方法。 – Hamza

+0

試試這個https://github.com/mattgallagher/AudioStreamer – Buntylm

回答

0

請IBAction爲事件是UIControlEventValueChanged

+0

是的,它是UIControlEventValueChanged。如果我試圖打印uisilder的值是按預期打印出我的值。 – Hamza

1

首先檢查你的函數的我第一次是setVolume覺得這個名字。所以disconnet綁定並綁定與卷。並嘗試這種改變音量

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

並與UIControlEventValueChanged綁定您Silder。 Action

1

首先,你使用的是AVPLayer還是AVAudioPlayer。 我問這個問題的辯論,因爲

  • 聲明該radioPLayerAVAudioPLayer

    @屬性(非原子,保留)AVAudioPlayer * radioPlayer;

  • 和初始化radioPlayerAVPlayer

    self.radioPlayer = [AVPlayer playerWithPlayerItem:playerItem];

如果您打算使用AVAudioPlayer,生活會變得輕鬆。如果您正在使用AVPLayer使用volume財產

self.radioPlayer.volume = iSlider.value; 

,那麼你可以參考這些步驟。沒有嘗試過,但似乎它已經幫了很多:https://stackoverflow.com/a/6178912/942966

+0

是的你說的是正確的,我宣佈radioPLayer爲'AVAudioPLayer',我將它初始化爲'AVPlayer' cuz' playerWithPlayerItem:playerItem'不適用於'AVAudioPLayer',並且當我試圖使用'[[AVAudioPlayer alloc] initWithContentsOfURL:url error:&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