我正试图通过耳机扬声器播放音频并且工作正常。相同的代码在以下情况下不起作用。
这是我通过耳机播放音频的代码。
-(void)initialAVaudioPlayer
{
if (player==nil) {
NSError *error = nil;
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayAndRecord error:&error];
[session setActive: YES error:nil];
AVAudioSessionPortDescription *routePort = session.currentRoute.outputs.firstObject;
NSString *portType = routePort.portType;
if ([portType isEqualToString:@"Receiver"]) {
[session overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:&error];
} else {
[session overrideOutputAudioPort:AVAudioSessionPortOverrideNone error:&error];
}
NSString *path;
NSError *err;
NSString *name;
name = @"referenceaudio";
path = [[NSBundle mainBundle] pathForResource:name ofType:@"wav"];
if ([[NSFileManager defaultManager]fileExistsAtPath:path]) {
NSURL *url = [NSURL fileURLWithPath:path];
player = [[AVAudioPlayer alloc]initWithContentsOfURL:url error:&err];
if (!err) {
player.numberOfLoops = -1;
}
else{
//NSLog(@"%@",[err description]);
}
}
}
}
这是代码,用户按取消,
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
NSLog(@"here");
[self dismissViewControllerAnimated:YES completion:nil];
}
答案 0 :(得分:3)
更改取消按钮的音频路径解决问题
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
NSError *error = nil;
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayback error:&error];
[session overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil];
[session setActive: YES error:nil];
videoPicker = nil;
[self dismissViewControllerAnimated:YES completion:nil];
}
答案 1 :(得分:1)
这里是将AVAudioSession路由到Ear Speaker(内置扬声器)或Swift 4.2,iOS 12,SDK 11的底部扬声器的解决方案:
1)在您的项目中创建一个名为AudioSession的文件,并实现这3个功能。
import AVFoundation
import UIKit
let audioSession = AVAudioSession.sharedInstance()
func configureAudioSessionCategory() {
print("Configuring audio session")
do {
try audioSession.setCategory(AVAudioSession.Category.playAndRecord, mode: AVAudioSession.Mode.voiceChat)
try audioSession.overrideOutputAudioPort(AVAudioSession.PortOverride.none)
print("AVAudio Session out options: ", audioSession.currentRoute)
print("Successfully configured audio session.")
} catch (let error) {
print("Error while configuring audio session: \(error)")
}
}
func configureAudioSessionToSpeaker(){
do {
try audioSession.overrideOutputAudioPort(AVAudioSession.PortOverride.speaker)
try audioSession.setActive(true)
print("Successfully configured audio session (SPEAKER-Bottom).", "\nCurrent audio route: ",audioSession.currentRoute.outputs)
} catch let error as NSError {
print("#configureAudioSessionToSpeaker Error \(error.localizedDescription)")
}
}
func configureAudioSessionToEarSpeaker(){
let audioSession:AVAudioSession = AVAudioSession.sharedInstance()
do { ///Audio Session: Set on Speaker
try audioSession.overrideOutputAudioPort(AVAudioSession.PortOverride.none)
try audioSession.setActive(true)
print("Successfully configured audio session (EAR-Speaker).", "\nCurrent audio route: ",audioSession.currentRoute.outputs)
}
catch{
print("#configureAudioSessionToEarSpeaker Error \(error.localizedDescription)")
}
}
2)在当前的视图控制器viewWillAppears中显示您正在播放音频,请致电:
configureAudioSessionCategory()
3)如果要在扬声器上放置音频,请调用功能:
configureAudioSessionToSpeaker()
如果要在麦克风上放置音频,请调用功能:
configureAudioSessionToEarSpeaker()
*我会做一些标签,因为它是swift 4.2的新标签,在您搜索此主题时在Google或此处很难(或什么也找不到)。
标签:到音频扬声器的音频会议,到顶部扬声器,听筒扬声器,默认扬声器,底部扬声器,扬声器的音频路由。