2017-01-05 7 views
2

Я создаю игру, которая использует структуру AudioKit для определения частоты звука, получаемого микрофоном. Я поставил его следующим образом:Использование звука AudioKit и SpriteKit одновременно

import SpriteKit 
import AudioKit 

class GameScene: SKScene { 
    var mic : AKMicrophone! 
    var tracker : AKFrequencyTracker! 
    var silence : AKBooster! 
    let mixer = AKMixer() 

    override func didMove(to view: SKView) { 
     mic = AKMicrophone() 
     tracker = AKFrequencyTracker.init(mic) 
     silence = AKBooster(tracker, gain: 0) 
     mixer.connect(silence) 
     AudioKit.output = mixer 
     AudioKit.start() 
    } 
} 

Я хотел бы также использовать SKAction.playAudioFileNamed для воспроизведения звуковых эффектов и т.д., но когда я использую его, громкость воспроизведения является очень низкой. Я предполагаю, что это имеет какое-то отношение к узлу микшера сцены и AKMixer? Воспроизведение звуковых файлов с использованием AudioKit намного сложнее, чем мне нужно.

Должен ли я сделать расширение SKScene? Помощь очень ценится!

+0

Я на самом деле просто протестировал его с помощью наушников, и уровни нормальны, используя SKAction.playAudioFileNamed. Должно быть, это связано с защитой обратной связи или чем-то еще? – drockFai

+0

Возможно, звук направляется в неправильный динамик? Я не знаю этого наверняка, но некоторые люди упомянули, что звук может быть перенаправлен на динамик рингтона вместо этого? Возможно, AudioKit делает основной динамик недоступным, поэтому комплект спрайтов делает все возможное? –

+0

Вы правы! Не могу поверить, что я не заметил, что он идет через наушник телефона, а не динамик, когда наушники не подключены. Есть ли способ явно подключить звук SKScene к AKMixer? – drockFai

ответ

4

Кажется, что Аурелиус был прав в том, что маршрут вывода AudioSession направлялся на гарнитуру. Я до сих пор не знаю, почему это было так, но переопределение и настройка выходной работала следующим образом:

 let session = AVAudioSession() 

    do { 
     try session.overrideOutputAudioPort(AVAudioSessionPortOverride.speaker) 
    } catch { 
     print("error setting output") 
    } 

Это должно быть сделано после инициализации компонентов AudioKit. Если есть лучший способ сделать это, пожалуйста, дайте мне знать!

 Смежные вопросы

  • Нет связанных вопросов^_^