gpt4 book ai didi

ios - AVAudioPlayer 在类外包时不播放

转载 作者:行者123 更新时间:2023-11-29 10:52:49 25 4
gpt4 key购买 nike

我对 iOS 开发比较陌生,但对(面向对象的)编程一般来说并不陌生。

我正在编写一种录音机应用程序,在这方面我需要您的帮助:我试图将 AVAudioPlayer 对象外包到一个额外的类 AudioPlayer 中,这样我就可以从不同的 Controller 访问它。我做了它应该做的一切,除了播放任何声音。这是我的问题的简化项目:

ViewController.m:

- (IBAction)playButtonPressed:(id)sender 
{
NSArray *pathComponents = [NSArray arrayWithObjects:[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject],@"AudioMemo.m4a",nil];
NSURL *fileURL = [NSURL fileURLWithPathComponents:pathComponents];

AudioPlayer *myPlayer = [[AudioPlayer alloc] init];
[myPlayer myPlayAudio:fileURL];
}

文件的其余部分是空的/标准的。

ViewController.h:

#import <UIKit/UIKit.h>
#import "AudioPlayer.h"

@interface ViewController : UIViewController

@property (strong, nonatomic) IBOutlet UIButton *playButton;

- (IBAction)playButtonPressed:(id)sender;

@end

AudioPlayer.m:

#import "AudioPlayer.h"

@implementation AudioPlayer

@synthesize aPlayer;

-(id) myPlayAudio:(NSURL *)myURL
{
NSLog(@"in myPlayAudio; before play");

NSError *err = nil;

AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryPlayback error:NULL];
[audioSession setActive:YES error:&err];
if(err)
{
NSLog(@"%@",err);
}
aPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:myURL error:&err];
if(err)
{
NSLog(@"%@",err);
}
[aPlayer play];

NSLog(@"in myPlayAudio; after play");

//[audioSession setActive:NO error:&err];

return err;
}

@end

AudioPlayer.h:

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

@interface AudioPlayer : NSObject <AVAudioPlayerDelegate> {
AVAudioPlayer *aPlayer;
}

@property (nonatomic, strong) AVAudioPlayer *aPlayer;

-(id) myPlayAudio:(NSURL *) myURL;

@end

我添加了 AudioToolbox Framework,在 .plist 文件中激活了 iTunes 文件共享,并将 AudioMemo.m4a 文件加载到文档文件夹。

它显示了两个 NSLog(播放前 + 播放后),但没有发出任何声音。我知道我没有启用 iPhone 的扬声器,我想在这种情况下保持简单。当然,我检查了音量、静音模式等。

当我将所有内容都本地化(将所有内容都放在 ViewController.m 中)时,就像网上的大多数教程一样,它工作正常。

我搜索过,但之前没有发现这个问题,所以如果有人能帮助我,我将不胜感激。

最佳答案

我看到你正在使用 ARC,所以这个对象:

AudioPlayer *myPlayer = [[AudioPlayer alloc] init];

在您分配后不久即被释放。将它保存在属性而不是局部变量中,它应该可以工作。

关于ios - AVAudioPlayer 在类外包时不播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19706441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com