我的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);
第一行允许播放和录制,而其他行显然重新路由以使音量更大。
所有音频代码对我来说都是伏都教。
答案 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!")
}