Подтвердить что ты не робот

Воспроизвести аудио iOS Objective-C

Я пытаюсь получить аудиофайл в моем приложении iOS. Это мой текущий код

NSString *soundFilePath = [NSString stringWithFormat:@"%@/test.m4a", [[NSBundle mainBundle] resourcePath]];

NSLog(@"%@",soundFilePath);
NSURL *fileURL = [[NSURL alloc] initFileURLWithPath: soundFilePath];

audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:nil];
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
[[AVAudioSession sharedInstance] setActive: YES error: nil];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

[audioPlayer setVolume:1.0];

audioPlayer.delegate = self;

[audioPlayer stop];
[audioPlayer setCurrentTime:0];
[audioPlayer play];

Я проверяю кучу других сообщений, но все они делают то же самое. Я не получаю сообщение об ошибке, но я не слышу никаких звуков на симуляторе или устройстве.

Это путь, который я получаю для аудиофайла на симуляторе

/Users/username/Library/Application Support/iPhone Simulator/5.1/Applications/long-numbered-thing/BookAdventure.app/test.m4a

Любая помощь приветствуется!

4b9b3361

Ответ 1

Возможно, вам нужно попробовать использовать метод NSBundle method pathForResource:ofType: для создания пути к файлу.

Следующий код должен успешно воспроизводить аудиофайл. Я использовал его только с mp3, но я полагаю, что он также должен работать с m4a. Если этот код не работает, вы можете попробовать изменить формат аудиофайла. Для этого кода звуковой файл находится в основном каталоге проекта.

/* Use this code to play an audio file */
NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"test"  ofType:@"m4a"];
NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath];

AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:soundFileURL error:nil];
player.numberOfLoops = -1; //Infinite

[player play];

ИЗМЕНИТЬ

Итак, попробуйте следующее:

NSString *soundFilePath = [NSString stringWithFormat:@"%@/test.m4a",[[NSBundle mainBundle] resourcePath]];
NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath];

AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:soundFileURL error:nil];
player.numberOfLoops = -1; //Infinite

[player play];

Кроме того, убедитесь, что вы делаете правильный импорт:

#import <AudioToolbox/AudioToolbox.h>
#import <AVFoundation/AVFoundation.h>

Ответ 2

Вам нужно сохранить ссылку strong на "AVAudioPlayer"

@property (strong) AVAudioPlayer *audioPlayer;

И если вы уверены, что ваш аудиофайл находится в следующих Bundle Resources, он должен играть.

Проект > Фазы сборки > Копировать

Ответ 3

Чтобы воспроизвести файл с расширением .caf,.m4a,.mp4,.mp3,.wav,.aif


Загрузите два файла из GitHub

SoundManager.h
SoundManager.m

Добавьте эти файлы в свой проект

Также добавьте аудиофайлы в папку ресурсов (примеры файлов)

mysound.mp3, song.mp3

Импортировать файл заголовка в желаемый файл

#import "SoundManager.h"

И добавьте следующие две строки в - (void) viewDidLoad

[SoundManager sharedManager].allowsBackgroundMusic = YES;
[[SoundManager sharedManager] prepareToPlay];

Используйте следующую строку для воспроизведения звука (mysound.mp3)

[[SoundManager sharedManager] playSound:@"mysound" looping:NO];

Используйте следующую строку, чтобы остановить звук (mysound.mp3)

[[SoundManager sharedManager] stopSound:@"mysound"];

Также вы можете воспроизводить музыку (song.mp3) в качестве

[[SoundManager sharedManager] playMusic:@"song" looping:YES];

И можно остановить музыку как

[[SoundManager sharedManager] stopMusic];

Завершено Документация находится на GitHub

Ответ 4

Сначала импортируйте эту фреймворк в свой файл

#import <AVFoundation/AVFoundation.h>

Затем объявите экземпляр AVAudioPlayer.

AVAudioPlayer *audioPlayer;

NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"Name of your audio file" 
                                                          ofType:@"type of your audio file example: mp3"];
NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath];
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundFileURL error:nil];
audioPlayer.numberOfLoops = -1;
[audioPlayer play];

Ответ 5

Чтобы воспроизвести аудиофайл вашего пакета, используя приведенный ниже код, если вы создаете идентификатор звука системы

for(int i = 0 ;i< 5;i++)
{
    SystemSoundID   soundFileObject;
    NSString *audioFileName = [NSString stringWithFormat:@"Alarm%d",i+1];

    NSURL *tapSound   = [[NSBundle mainBundle] URLForResource: audioFileName
                                            withExtension: @"caf"];

    // Store the URL as a CFURLRef instance
    CFURLRef soundFileURLRef = (__bridge CFURLRef) tapSound;

    // Create a system sound object representing the sound file.
    AudioServicesCreateSystemSoundID (

                                  soundFileURLRef,
                                  &soundFileObject
                                  );
    [alarmToneIdList addObject:[NSNumber numberWithUnsignedLong:soundFileObject]];
}

Вы можете воспроизводить звук, используя приведенный ниже код

AudioServicesPlaySystemSound([[alarmToneIdList objectAtIndex:row]unsignedLongValue]);

Для достижения этой ниже рамки необходимо добавить в свой Xcode

AudioToolbox

Наконец, ниже заголовочные файлы должны быть импортированы в контроллер

#import AudioToolbox/AudioToolbox.h
#import AudioToolbox/AudioServices.h

Ответ 6

Обновлено для Swift 4 Игра из основного пакета - только iOS 11

import AVFoundation

var player: AVAudioPlayer?

Следующий код загружает звуковой файл и воспроизводит его, возвращая при необходимости ошибку.

guard let url = Bundle.main.url(forResource: "test", withExtension: "m4a") else { return }

    do {
        try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
        try AVAudioSession.sharedInstance().setActive(true)

    guard let player = player else { return }

    player.play()

    } catch let error {
        // Prints a readable error
        print(error.localizedDescription)
    }

Ответ 7

Swift 4.2

var soundFilePath = "\(Bundle.main.resourcePath ?? "")/test.m4a"
var soundFileURL = URL(fileURLWithPath: soundFilePath)

var player = try? AVAudioPlayer(contentsOf: soundFileURL)
player?.numberOfLoops = -1 //Infinite

player?.play()