2012-11-24 70 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