2017-11-12 2 views
0

viewDidLoad 함수 내의 다른 버튼에 오디오를로드하려고합니다. 그러나,이 특정 삶에 대한 내 응용 프로그램 충돌이AVAudioPlayer 많이로드되는 오디오, 기존 경로가 지정되었습니다.

가 스레드 1 : 치명적인 오류 : 예기치 않게 주석하는 옵션 값을

override func viewDidLoad() { 
    annotateKeys() 
    print(constructedArrayOfNotes) 


    for key in constructedArrayOfNotes { 
     let path = Bundle.main.path(forResource: key, ofType: "mp3") 
     do { 
      try player = AVAudioPlayer(contentsOf: URL(fileURLWithPath: path!)) 
      player.prepareToPlay() 
      audioPlayers.append(player) 
     } catch { 
      print("error") 
     } 

    } 

을 풀기 동안 nil을 발견 constructedArrayOfNotes

오디오의 형식의 배열을 만듭니다 파일이이 annotateKeys가

를 함수 PIANO_C3.mp3

이다

이 322,853,210 내가 내가 잘못 정확히 모르겠지만 내가 경로를 추측하고있어 정확한 중 하나를하지 않거나 엑스 코드는 찾을 수없는 오디오 파일이

enter image description here

처럼 보일 것입니다 오디오 파일.

도움을 주시면 감사하겠습니다.

이것은 path이 키가 올바르게 설정되지 의미 어떤 점에서 전무되기 때문에 더 코드

var audioPlayers = [AVAudioPlayer]() 

var player = AVAudioPlayer() 




// An array with notes C through B is sequenced twice in order to 
// traverse the left and right keyboard. 
let arrayOfNotes = ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B", "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"] 

var constructedArrayOfNotes = ["","","","","","","","","","","","","","","","","","","","","","","",""] 

답변

0

입니다. 이 기능을 다음으로 바꾸십시오.

for key in constructedArrayOfNotes { 
     if let path = Bundle.main.path(forResource: key, ofType: "mp3") { 
     do { 
      try player = AVAudioPlayer(contentsOf: URL(fileURLWithPath: path)) 
      player.prepareToPlay() 
      audioPlayers.append(player) 
     } catch { 
      print("error") 
     } 
     } 
    } 

키가 재생되지 않는지 확인하십시오.

+0

나는 이것을 시도했지만 빈 audioPlayers 배열이 발생했습니다. – buttonSmasher96

+0

당신의'arrayOfNotes'와'leftSideOfPiano' /'rightSideOfPiano'는 무엇입니까 – AndreiVataselu

+0

그것은 현재 양면의 피아노 옥타브입니다 – buttonSmasher96

관련 문제