Play Audio iOS Objective-C

后端 未结 7 1258
南旧
南旧 2020-11-30 00:25

I\'m trying to get an audio file playing in my iOS app. This is my current code

NSString *soundFilePath = [NSString stringWithFormat:@\"%@/test.m4a\", [[NSBu         


        
相关标签:
7条回答
  • 2020-11-30 00:31

    You need to store a strong reference to 'AVAudioPlayer'

    @property (strong) AVAudioPlayer *audioPlayer;
    

    And if you are sure that your audio file is in following Bundle Resources, it should play.

    Project>Build Phases>Copy

    0 讨论(0)
  • 2020-11-30 00:32

    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 讨论(0)
  • 2020-11-30 00:37

    To play file with extension .caf, .m4a, .mp4, .mp3,.wav, .aif


    Download following two files from GitHub

    SoundManager.h
    SoundManager.m
    

    Add these files to your project

    Also add audio files to resource folder (sample files)

    mysound.mp3, song.mp3
    

    Import header file in desired file

    #import "SoundManager.h"
    

    And add following two lines in -(void)viewDidLoad

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

    Use following line to play sound (mysound.mp3)

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

    Use following line to stop the sound (mysound.mp3)

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

    Also you can play music (song.mp3) as

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

    And can be stop music as

    [[SoundManager sharedManager] stopMusic];
    

    Complete Documentation is on GitHub

    0 讨论(0)
  • 2020-11-30 00:37

    To play your bundle audio file using below code if you generate the system sound ID

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

    You can play the sound by using below code

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

    To achieve this below framework need to add in your Xcode

    AudioToolbox

    Finally below header files are needs to be import in controller

    #import AudioToolbox/AudioToolbox.h
    #import AudioToolbox/AudioServices.h
    
    0 讨论(0)
  • 2020-11-30 00:41

    Maybe you should try using the NSBundle method pathForResource:ofType: method to create the path to the file.

    The following code should successfully play an audio file. I have only used it with an mp3, but I imagine it should also work with m4a. If this code does not work, you could try changing the format of the audio file. For this code, the audio file is located in the main project directory.

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

    EDIT

    Ok, so try this:

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

    Also, make sure you do the proper imports:

    #import <AudioToolbox/AudioToolbox.h>
    #import <AVFoundation/AVFoundation.h>
    
    0 讨论(0)
  • 2020-11-30 00:41

    Updated for Swift 4 Playing from main bundle - iOS 11 only

    import AVFoundation
    
    var player: AVAudioPlayer?
    

    The following code loads the sound file and plays it, returning an error if necessary.

    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 讨论(0)
提交回复
热议问题