해결된 질문
작성
·
309
답변 2
2
안녕하세요, 정상원님.
마지막까지 학습하시고 좋은 질문 주셔서 감사합니다.
덕분에 저의 실수를 보완할 수 있는 설명을 드리게 되어서 다행으로 생각합니다.
먼저, 제가 착각한 부분은 사운드의 특성과 변수의 Scope에 대한 것 입니다.
사운드 파일은 그 특성상 재생에 시간이 걸립니다.
하지만 함수 내에 선언한 변수의 경우, 그 함수의 실행이 끝나면 바로 메모리에서 릴리즈 되어 버립니다.
변수 내에서 사운드를 재생한 경우, 사운드 재생에 대한 명령을 실행하자 마자
사운드 파일이 메모리에서 사라져 버려서 더 이상 재생을 못하게 된 경우 입니다.
위 그림과 같이 사운드가 재생되는 시간동안 그 함수에 머무르게 하면 사운드가 끝까지 재생되는 것을 확인할 수 있습니다.
그래서 정상원님이 책의 코드와 동일하게 작성한 것 처럼,
뷰 컨트롤러 레벨에서 사운드 변수를 선언하면, 함수에서는 빠져 나오더라도 사운드 파일은 존재하고 있으므로
사운드 재생을 마무리 할 수 있었던 거죠.
보통 실제 앱 개발시 사운드 재생 관련한 기능을 구현할 때는 ,
SimpleSound.swift 내부에서처럼 AudioServicesPlaySystemSound() 함수를 바로 사용하는게 아니라AVAudioPlayer 등의 보다 하이레벨 API를 사용해 이러한 고려를 하지 않아도 되는 방식을 사용합니다.
이 부분은 책의 범위를 벗어나지만 AVFoundation을 참고하시기 바랍니다.
도움이 되셨길 바랍니다.
감사합니다.
0
자문 자답입니다만..
교재로 쓰인 책에서는 소리변수는 따로 위로 빼서 작성하더라구요.
혹시나 해서 그대로 쳐보니 정상적으로 작동(소리남)하였습니다.
강의에서 작성하신 코드대로 하면 왜 안되는 것일까요?
let의 사용법에 관련된 것인가요...?