在IOS上播放声音

3
当按下按钮时,我希望播放一个声音。我尝试了以下代码:

-(void)PlayClick
{
NSURL* musicFile = [NSURL fileURLWithPath:[[NSBundle mainBundle]
                                           pathForResource:@"BubblePopv4"
                                           ofType:@"mp3"]];
AVAudioPlayer *click = [[AVAudioPlayer alloc] initWithContentsOfURL:musicFile error:nil];
[click play];
}

…并且导入了 #import <AudioToolbox/AudioToolbox.h>#import <AVFoundation/AVFoundation.h>

但出于某些原因,声音没有播放。名称和类型都正确,因为我添加到项目中的文件是 "BubblePopv4.mp3"。iPad 上的音量已经调到最大,而且在 iTunes 上声音也播放得很好!有什么想法吗?


顺便说一下,我可以从 NSLog 中看出代码的名称。 - Alessandro
iPhone是否处于静音(震动)模式?如果我没记错的话,AVAudioPlayer在这种模式下不会播放。 - Larme
3个回答

3

不要管它,在同一个类中完成,对你来说这很简单:

- (void)playSoundWithOfThisFile:(NSString*)fileNameWithExtension {

    // Eg - abc.mp3
    AVAudioPlayer *audioPlayerObj;

    NSString *filePath;

    filePath= [[NSString stringWithFormat:@"%@", [[NSBundle mainBundle] resourcePath]] retain];

    if(!audioPlayerObj)
        audioPlayerObj = [AVAudioPlayer alloc];

        NSURL *acutualFilePath= [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/%@",filePath,fileNameWithExtension]];

        NSError *error;

        [audioPlayerObj initWithContentsOfURL:acutualFilePath error:&error];

        [audioPlayerObj play];

}

是的[self playSoundWithOfThisFile:@"abcd.mp3"]; - Reno Jones
我已经做了,但是它不起作用!!代码除了 [audioPlayerObj initWithContentsOfURL:acutualFilePath error:&error]; 中的一个错误之外没有任何错误,该错误是“表达式结果未使用”。 - Alessandro
当使用 NSLog(@"ha: %@", fileNameWithExtension); 时,它会输出:ha: BubblePopv4.mp3,这是正确的。 - Alessandro
不,我的设备音量已经调到最大了,其他应用程序的所有音频都可以正常播放。 - Alessandro
仍然存在着“表达式结果未使用”的错误。 - Alessandro
显示剩余6条评论

1

请执行以下操作:

在.h文件中:

Use this delegate - <AVAudioPlayerDelegate>

#import "AVFoundation/AVAudioPlayer.h"

AVAudioPlayer *audioPlayerObj;

NSString *filePath;

在.m文件中,在某些方法中:
   filePath= [[NSString stringWithFormat:@"%@", [[NSBundle mainBundle] resourcePath]] retain];

    if(!audioPlayerObj)
        audioPlayerObj = [AVAudioPlayer alloc];

并添加这两种方法:

- (id)initWithFileName:(NSString*)fileNameWithExtension {

    if ((self = [super init])) {

        NSURL *acutualFilePath= [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/%@",filePath,fileNameWithExtension]];

        NSError *error;

        [audioPlayerObj initWithContentsOfURL:acutualFilePath error:&error];

    }
    return self;
}

- (void)playSound {
    [audioPlayerObj play];
}

您可以将文件名传递给此方法 - initWithFileName 然后调用playSound方法为您播放声音。
希望这可以帮助到您。

我该如何从我的视图控制器中调用控制器? - Alessandro

0

将 URL 初始化替换为:

NSURL* musicFile = [NSURL initFileURLWithPath:[[NSBundle mainBundle]
                                              pathForResource:@"BubblePopv4"
                                              ofType:@"mp3"]];

这给我一个错误“没有选择器'initfileURLwithPath'的类方法” - Alessandro
它是'initFileURLWithPath'而不是'initfileURLwithPath'。 - Basem Saadawy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接