1. ホーム
  2. ios

[解決済み] Swiftを使って音を鳴らすには?

2022-02-09 07:35:21

質問

Swiftを使って音を鳴らしたいのですが、どうすればいいですか?

私のコードはSwift 1.0で動作していましたが、Swift 2以降ではもう動作しません。

override func viewDidLoad() {
  super.viewDidLoad()

  let url:NSURL = NSBundle.mainBundle().URLForResource("soundName", withExtension: "mp3")!

  do { 
    player = try AVAudioPlayer(contentsOfURL: url, fileTypeHint: nil) 
  } catch _{
    return
  }

  bgMusic.numberOfLoops = 1
  bgMusic.prepareToPlay()

  if (Data.backgroundMenuPlayed == 0){
    player.play()
    Data.backgroundMenuPlayed = 1
  }
}

解決方法は?

最も望ましいのは AVFoundation . これは、オーディオビジュアルメディアを扱うためのすべてのエッセンスを提供します。

更新しました。 との互換性があります。 Swift 2 , スイフト3 スウィフト4 コメントで何人かの方からご提案いただいたとおりです。


Swift 2.3

import AVFoundation

var player: AVAudioPlayer?

func playSound() {
    let url = NSBundle.mainBundle().URLForResource("soundName", withExtension: "mp3")!

    do {
        player = try AVAudioPlayer(contentsOfURL: url)
        guard let player = player else { return }

        player.prepareToPlay()
        player.play()

    } catch let error as NSError {
        print(error.description)
    }
}


スイフト3

import AVFoundation

var player: AVAudioPlayer?

func playSound() {
    guard let url = Bundle.main.url(forResource: "soundName", withExtension: "mp3") else { return }

    do {
        try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
        try AVAudioSession.sharedInstance().setActive(true)

        let player = try AVAudioPlayer(contentsOf: url)

        player.play()

    } catch let error {
        print(error.localizedDescription)
    }
}


Swift 4 (iOS 13対応)

import AVFoundation

var player: AVAudioPlayer?

func playSound() {
    guard let url = Bundle.main.url(forResource: "soundName", withExtension: "mp3") else { return }

    do {
        try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default)            
        try AVAudioSession.sharedInstance().setActive(true)

        /* The following line is required for the player to work on iOS 11. Change the file type accordingly*/
        player = try AVAudioPlayer(contentsOf: url, fileTypeHint: AVFileType.mp3.rawValue)

        /* iOS 10 and earlier require the following line:
        player = try AVAudioPlayer(contentsOf: url, fileTypeHint: AVFileTypeMPEGLayer3) */

        guard let player = player else { return }

        player.play()

    } catch let error {
        print(error.localizedDescription)
    }
}

曲名を変更し、さらに 拡張子 . ファイルを正しくインポートする必要があります ( Project Build Phases > Copy Bundle Resources ). に置きたいかもしれません。 assets.xcassets のために を使うと便利です。

短いサウンドファイルの場合は、以下のような非圧縮のオーディオフォーマットを使用することをお勧めします。 .wav これらは最高の品質でCPUへの影響も少ないからです。ディスクスペースの消費は、短いサウンドファイルではそれほど気にならないでしょう。長いファイルでは、次のような圧縮形式をお勧めします。 .mp3 などpp. を確認してください。 対応オーディオフォーマット CoreAudio .


ファンファクト 音を鳴らすのがもっと簡単になるような、きちんとした小さなライブラリがあります :)
例えば SwiftySound