web-dev-qa-db-de.com

Audio-iOS-Ziel-C abspielen

Ich versuche, eine Audiodatei in meiner iOS-App abzuspielen. Dies ist mein aktueller Code

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

Ich habe gerade ein paar andere Beiträge geprüft, aber alle machen im Allgemeinen dasselbe. Ich erhalte keine Fehlermeldung, höre jedoch kein Audio auf dem Simulator oder Gerät.

Dies ist der Pfad, den ich für die Audiodatei im Simulator bekomme

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

Jede Hilfe wird geschätzt! 

23
Lagoo87

Möglicherweise sollten Sie versuchen, die NSBundle-Methode pathForResource:ofType:-Methode zu verwenden, um den Pfad zur Datei zu erstellen. 

Der folgende Code sollte eine Audiodatei erfolgreich abspielen. Ich habe es nur mit einem mp3 verwendet, aber ich kann mir vorstellen, dass es auch mit m4a funktionieren sollte. Wenn dieser Code nicht funktioniert, können Sie versuchen, das Format der Audiodatei zu ändern. Für diesen Code befindet sich die Audiodatei im Hauptverzeichnis des Projekts.

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

BEARBEITEN

Ok, also probiere es aus:

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

Stellen Sie außerdem sicher, dass Sie die richtigen Importe durchführen:

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

Sie müssen einen strong - Verweis auf 'AVAudioPlayer' speichern.

@property (strong) AVAudioPlayer *audioPlayer;

Wenn Sie sicher sind, dass sich Ihre Audiodatei in den folgenden Ressourcen befindet, sollte sie abgespielt werden.

Projekt> Phasen erstellen> Kopieren

27

Zum Abspielen einer Datei mit der Erweiterung .caf, .m4a, .mp4, .mp3, .wav, .aif


Laden Sie die folgenden zwei Dateien von GitHub herunter.

SoundManager.h
SoundManager.m

Fügen Sie diese Dateien Ihrem Projekt hinzu

Hinzufügen von Audiodateien zum Ressourcenordner ( Beispieldateien )

mysound.mp3, song.mp3

Importieren Sie die Header-Datei in die gewünschte Datei

#import "SoundManager.h"

Fügen Sie die folgenden zwei Zeilen in - (void) viewDidLoad hinzu.

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

Verwenden Sie die folgende Zeile, um den Sound abzuspielen (mysound.mp3)

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

Verwenden Sie die folgende Zeile, um den Ton zu stoppen (mysound.mp3)

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

Sie können auch Musik (song.mp3) als abspielen

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

Und kann Musik aufhören wie

[[SoundManager sharedManager] stopMusic];

Complete Die Dokumentation ist auf GitHub

20
Salim

Importieren Sie zuerst dieses Framework in Ihre Datei

#import <AVFoundation/AVFoundation.h>

Dann deklarieren Sie eine Instanz von 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

Schnell 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

So spielen Sie Ihre Bundle-Audiodatei mit dem folgenden Code ab, wenn Sie die System-Sound-ID erstellen

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

Sie können den Ton mit dem folgenden Code abspielen

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

Um dies zu erreichen, muss das Framework in Ihren Xcode eingefügt werden 

AudioToolbox

Schließlich müssen die folgenden Header-Dateien in den Controller importiert werden

#import AudioToolbox/AudioToolbox.h
#import AudioToolbox/AudioServices.h
0
appsign

Aktualisiert für Swift 4 Spielen aus dem Hauptpaket - Nur für iOS 11

import AVFoundation

var player: AVAudioPlayer?

Mit dem folgenden Code wird die Sounddatei geladen und abgespielt. Falls erforderlich, wird ein Fehler ausgegeben.

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