24

我正在尝试在我的 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

任何帮助表示赞赏!

4

7 回答 7

54

也许您应该尝试使用NSBundlemethodpathForResource: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>
于 2012-07-17T18:16:42.053 回答
30

您需要存储对“AVAudioPlayer”的引用

@property (strong) AVAudioPlayer *audioPlayer;

如果您确定您的音频文件在以下捆绑资源中,它应该可以播放。

项目>构建阶段>复制

于 2013-09-17T17:42:58.293 回答
21

播放扩展名为 .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 上

于 2013-09-23T11:48:00.280 回答
6

首先将此框架导入您的文件

#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];
于 2013-06-20T12:26:40.263 回答
0

如果您生成系统声音 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]];
}

您可以使用以下代码播放声音

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

为了实现这个下面的框架需要在你的 Xcode 中添加

音频工具箱

最后需要在控制器中导入以下头文件

#import AudioToolbox/AudioToolbox.h
#import AudioToolbox/AudioServices.h
于 2014-11-07T19:43:37.297 回答
0

更新了 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)
    }
于 2018-01-04T11:31:44.737 回答
0

斯威夫特 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()
于 2019-01-29T05:50:58.287 回答