J'essaie de faire jouer un fichier audio dans mon application iOS. Ceci est mon code actuel
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];
Je vérifie beaucoup d'autres publications, mais elles font généralement la même chose. Je ne reçois pas d'erreur, mais je n'entends aucun son jouer sur le simulateur ou l'appareil.
Ceci est le chemin que je reçois pour le fichier audio sur le simulateur
/Users/username/Library/Application Support/iPhone Simulator/5.1/Applications/long-numbered-thing/BookAdventure.app/test.m4a
Toute aide est appréciée!
Vous devriez peut-être essayer d'utiliser la méthode NSBundle
, pathForResource:ofType:
pour créer le chemin d'accès au fichier.
Le code suivant doit correctement lire un fichier audio. Je ne l'ai utilisé qu'avec un mp3
, mais j'imagine que cela devrait également fonctionner avec m4a
. Si ce code ne fonctionne pas, vous pouvez essayer de changer le format du fichier audio. Pour ce code, le fichier audio se trouve dans le répertoire principal du projet.
/* 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];
Ok, alors essayez ceci:
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];
Assurez-vous également que vous importez correctement:
#import <AudioToolbox/AudioToolbox.h>
#import <AVFoundation/AVFoundation.h>
Vous devez stocker une référence strong à 'AVAudioPlayer'
@property (strong) AVAudioPlayer *audioPlayer;
Et si vous êtes sûr que votre fichier audio se trouve dans la rubrique Bundle Resources, il devrait jouer.
Projet> Phases de construction> Copier
Pour lire un fichier avec l'extension .caf, .m4a, .mp4, .mp3, .wav, .aif
Téléchargez les deux fichiers suivants depuis GitHub
SoundManager.h
SoundManager.m
Ajouter ces fichiers à votre projet
Ajoutez également des fichiers audio au dossier de ressources ( exemples de fichiers )
mysound.mp3, song.mp3
Importer le fichier d'en-tête dans le fichier souhaité
#import "SoundManager.h"
Et ajoutez les deux lignes suivantes dans - (void) viewDidLoad
[SoundManager sharedManager].allowsBackgroundMusic = YES;
[[SoundManager sharedManager] prepareToPlay];
Utilisez la ligne suivante pour jouer du son (mysound.mp3)
[[SoundManager sharedManager] playSound:@"mysound" looping:NO];
Utilisez la ligne suivante pour arrêter le son (mysound.mp3)
[[SoundManager sharedManager] stopSound:@"mysound"];
Aussi, vous pouvez jouer de la musique (song.mp3) en tant que
[[SoundManager sharedManager] playMusic:@"song" looping:YES];
Et peut être arrêter la musique comme
[[SoundManager sharedManager] stopMusic];
Complete La documentation est sur GitHub
Importez d'abord ce cadre dans votre fichier
#import <AVFoundation/AVFoundation.h>
Puis déclarez une instance de 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];
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()
Pour lire votre fichier audio de bundle en utilisant le code ci-dessous si vous générez l'ID de son système
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]];
}
Vous pouvez jouer le son en utilisant le code ci-dessous
AudioServicesPlaySystemSound([[alarmToneIdList objectAtIndex:row]unsignedLongValue]);
Pour ce faire, le cadre ci-dessous doit être ajouté à votre Xcode.
AudioToolbox
Enfin, les fichiers d'en-tête doivent être importés dans le contrôleur.
#import AudioToolbox/AudioToolbox.h
#import AudioToolbox/AudioServices.h
Mise à jour pour Swift 4 Lecture à partir du paquet principal - iOS 11 uniquement
import AVFoundation
var player: AVAudioPlayer?
Le code suivant charge le fichier audio et le lit, en renvoyant une erreur si nécessaire.
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)
}