web-dev-qa-db-fra.com

Lecture audio iOS Objective-C

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! 

23
Lagoo87

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];

MODIFIER

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>
53
bddicken

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

27
Mustafa Karakuş

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

20
Salim

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];
3
Anooj VM

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()
0
mohammad shahid

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
0
appsign

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)
    }
0
Niall Kiddle