【问题标题】:AVAudioPlayer volumeAVAudioPlayer 音量
【发布时间】:2013-05-16 08:50:15
【问题描述】:

您好,我是 ios 新手,我想制作一个播放收音机的应用程序,所以该应用程序运行良好,但是当我尝试将音量添加到应用程序时,它是 cruch 并给了我这个错误:

[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;
}

}

所以请任何人帮助我吗?提前谢谢。

【问题讨论】:

  • 检查你的函数名称我认为首先是setVolume。所以disconnet绑定并将其与Volume绑定。试试这个来改变音量- (void)sliderValueChanged:(UISlider *)slider { myPlayer.volume = slider.value / 100.0; }
  • 实际上它不是 setVolume,为了检查是否正确,我刚刚以编程方式创建了一个新的 uislider,我调用了您在上面编写的函数,它一直给我同样的错误,新的源代码是: 是viewdidload方法我创建了一个新的uislider,我调用了上面的方法。

标签: iphone ios


【解决方案1】:

首先检查你的函数的名称我认为首先它是 setVolume。所以disconnet绑定并将其与Volume绑定。试试这个来改变音量

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

并将您的SilderUIControlEventValueChanged 绑定。行动

【讨论】:

    【解决方案2】:

    首先,您使用的是 AVPLayer 还是 AVAudioPlayer。 我在问这个问题,因为

    • 您已将radioPLayer 声明为AVAudioPLayer

      @property (nonatomic,retain) AVAudioPlayer *radioPlayer;

    • 并将radioPlayer初始化为AVPlayer

      self.radioPlayer = [AVPlayer playerWithPlayerItem:playerItem];

    如果您打算使用 AVAudioPlayer,生活会变得轻松。使用volume 属性

    self.radioPlayer.volume = iSlider.value;
    

    如果您使用的是 AVPLayer,那么您可以参考这些步骤。没试过,但似乎对很多人有帮助:https://stackoverflow.com/a/6178912/942966

    【讨论】:

    • 是的,你说的是正确的,我将 radioPLayer 声明为 AVAudioPLayer 并将其初始化为 AVPlayer 因为 playerWithPlayerItem:playerItem 不适用于 AVAudioPLayer,当我尝试使用 @ 987654332@ 收音机甚至不播放,我不知道AVPlayer 是否不支持该流或什么!!
    • AVAudioPLayer 不能用于流式传输。必须使用AVPlayer。因此,继续将radioPlayer 声明为AVPlayer。但是音量不能在 AVPlayer 中设置,所以转到我提到的链接并尝试使用AudioMix 进行设置
    【解决方案3】:

    请检查 IBAction 事件是UIControlEventValueChanged

    【讨论】:

    • 是的,它是 UIControlEventValueChanged。如果我尝试打印 uisilder 的值,则按预期打印我的值。
    【解决方案4】:
    self.radioPlayer.volume = Volume.value;
    

    上面一行没有任何意义。 Volume.value 表示 setVolume & 因为没有这样的方法,所以报错。

    根据滑块的移动分配值是好的。

    【讨论】:

    • 根据滑块移动分配值是我试图做的,当我试图给收音机播放器提供音量时,硬编码不起作用,例如self.radioPlayer.volume = 0.8;。跨度>
    猜你喜欢
    • 2012-09-22
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    • 2017-11-07
    • 2013-09-03
    • 1970-01-01
    • 2022-08-11
    • 1970-01-01
    相关资源
    最近更新 更多