Skip to main content

Command Palette

Search for a command to run...

SwiftUI中通过AVAudioPlayer播放Audio小纸条

Published
1 min read
SwiftUI中通过AVAudioPlayer播放Audio小纸条

在学习英语小助手里,我准备为它加入一个读出发音的功能。读出发音时应该能有正常语速和慢速发音。这里记录一下这个简单的播放处理。

首先我们需要AVKit

import AVKit

在你的View里需要一个AVAudioPlayer

@State var audioPlayer: AVAudioPlayer!

需要初始化这个audioPlayer

if let audioURL = Bundle.main.url(forResource: "file", withExtension: "wav"){
    audioPlayer = try! AVAudioPlayer(contentsOf: audioURL)
    audioPlayer.enableRate = true
    audioPlayer.prepareToPlay()
}

最后就可以调用它来做播放了:

ZStack{
            VStack {
                Text("Play").font(.system(size: 45)).font(.largeTitle)
                HStack {
                    Spacer()
                    Button(action: {
                        audioPlayer.currentTime = 0
                        audioPlayer.rate = 0.5
                        audioPlayer.play()
                    }) {
                        Image(systemName: "play.fill").resizable()
                            .frame(width: 50, height: 50)
                            .aspectRatio(contentMode: .fit)
                    }
                    Spacer()
                    Button(action: {
                        audioPlayer.currentTime = 0
                        audioPlayer.rate = 1
                        audioPlayer.play()
                    }) {
                        Image(systemName: "play.circle.fill").resizable()
                            .frame(width: 50, height: 50)
                            .aspectRatio(contentMode: .fit)
                    }
                    Spacer()
                    Button(action: {
                        self.audioPlayer.pause()
                    }) {
                        Image(systemName: "stop.circle.fill").resizable()
                            .frame(width: 50, height: 50)
                            .aspectRatio(contentMode: .fit)
                    }
                    Spacer()
                }
            }
        }

有关播放控制:

  • 播放 : 实例直接调用 play 方法就可以实现开始播放, 苹果推荐在调用play之前先调用prepareToPlay方法, 此方法会在播放之前预处理和预加载音频文件, 以减少播放延迟, 如果不调用此方法也可以正常播放,prepareToPlay方法也会隐式调用,但是会有些许延迟.
  • 停止: 实例调用pause 和 stop都会停止当前播放, 再调用play 也都会继续播放音频, 但是stop方法会撤销prepareToPlay 方法中做的一些准备工作.
  • 进度控制: currentTime属性,改属性控制着播放进度, 如果音频正在播放,音频将偏移到指定的进度, 如果音频没在播放状态, currentTime决定着开始播放的进度.
  • 循环次数: numberOfLoops属性决定着音频的重复播放次数,默认值是0, 意味着只会播放一遍, 如果值我们设置为1, 那么会播放2遍, 以此类推,如果我们设置为一个负数, 那么将一直重复播放,直到我们手动停止.
  • 音量控制:volume属性, 赋值范围是从0.0-1.0, float类型数据.
  • 速度控制:rate属性是控制音频播放速率, 赋值范围0.5-2.0之间. 1.0为正常, 0.5为半速播放, 2.0为2倍速播放. 在使用rate属性之前,应先设置enableRate属性为YES 激活rate,并且必须在prepareToPlay之前调用.

相关的playground可以在这里取得

SwiftUI小纸条

Part 19 of 29

使用和书写SwiftUI过程中留下的各种小纸条

Up next

SwiftUI应用CoreData小纸条(五)

运用CoreData的Delete Rule

More from this blog

Https 本地服务器小纸条

最近想要尝试一下Telegram mini app,在调试时需要使用https的服务。试来试去发现在Mac下完成一个简单的HTTPS服务器还是需要点奇奇怪怪的工具的。但是整体来讲非常简单。 准备证书 主要会使用mkcert来创建证书。首先安装mkcert。 brew install mkcert brew install nss # if use Firefox 将mkcert加入到本地root CA。 mkcert -install 生成证书 本地调试可以使用localhost或127.0...

Feb 21, 20241 min read
Https 本地服务器小纸条

macOS中使用Docker发布一个python项目的小纸条

最近写了一个Telegram Bot,它可以使用语音和文字与GPT进行交互,成为了我日常重度使用的工具。从练习英语的听说读,到日常的搜索使用上都让我有了不少收获。终于,日常跑在我笔记本上的日子就要过去了,我需要它能日常跑在我的服务器上,所以准备使用Docker整个image,使得我日常的更新和服务器的迁移更为简单些。所以写下这个小纸条,方便以后自己回来查看。 安装Docker 使用Homebrew安装简单方便: brew install --cask docker Homebrew会视你的机器...

Mar 10, 20233 min read
macOS中使用Docker发布一个python项目的小纸条

老房东的纸条箱

39 posts