AVAudioPlayer在模拟器中工作,但不在设备上

时间:2010-06-15 17:26:41

标签: iphone objective-c avaudioplayer

我的mp3播放代码是:

NSError *error;
soundObject = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:audioPathString] error:&error];
if (soundObject == nil) NSLog(@"%@", [error description]);
soundObject.delegate = self;
soundObject.numberOfLoops = 0;
soundObject.volume = 1.0;
NSLog(@"about to play");
[soundObject prepareToPlay];
[soundObject play];
NSLog(@"[soundObject play];");

mp3曾经很好玩,而且仍在模拟器上。但不在设备上。

我最近在软件中添加了一些录音代码(不是我的)。它使用的AudioQueue东西略微超出我的范围。这与AVAudioPlayer有冲突吗?或者可能是什么问题?我注意到,一旦音频录制代码开始工作,我就无法再调整设备上的音量,所以它可能会阻止音频播放吗?


修改

解决方案似乎是把它放在我的代码中。我把它放在applicationDidFinishLaunching:

[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayAndRecord error: nil]; 
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride);

第一行允许播放和录制,而其他行显然重新路由以使音量更大。

所有音频代码对我来说都是伏都教。

7 个答案:

答案 0 :(得分:13)

确保您的iPhone“Ringer Button”未显示红色。

答案 1 :(得分:2)

我知道的一些代码有效:

- (void)playOnce:(NSString *)aSound {

// Gets the file system path to the sound to play.
NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:aSound ofType:@"caf"];  

// Converts the sound's file path to an NSURL object
NSURL *soundURL = [[NSURL alloc] initFileURLWithPath: soundFilePath];
self.soundFileURL = soundURL;
[soundURL release];

AVAudioPlayer * newAudio=[[AVAudioPlayer alloc] initWithContentsOfURL: soundFileURL error:nil];  
self.theAudio = newAudio; // automatically retain audio and dealloc old file if new file is loaded

[newAudio release]; // release the audio safely

[theAudio prepareToPlay];

// set it up and play
[theAudio setNumberOfLoops:0];
[theAudio setVolume: volumeLevel];
[theAudio setDelegate: self];
[theAudio play];

}

答案 2 :(得分:1)

这是一个快速,简单的尝试:

我遇到了与图像和声音类似的问题。 iPhone是帽子敏感的,甚至是文件扩展名,但模拟器不是。除了soundObject之外,请检查NSURL对象!= nil。

您可能还想尝试[[NSBundle mainBundle] URLForResource:@"sound" ofType:@"mp3"];并确保将文件复制到YourApp.app/Resources/下的.app

-Stephen

答案 3 :(得分:0)

当某些东西在模拟器上运行而不在设备上时,首先要做的是重启设备并检查。有时重启设备对我有用,节省了很多时间。否则你可以开始调试

答案 4 :(得分:0)

我在模拟器中有声音,但在设备上没有声音。它在我设置AVAudioPlayer委托时开始工作

答案 5 :(得分:0)

如果您在iOS 10模拟器上运行代码,它不会要求安全权限,但是,如果您在ios 10设备上运行代码,则需要在plist中添加音频权限密钥。添加隐私 - plist中的麦克风使用说明键。

答案 6 :(得分:0)

我在代码中设置了以下行。

     do { 
            try AVAudioSession.sharedInstance().setCategory(.playAndRecord)
        } catch {
            print ("There is an issue with this code!")
        }