xcode Objective-C 无法使用 AVAudioPlayer 播放声音

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/32707185/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-15 07:54:12  来源:igfitidea点击:

Objective-C can't play sound with AVAudioPlayer

iosobjective-cxcodeaudioavaudioplayer

提问by user979331

I am using XCode 7 with iOS 9 and I am trying to play a sound. I have been googling for a solution for days and I have tried every possible solution out there and nothing is working.

我在 iOS 9 上使用 XCode 7,我正在尝试播放声音。我一直在谷歌上搜索解决方案好几天了,我已经尝试了所有可能的解决方案,但没有任何效果。

Here is my code

这是我的代码

.h

。H

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

@interface ViewController : UIViewController <DTDeviceDelegate, AVAudioPlayerDelegate>
{

}

and here is my .m file:

这是我的 .m 文件:

 NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"autumn_leaves" ofType:@"m4a"];

    NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath];

    NSError *error;

    AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:soundFileURL
                                                                   error:&error];
    player.numberOfLoops = -1; //Infinite

    [player play];

and no sound, no errors, no warnings nothing at all

没有声音,没有错误,没有警告,什么都没有

soundFilePathand soundFileURLare not nil, same with player, they are getting populated. My phone volume is as loud as it can be.

soundFilePath并且soundFileURL不是nil,与玩家一样,他们越来越多。我的电话音量尽可能大。

I have also tried in .m file:

我也在 .m 文件中尝试过:

@property(strong, nonatomic) AVAudioPlayer *player;

self.myPlayer = [[AVAudioPlayer alloc]initWithContentsOfURL:fileURL error:&error];
[self.myPlayer play];

Also did not play sound and no errors.

也没有播放声音,也没有错误。

Here is a screenshot of my Resources folder:

这是我的资源文件夹的屏幕截图:

enter image description here

在此处输入图片说明

Please Help!

请帮忙!

回答by Bassl Kokash

Define AVAudioPlayer as a property, and it should work. You could implement the AVAudioPlayerDelegate if you want, its not a must.

将 AVAudioPlayer 定义为一个属性,它应该可以工作。如果需要,您可以实现 AVAudioPlayerDelegate,这不是必须的。

For detailed explanation check this answer https://stackoverflow.com/a/8415802/1789203

有关详细说明,请查看此答案https://stackoverflow.com/a/8415802/1789203

@interface ViewController ()
@property (nonatomic,strong)AVAudioPlayer *player;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"bush_god_bless" ofType:@"wav"];

    NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath];

    NSError *error;

    self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:soundFileURL
                                                                   error:&error];
    self.player.numberOfLoops = 0; //Infinite
    self.player.delegate  = self;
    [self.player play];


}
-(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
    NSLog(@"%d",flag);
}

回答by Idali

You need to set delegate to self before [player play];

[player play]前需要设置delegate为self;

player.delegate  = self;
[player play];