如何在Swift中播放声音?


在Swift中,有一个名为AVFoundation的框架,它提供了播放音频文件的灵活性。这个框架提供了一个名为AVAudioPlayer的类来管理音频播放和暂停。在本文中,您将学习如何在Swift中使用AVAudioPlayer类播放声音。

AVFoundation

此框架是Swift中一个非常强大的多媒体框架。它为您提供了处理媒体文件(如音频、视频和其他类型的媒体文件)的大部分功能。此框架使用一些常用类来管理媒体文件。

  • AVPlayer − 此类支持高质量的音频和视频播放。它可以播放本地或远程媒体文件,并具有停止、搜索和音量调节的控件。

  • AVAudioPlayer − 这是一个AVPlayer子类,专门设计用于播放音频文件。它还具有其他功能,例如调整循环次数、修改播放速度和调整音量。

  • AVCaptureSession − 此类用于从输入设备(如摄像头和麦克风)捕获媒体素材。它可以录制视频和音频,并且可以选择更改曝光、焦点和其他捕获设置。

  • AVAsset − 此类表示媒体资产,例如视频或音频文件。它提供资产元数据,例如持续时间和格式,并可用于提取视频素材的单个帧或部分。

  • AVMetadata − 此类用于处理媒体资产元数据,例如标题、艺术家和专辑信息。它可以读取和写入元数据,并为常用元数据字段提供一组定义的键。

  • AVPlayerLayer − 一个能够显示AVPlayer实例中视频素材的图层子类。它允许您将视频播放集成到程序的用户界面中,并提供修改纵横比和其他显示参数的选项。

这些只是AVFoundation框架中最有价值的类和功能中的一部分。使用Swift,有多种不同的类和API可用于与媒体资产交互,包括对实时音频处理、视频编辑等的支持。

AVAudioPlayer类是AVFoundation框架中AVPlayer类的子类,它提供了一个简单的界面,用于在Swift应用程序中播放音频内容。以下是AVAudioPlayer类的一些关键属性和方法:

属性

  • currentTime − 此属性返回音频文件的当前播放时间(以秒为单位)。

  • duration − 此属性返回音频文件的持续时间(以秒为单位)。

  • volume − 此属性设置音频播放的音量,范围为0.0(静音)到1.0(最大音量)。

  • numberOfLoops − 此属性设置音频文件在停止之前应播放的次数。值为-1表示音频文件应无限循环。

  • isPlaying − 此属性返回一个布尔值,指示音频文件当前是否正在播放。

方法

  • init(contentsOf url: URL) − 这是AVAudioPlayer类的指定初始化器,它接受要播放的音频文件的URL。

  • play() − 此方法启动音频文件的播放。

  • pause() − 此方法暂停音频文件的播放。

  • stop() − 此方法停止音频文件的播放。

  • prepareToPlay() − 此方法准备音频播放器进行播放,方法是将音频文件加载到内存中并执行任何必要的初始化。

  • setVolume(_ volume: Float, fadeDuration: TimeInterval) − 此方法设置音频播放器的音量,并可以选择淡入或淡出持续时间。

  • currentTime (setter) − 此方法设置音频文件的当前播放时间(以秒为单位)。

  • numberOfLoops (setter) − 此方法设置音频文件在停止之前应播放的次数。

以下是如何播放和暂停声音的示例

  • 步骤1 − 首先,将音频文件添加到您的项目目录。在此示例中,我们将名为“sample_audio.mp3”的音频文件添加到本地目录。

  • 步骤2 − 为了在Swift中播放音频文件,您需要导入AVFoundation框架。

  • 步骤3 − 现在,我们声明一个属性,例如“var audioPlayer: AVAudioPlayer?”来播放音频文件。

  • 步骤4 − 您可以初始化AVAudioPlayer类的对象。您可以通过提供音频文件的本地URL来使用AVAudioPlayer(contentsOf: URL)初始化器。

  • 步骤5 − 要从URL播放和暂停音频文件,您需要调用“play”和“pause”方法来暂停正在进行的音频文件。

示例

import UIKit
import AVFoundation
class TestController: UIViewController {
    
   private var audioPlayer: AVAudioPlayer?    
   private lazy var playButton: UIButton = {
      let button = UIButton()
      button.backgroundColor = .darkGray
      button.setTitle("Play Sound", for: .normal)
      button.setTitleColor(.white, for: .normal)
      button.titleLabel?.font = UIFont.systemFont(ofSize: 17, weight: .medium)
      button.layer.cornerRadius = 10
      button.clipsToBounds = true
      button.addTarget(self, action: #selector(handleButtonTapped), for: .touchUpInside)
      button.translatesAutoresizingMaskIntoConstraints = false
      return button
   }()
    
   override func viewDidLoad() {
      super.viewDidLoad()
      initialSetup() 
   }
    
   override func viewDidAppear(_ animated: Bool) {
      super.viewDidAppear(animated)
   }   
   private func initialSetup() {        
      view.backgroundColor = .white
      navigationItem.title = "Play Sound"
        
      view.addSubview(playButton)
        
      playButton.heightAnchor.constraint(equalToConstant: 45).isActive = true
      playButton.widthAnchor.constraint(equalToConstant: 250).isActive = true
      playButton.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
      playButton.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
   }    
   @objc private func handleButtonTapped() {
      if audioPlayer != nil && audioPlayer!.isPlaying {
         audioPlayer?.pause()
         playButton.setTitle("Play Sound", for: .normal)
      } else {
         guard let path = Bundle.main.path(forResource: "sample_audio", ofType:"mp3") else {
         return }
         let url = URL(fileURLWithPath: path)
            
         do {               
            if audioPlayer == nil {
            audioPlayer = try AVAudioPlayer(contentsOf: url)
            }               
            audioPlayer?.play()
            playButton.setTitle("Pause Sound", for: .normal)
         } catch let error {
            print(error.localizedDescription)
         }
      }
   }
}

输出

结论

您可以导入AVFoundation框架来使用AVAudioPlayer类。此类为您提供了播放和暂停音频文件的功能。此类还提供其他属性和方法来管理执行。

更新于:2023年4月24日

4K+ 次浏览

启动您的职业生涯

完成课程获得认证

开始学习
广告