için Eşleşen Giriş ve Çıkış Donanımı Ayarları iOS için Core Audio kullanılarak çok basit bir ses efektleri zinciri oluşturmaya çalışıyorum. Şimdiye kadar simülatörde gayet iyi çalışan bir EQ - Sıkıştırma - Sınırlayıcı zincir uyguladık. Ancak, aygıtta, giriş ve çıkış donanım biçimlerindeki görünür uyumsuzluk nedeniyle düğümleri AVAudioEngine'a bağlarken uygulama çöküyor.AVAudioEngine
'com.apple.coreaudio.avfaudio', reason: 'required condition is false:
IsFormatSampleRateAndChannelCountValid(outputHWFormat)'
Temel bir örnek olarak Ses Grafiğim şu şekildedir.
Mic -> Limiter -> Main Mixer (and Output)
ve grafik üzerinde haricinde çöker
engine.connect(engine.inputNode!, to: limiter, format: engine.inputNode!.outputFormatForBus(0))
engine.connect(limiter, to: engine.mainMixerNode, format: engine.inputNode!.outputFormatForBus(0))
kullanılarak doldurulur. motorda, ses düğümleri bağlayan önce bir kAudioUnitErr_FormatNotSupported hata
'com.apple.coreaudio.avfaudio', reason: 'error -10868'
karıştırıcıya
engine.connect(engine.inputNode!, to: limiter, format: engine.inputNode!.outputFormatForBus(0))
engine.connect(limiter, to: engine.mainMixerNode, format: limiter.outputFormatForBus(0))
uygulama çöker bağlanırken yerine sınırlayıcı biçimini kullanmak için, inputNode 1 kanalı ve bir yer alır 44.100Hz'lik örnekleme hızı, outputNode'un 0 kanalı ve 0Hz'lik bir örnek oranı vardır (outputFormatForBus (0) özelliği kullanılarak çıkarılır). Ancak bunun nedeni, çıkış karıştırıcısına henüz bağlanmış bir düğüm olmadığı için olabilir. tercih edilen örnekleme oranını AVAudioSession olarak ayarlamak fark yaratmamıştır.
Burada eksik olduğum bir şey var mı? Ben (. RecordPermission()AVAudioSession.sharedInstance() kullanılarak doğrulandı) Mikrofon erişimi var ve kaydetmek için AVAudioSession modunu ayarladıktan (AVAudioSession.sharedInstance(). SetCategory (AVAudioSessionCategoryRecord)).
let limiter = AVAudioUnitEffect(audioComponentDescription:
AudioComponentDescription(
componentType: kAudioUnitType_Effect,
componentSubType: kAudioUnitSubType_PeakLimiter,
componentManufacturer: kAudioUnitManufacturer_Apple,
componentFlags: 0,
componentFlagsMask: 0))
engine.attachNode(limiter)
ve motor
var engine = AVAudioEngine()
Dediğim gibi değişken bir küresel, sınıftır bu simülatörü kullanarak mükemmel çalışıyor, (ve:
sınırlayıcı şöyle başlatıldı bir AVAudioUnitEffect olduğunu Mac'in varsayılan donanımı), ancak iOS8 & iOS9'daki çeşitli iPad'lerde sürekli olarak çöküyor. Sadece çıkış mikser Burada
do {
file = try AVAudioFile(forWriting: NSURL.URLToDocumentsFolderForName(name: "test", WithType type: "caf")!, settings: engine.inputNode!.outputFormatForBus(0).settings)
} catch {}
engine.connect(player, to: engine.mainMixerNode, format: file.processingFormat)
bir oyuncu için mikrofon girişi besleyen süper temel örnek çalışma var outputNode 2 kanalı ve 44.100Hz örnekleme oranına sahip iken inputNode, 1 kanal ve 44.100Hz örnekleme oranına sahiptir ama hiçbir uyumsuzluk görülüyor. Dolayısıyla, sorun, AVAudioUnitEffect'in çıkış karıştırıcısına bağlandığı yol olmalıdır.
Herhangi bir yardım büyük memnuniyetle karşılanacaktır.
Bunu hiç anladın mı? – user3344977
AVAUdio arkada korkunç bir acı, belgelerin yetersiz yazılmış ve motor gerçekten belirsiz kurallara ve yararsız hata kodlarına göre çalışıyor. Bu berbat, ama ileriye doğru sürmeliyiz. Çözersem cevap vereceğim. – Josh
Bunu yeniden üreten bir projeniz var mı? –