我使用的是AVFoundation框架。每当播放器播放缓冲区时,我的背景音乐就会被停止,所以我使用下面的代码允许它继续播放,而不管AVFoundation播放器是什么。
try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord, with: [.mixWithOthers,.allowBluetooth])
try audioSession.setMode(AVAudioSessionModeDefault)
try audioSession.setActive(true)它确实有效,但问题是背景音乐的质量受到了极大的影响。当AVPlayer播放缓冲器时,音乐不再有低音效果。
我想在使用AVPlayer时不受干扰地播放背景音乐。有可能吗?
update:如果有人想检查,我添加了完整的代码。在使用此代码时,一旦应用程序打开或会话被激活,就可以感觉到背景itune音乐的差异。
class ViewCosdfntroller: UIViewController {
var engine = AVAudioEngine()
let audioSession = AVAudioSession.sharedInstance()
let player = AVAudioPlayerNode()
let mixer = AVAudioMixerNode()
override func viewDidLoad() {
super.viewDidLoad()
do {
try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord, with: [.mixWithOthers,.allowBluetooth])
try audioSession.setMode(AVAudioSessionModeDefault)
try audioSession.setActive(true)
} catch {
}
let input = engine.inputNode
let bus = 0
let inputFormat = input.outputFormat(forBus: bus)
let recordingFormat = AVAudioFormat(commonFormat: .pcmFormatFloat32, sampleRate: 11025.0, channels: 1, interleaved: false)
engine.attach(player)
engine.attach(mixer)
engine.connect(input, to: mixer, format: input.outputFormat(forBus: 0))
engine.connect(player, to: engine.mainMixerNode, format: recordingFormat)
mixer.installTap(onBus: bus, bufferSize: AVAudioFrameCount(inputFormat.sampleRate * 0.4), format: inputFormat, block: { (buffer: AVAudioPCMBuffer!, time: AVAudioTime!) -> Void in
let Converter:AVAudioConverter = AVAudioConverter.init(from: inputFormat, to: recordingFormat!)!
let newbuffer = AVAudioPCMBuffer(pcmFormat: recordingFormat!,frameCapacity: AVAudioFrameCount((recordingFormat?.sampleRate)! * 0.4))
let inputBlock : AVAudioConverterInputBlock = { (inNumPackets, outStatus) -> AVAudioBuffer? in
outStatus.pointee = AVAudioConverterInputStatus.haveData
let audioBuffer : AVAudioBuffer = buffer
return audioBuffer
}
var error : NSError?
Converter.convert(to: newbuffer!, error: &error, withInputFrom: inputBlock)
self.player.scheduleBuffer(newbuffer!)
})
do {
try! engine.start()
player.play()
} catch {
print(error)
}
}
}发布于 2018-05-23 16:39:32
除非这是一些奇怪的混合怪癖,否则您报告的质量变化可能只是记录类别将默认的音频输出设备更改为微小的、微小的接收器(因为电话,不要问)。通过将.defaultToSpeaker添加到setCategory()调用中,重写此行为:
try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord, with: [.mixWithOthers,.allowBluetooth, .defaultToSpeaker])发布于 2018-05-23 07:43:45
我想你需要这个:
try audioSession.setCategory(AVAudioSessionCategoryAmbient)文档:https://developer.apple.com/documentation/avfoundation/avaudiosessioncategoryambient
当您使用此类别时,来自其他应用程序的音频与您的音频混合。
https://stackoverflow.com/questions/50482515
复制相似问题