Воспроизвести аудио 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
Любая помощь приветствуется!
Ответы
Ответ 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()