2012-11-24 34 views
0

我试图通过变量来改变音效的音量。我正在使用AVAudioPlayer并调用变量来设置音量,但是当我运行该应用程序时,无论变量设置如何,我都听不到任何声音。 (.1-1.0)但是,如果我从AvAudioPlayer块(player.volume = .5;)中设置数字,则它会按照它的响应进行响应。任何想法我做错了什么?我的代码AVAudioPlayer音量从变量

例子:

@interface 

@property (nonatomic) float setVolume; 

@implementation 
@synthesize setVolume; 

float setVolume = .5; 

-(void)countdown 
{ 
//play sound 
NSString *musicFilePath = [[NSBundle mainBundle] pathForResource:@"Countdown_beep" ofType:@"wav"]; 
NSURL *musicURL = [[NSURL alloc] initFileURLWithPath:musicFilePath]; 
player = [[AVAudioPlayer alloc] initWithContentsOfURL:musicURL error:nil]; 
player.volume = setVolume; 
[player play]; 

感谢。 :)

编辑:

我通过从头文件中的声明和创建实施中的伊娃解决了这一问题。

+0

C全局(外部变量)不是一个ivar。 – matt

回答

0

此行是没有意义的,是不相关的程序:

float setVolume = .5; 

您已经合成属性/伊娃叫setVolume。这不是。因此,默认情况下,您的媒体资源setVolume为零,因此您无需任何更改,因此音量最终为零,并且没有声音发生。

要设置属性的值,请设置属性的值。 :)例如,你可以说self.setVolume = .5。例如,您可以在countdown方法中或其他方法(属性的一个要点是此对象的所有方法都可以看到它)中执行此操作。

现在,您的代码的另一个问题是您的属性名称以“set”开头。这可能是一个坏主意。如果我是你,我会选择另一个名字。 “setX”形式的名称最好仅用作实例变量/属性X的setter方法的名称。

+0

谢谢,马特。我在这个方法中说'self.setVolume = .5;'的唯一问题是,这个变量设置了音量效果的许多实例被不同的方法调用,而且还有很多工作要做,与仅将AVAudioPlayer的音量链接到变量相反。我同意避免var名称中的'set',我只是为了示例代码而在这里做了这些。 – Andrewb

+0

我想我的问题是我写了什么来改变方法外的'setVolume'的值? – Andrewb

+0

从方法外部改变'setVolume'的值有什么意义?方法是你的代码 - 它们是运行的。你的工作就是把这些代码放在正确运行的方法中。例如,如果您希望将其作为您的实例变量的默认值,对于此类的每个实例,请覆盖指定的初始化方法并在其中设置值。我有点担心你不明白什么方法和实例变量*是*。你需要。 – matt