2012-11-24 2 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]; 

Спасибо. :)

EDIT:

Я исправил проблему, удалив объявление из файла заголовка и создания Ивара в рамках реализации.

+0

A C global (внешняя переменная) не является ivar. – matt

ответ

0

Эта линия не имеет никакого смысла и не имеет никакого отношения к вашей программе:

float setVolume = .5; 

Вы уже синтезирования свойство/Ивар под названием setVolume. Это не так. Поэтому по умолчанию ваше свойство setVolume равно нулю, и вы ничего не делаете, чтобы изменить это, поэтому громкость заканчивается как ноль и звук не происходит.

Чтобы установить значение свойства, задайте значение свойства. :) Например, вы могли бы сказать self.setVolume = .5. Вы могли бы сделать это раньше в методе countdown, например, или в каком-либо другом методе (одна из точек свойства - это то, что все методы этого объекта могут видеть это).

Теперь еще одна проблема с вашим кодом заключается в том, что ваше имя свойства начинается с «set». Вероятно, это плохая идея. Если бы я был вами, я бы выбрал другое имя. Имена формы «setX» лучше всего использовать только как имя метода setter для переменной экземпляра/свойства X.

+0

Спасибо, Мэтт. Моя единственная проблема с выражением 'self.setVolume = .5;' в методе заключается в том, что эта переменная задает том для многих экземпляров звукового эффекта, который вызывается из разных методов, и это намного больше работы, проходящей и меняющей каждый отдельно, напротив, просто связывает громкость AVAudioPlayer с переменной. Также я согласен с тем, что избегаю «set» в именах var, я просто сделал это здесь для примера кода. – Andrewb

+0

Я предполагаю, что мой вопрос - это то, что я пишу, чтобы изменить значение 'setVolume' вне метода? – Andrewb

+0

Какое чувство могло бы быть сделано, чтобы изменить значение 'setVolume' вне метода? Методы - это ваш код - это то, что работает. Ваша задача - поместить этот код в методы, которые будут выполняться в нужный момент. Например, если вы хотите, чтобы это значение по умолчанию вашей переменной экземпляра для каждого экземпляра этого класса, который когда-либо появился, переопределите назначенный метод инициализации и установите там значение. Я немного обеспокоен тем, что вы не понимаете, какие методы и переменные экземпляра * являются *. Тебе нужно. – matt

Смежные вопросы