Воспроизведение звукового файла wav с помощью AVFoundation

Я использую AVFoundation для воспроизведения файлов WAV. Но я не мог заставить его играть. Также никаких ошибок или предупреждений не обнаружено.

XCode - 4.2, а устройство - iOS 5.

- (IBAction) playSelectedAlarm:(id)sender {

UIButton *button = (UIButton *)sender;

int bTag = button.tag;

NSString *fileName = [NSString stringWithFormat:@"%d23333", bTag];

NSLog(@"%@", fileName);

NSString *path = [[NSBundle mainBundle] pathForResource:fileName ofType:@"wav"];

NSURL *fileURL = [[NSURL alloc] initFileURLWithPath: path];

AVAudioPlayer *theAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:NULL];

theAudio.volume = 1.0;

theAudio.delegate = self;

[theAudio prepareToPlay];

[theAudio play];

}

person Quaso    schedule 30.11.2011    source источник
comment
Убедитесь, что вы не игнорируете возможные ошибки (поскольку вы находитесь в вызове initWithContentsOfUrl). Используйте правильные объекты NSError и выведите их результаты на консоль.   -  person Till    schedule 30.11.2011
comment
также проверьте, не забыли ли вы добавить фреймворк Audio Foundation.   -  person slonkar    schedule 30.11.2011
comment
@SumitLonkar: Проверено дважды :)   -  person Quaso    schedule 30.11.2011
comment
@Till По-прежнему не получил ошибки. NSError *audioError = nil; AVAudioPlayer *theAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:&audioError]; if(audioError != nil) { NSLog(@"An audio error occurred: \"%@\"", audioError); } else { [theAudio prepareToPlay]; [theAudio play]; }   -  person Quaso    schedule 30.11.2011
comment
WAV - это формат, который я бы на самом деле не использовал - попробуйте преобразовать этот файл в AIFF или CAF и использовать результат. Формат WAV-контейнера претерпел некоторые незначительные нарушения, иногда приводящие к сбоям воспроизведения.   -  person Till    schedule 30.11.2011
comment
Конвертировал их в CAF, но это не решило проблему.   -  person Quaso    schedule 30.11.2011


Ответы (2)


Вот решение;

Я установил AVAudioPlayer в заголовочном файле ..

@property (неатомарный, сохранить) AVAudioPlayer * theAudio;

Я думаю, что «сохранить» решила мою проблему. Потому что после того, как я отправил «play», он отправит «release», чтобы сбалансировать выделение. Когда AVAudioPlayer освобождается, он прекращает воспроизведение звука.

person Quaso    schedule 01.12.2011
comment
если я загружаю аудиофайл, выбрав MPMediaPickerController, затем воспроизводю в фоновом режиме. Миниатюра музыки не отображается на главном экране. как можно решить эту проблему? - person amisha.beladiya; 02.12.2016

У меня была такая же проблема с Xcode 4.5. Превращение AVAudioPlayer в строго типизированное свойство заставило его играть.

Поэтому в @interface необходимо добавить следующий код:

@property (nonatomic, strong) AVAudioPlayer *theAudio;

Тогда реализация @ станет:

- (IBAction) playSelectedAlarm:(id)sender {

    UIButton *button = (UIButton *)sender;

    int bTag = button.tag;

    NSString *fileName = [NSString stringWithFormat:@"%d23333", bTag];

    NSLog(@"%@", fileName);

    NSString *path = [[NSBundle mainBundle] pathForResource:fileName ofType:@"wav"];

    NSURL *fileURL = [[NSURL alloc] initFileURLWithPath: path];

    self.theAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:NULL];

    self.theAudio.volume = 1.0;

    self.theAudio.delegate = self;

    [self.theAudio prepareToPlay];

    [self.theAudio play];

}
person bndouglas    schedule 04.10.2012
comment
Если вы используете слабое свойство (или локальную переменную) и используете ARC, iOS обнаружит, что нет сильных указателей на объект AVAudioPlayer, и освободит его, прежде чем вы захотите удалить объект. Строгий указатель сохраняет объект, предотвращая его удаление, пока вы явно не обнуляете свойство. - person Steve Liddle; 27.11.2012