Swift(스위프트): mp3 등 소리 파일 재생하기 (스토리보드)

앱에서 MP3, WAV 등 음악 파일 또는 소리 효과음 파일을 재생하려면 어떻게 해야 할까요?

방법은 아래와 같습니다.

 

1) 뷰 컨트롤러에 import AVFoundation를 추가합니다.

import AVFoundation

 

2) 소리 파일을 드래그 앤 드롭으로 프로젝트 내에 추가합니다.

Finish 버튼 클릭

 

3) 뷰 컨트롤러에 AVAudioPlayer 타입의 멤버 변수를 추가합니다.

class ViewController: UIViewController {
    
    private var player: AVAudioPlayer?

 

4) 재생 및 정지 함수를 추가합니다.

func playSound() {
    let soundName = "파일이름"

    // forResource: 파일 이름(확장자 제외) , withExtension: 확장자(mp3, wav 등) 입력
    guard let url = Bundle.main.url(forResource: soundName, withExtension: "mp3") else {
        return
    }
    
    do {
        player = try AVAudioPlayer(contentsOf: url, fileTypeHint: AVFileType.mp3.rawValue)
        player?.numberOfLoops = -1
        player?.play()
    } catch let error {
        print(error.localizedDescription)
    }
}

func stopSound() {
    player?.stop()
}
  • url
    • 저장된 소리 파일의 URL을 불러옵니다.
    • forResource는 확장자를 제외한 파일 이름입니다. 예를 들어 파일 이름이 fanfare.mp3라면 "fanfare"가 파일 이름입니다.
    • withExtensionmp3, wav 등 확장자를 입력하니다.
  • AVAudioPlayer(contentsOf: url, fileTypeHint: AVFileType.mp3.rawValue)
    • mp3 타입의 새로운 플레이어를 생성합니다. 확장자가 다르다면 mp3 대신 다른 AVFileType을 사용합니다.
    • numberOfLoops는 반복 횟수입니다. -1를 입력하면 무한 반복하며, 이 부분을 제외하거나 0을 입력하면 1번만 재생됩니다. 1을 입력하면 두 번 재생됩니다. (Apple 개발자 문서)
    • .play() 부분에서 소리가 재생됩니다.
  • player?.stop()
    • 재생중인 플레이어를 정지합니다.

 

5) 원하는 부분에 위 함수를 실행합니다. 예를 들면 버튼을 클릭했을 경우 소리가 나오게 하고 싶은 경우 버튼 이벤트 안에 playSound()를 추가합니다.

 

 

참고: 무음모드에서 소리 나오게 하기
// 무음모드에서 소리가 나게 하기
do {
    try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default)
    try AVAudioSession.sharedInstance().setActive(true)
} catch {
    // print error...
}

 

BGSMM의 iOS 앱 목록

DiffuserStick
앱스토어 링크 | 깃허브 | 소개글
디퓨저 스틱(막대기) 교체 주기 알려주는 앱

Tuner XR
앱스토어 링크 | 깃허브 | 소개글
아이폰 + 아이패드용 튜너 (전세계 다운로드수 500회 돌파)

나만의 오르골 만들기
앱스토어 링크 | 깃허브 | 소개글
나만의 오르골과 악보를 만들어보세요.

UltimateScale
앱스토어 링크 | 깃허브 | 소개글
음악 스케일 학습 도우미


 

문의 | 코멘트 또는 yoonbumtae@gmail.com


카테고리: Swift


0개의 댓글

답글 남기기

Avatar placeholder

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다