如何在 iOS 上使用 AVAudioPlayer 播放指定时长的声音?

2023-12-01

我想在 IOS 上播放声音文件中指定的持续时间。我在 AVAudioPlayer 中找到了一种方法,该方法寻求播放的开始(playAtTime:),但我找不到直接的方法来指定声音文件结束之前的结束时间。

有办法实现这一点吗?


如果您不需要太精确并且想坚持使用AVAudioPlayer,这是一种选择:

- (void)playAtTime:(NSTimeInterval)time withDuration:(NSTimeInterval)duration {
    NSTimeInterval shortStartDelay = 0.01;
    NSTimeInterval now = player.deviceCurrentTime;

    [self.audioPlayer playAtTime:now + shortStartDelay];
    self.stopTimer = [NSTimer scheduledTimerWithTimeInterval:shortStartDelay + duration 
                                                      target:self 
                                                    selector:@selector(stopPlaying:)
                                                    userInfo:nil
                                                     repeats:NO];
}

- (void)stopPlaying:(NSTimer *)theTimer {
    [self.audioPlayer pause];
}

请记住stopTimer将在线程的运行循环上触发,因此音频播放的时间会有一些变化,具体取决于应用程序当时正在执行的其他操作。如果您需要更高的精度,请考虑使用AVPlayer代替AVAudioPlayer. AVPlayer plays AVPlayerItem对象,它可以让你指定一个forwardPlaybackEndTime.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 iOS 上使用 AVAudioPlayer 播放指定时长的声音? 的相关文章

随机推荐

  • 在 Mac 上安装的 VSTS 代理中运行 powershell 构建步骤?

    我在 mac 上安装了 VSTS 构建代理来构建 xamarin iOS 项目 构建工作正常 直到我添加了 powershell 构建步骤 即使我安装了 powershell for mac https github com PowerSh
  • 在 SwiftUI 中读取带有子节点的 Firebase 实时数据库父节点时出现问题

    我有以下 Firebase 实时数据库结构 posts user1 uid Kfm0p2EMcrpN8XcLOR5 created at 1490119356 786182 image height 374 9999999999999 im
  • indexedDB 最高键路径

    我在 indexedDB 中有一个使用 Emberjs 适配器填充的数据库 我已经像这样设置了键路径 this addModel App Device keyPath key 当我第一次解析数据时 我的密钥会自动递增 如下所示 data d
  • FullCalendar 限制事件数量并有更多链接

    我发现有人请求向日历添加 更多 链接并限制活动数量 这件事已经完成了吗 或者有人实施了自己的解决方案 可以分享吗 如果是这样 请发布您的代码 随着新版本 v2 1 0 beta2 于 17 天前发布Arshaw做了以下事情 已解决的问题 带
  • java中通过多线程从数据库读取

    我正在使用java中的多线程从vertica数据库读取数据 我有大约 2000 万条记录 我正在打开 5 个不同的线程 其中有这样的选择查询 start threadnum while start 20000 lt totalRecords
  • JSF - 自定义 NavigationHandler 结果值无效?

    我自己编写了一个自定义的 NavigationHandler 与下面的非常相似 但只是使用堆栈来保存历史记录 http jsfatwork irian at book de custom component html idx custom
  • 实体类的正确设计。需要建议

    例如我有实体类User public class User private long id private String name setters and getters 接下来 我添加新的实体类 Comment public class
  • 将 pandas 数据框拆分为许多块

    假设我有一个具有以下结构的数据框 observation d1 1 d2 1 d3 1 d4 1 d5 1 d6 1 d7 1 d8 1 d9 1 d10 1 d11 1 d12 1 d13 1 d14 1 d15 1 d16 1 d17
  • Ukkonen 的后缀树算法(通俗易懂)

    我现在感觉有点厚 我花了几天时间试图完全理解后缀树的构造 但由于我没有数学背景 许多解释都让我无法理解 因为它们开始过度使用数学符号系统 我发现的最接近一个好的解释是使用后缀树快速字符串搜索 但他掩盖了各个要点 并且算法的某些方面仍然不清楚
  • 关于类型细化语法的困惑

    在类型级别上 我偶然发现以下内容 sealed abstract class StSource A type S def init S create the initial state def emit s S A S emit a val
  • Extjs4组合框在网格中显示值

    请帮忙 我想展示我的displayValue在网格中 我找到了解决方案here 但我不明白如何使用它 我的代码 columns header Product id combo locked true dataIndex prod id ed
  • Android - 如何用另一个字符串替换部分字符串?

    我有一些带有数字和英语单词的字符串 我需要通过找到它们并将它们替换为该单词的本地化版本来将它们翻译成我的母语 你知道如何轻松实现字符串中的单词替换吗 Thanks Edit 我已经尝试过 字符串 to 的一部分应替换为 xyz string
  • Firebase 使用浮点数作为键

    我意识到 当将一些 JSON 数据推送到我的 Firebase 存储 其键是浮点数 时 我从服务器收到 400 HTTP 错误请求 这是我得到的回复 error Invalid data couldn t parse JSON object
  • gdb if 条件语法错误

    我在文件 test f90 中有一个非常简单的 Fortran 程序 program test real x x 12 write x end program test 我用它编译 gfortran g test f90 然后我尝试使用 g
  • PEG (Grako) 的选项解析不足?

    我的同事 PaulS 问了我以下问题 我正在为现有语言 SystemVerilog IEEE 标准 编写一个解析器 并且该规范中有一条结构与此类似的规则 cover point data type identifier coverpoint
  • 如何在 Inno Setup 中更改 RTF 文本中超链接的颜色

    我正在使用来自的代码如何向自定义 Inno Setup WelcomeLabel 添加可点击链接 procedure InitializeWizard var RichViewer TRichEditViewer begin RichVie
  • jQuery.Click 方法重新加载页面

    我正在尝试创建一个浮动 div 当按钮被触发时它就会出现 这并不难 但是当我按下按钮时 页面会自动重新加载 我不知道为什么 我尝试使用 Bootstrap 的 Popover 但由于同样的问题 它无法按预期工作 当弹出窗口被触发时 页面会重
  • 返回浮点类型是否完全符合 IEEE-754 的函数?

    我想写一个函数来检查float double or long double完全符合 IEEE 754 格式 我是说 float IEEE 754 二进制32 双 IEEE 754 二进制 64 长双 IEEE 754 二进制 128 我以为
  • 在Python 3中读取文件时编码错误?

    当我在 python 中读取文件并将其打印到屏幕上时 它无法正确读取某些字符 但是 这些相同的字符硬编码到变量 print 中就可以了 以下是 test html 包含文本 Hall 的示例 with open test html r as
  • 如何在 iOS 上使用 AVAudioPlayer 播放指定时长的声音?

    我想在 IOS 上播放声音文件中指定的持续时间 我在 AVAudioPlayer 中找到了一种方法 该方法寻求播放的开始 playAtTime 但我找不到直接的方法来指定声音文件结束之前的结束时间 有办法实现这一点吗 如果您不需要太精确并且