尝试修复 AVAudioPlayer 初次使用时的滞后问题

2023-12-11

这个问题已经出现在其他几个问题中:

第一次播放声音时 AVAudioPlayer 启动缓慢

使用 AVAudioPlayer 播放声音时出现延迟

我已尝试实施建议的修复,但没有一个能解决我的问题。我的应用程序向用户呈现一系列可供触摸的对象,当触摸对象时会播放声音。除了初始触摸时有约 2 秒的延迟之外,此功能非常有效。

为了解决这个问题,我使用虚拟 aiff 文件初始化音频播放器:

- (void)viewDidLoad{
    NSString *soundFile = [Card loadCardSoundPath:@"dummy"];

    AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:
                             [NSURL fileURLWithPath:soundFile] error:nil];
    self.audioPlayer = player;
    [audioPlayer setDelegate:self];
    [audioPlayer prepareToPlay];
//    [audioPlayer play];
    [player release];
...
[super viewDidLoad]; 
}

然后当触摸一个物体时我调用:

NSString *soundFile = [Card loadCardSoundPath:name];

if (soundFile != nil){

            AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:
                                     [NSURL fileURLWithPath:soundFile] error:nil];
            self.audioPlayer = player;
            [self.audioPlayer setDelegate:self];
            [self.audioPlayer prepareToPlay];
            [self.audioPlayer play];
            [player release]; 
}

我观察到的行为是这样的:如果我创建一个虚拟音频播放器并调用prepareToPlay但不播放,那么当我单击第一个对象时,我会观察到音频延迟。但是,如果我在虚拟音频播放器上调用 play,那么我不会得到初始对象的延迟,但视图加载会延迟 2 秒。

有办法解决这个问题吗?我是否应该简单地在加载时创建一个 AVAudioPlayers 的 NSArray 并告诉它们准备播放,然后在单击对象时调用播放?


有时它可以帮助让viewDidLoad通过像这样使用假脱机初始化来返回peformSelector:withObject:afterDelay:。例如:

- (void)viewDidLoad{
    // initialization ...
    [super viewDidLoad]; 
    [self performSelector:@selector(primeAudioPlayer) withObject:nil afterDelay:0.1];
}

-(void)primeAudioPlayer {
    NSString *soundFile = [Card loadCardSoundPath:@"dummy"];

    AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:
                             [NSURL fileURLWithPath:soundFile] error:nil];
    [audioPlayer prepareToPlay];
    [player release];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

尝试修复 AVAudioPlayer 初次使用时的滞后问题 的相关文章

  • 如何在目标c中获得该月的第n个星期日日期?

    如何在 Objective C 编码中获取第一个星期日或第 n 个星期日或星期一 任意一天 日期 例如 我只想每年在我的应用程序中显示友谊日的日期 但是 友谊是在八月的第一个星期日 所以 日期每年都会改变 在这里我需要找到每年八月的第一个星
  • 在iPhone编程中从服务器下载mp3文件[重复]

    这个问题在这里已经有答案了 可能的重复 从服务器下载音乐文件并保存在我的应用程序中 https stackoverflow com questions 5620849 download music file from server and
  • 我可以使用 AVAudioPlayer 播放带有振动的声音吗?

    我让 AVAudioPlayer 在聊天期间播放消息提醒声音 我还希望手机振动 是否可以在 AVAudioPlayer 中执行此操作还是我需要使用不同的方法 Thanks 要播放声音 NSString source NSBundle mai
  • iOS:移动设备管理

    我对 MDM 有点困惑 希望有人可以帮助我 我已经研究了Apple网站上有关iOS MDM的文档 但仍然感到困惑 我有一些问题 MDM服务器每次需要执行命令时是否都在与APNS通信 设置我们自己的 MDM 服务器是否非常复杂以及如何设置我们
  • 在 UITextview 中加载巨大的文本文件会崩溃

    我想更新 UITextView 中的一个巨大的文本文件 但设备有时会挂起或崩溃 文本文件大小为 4MB UITextView 是从 Interface Builder 添加的 我正在从文档目录加载文件 以下是加载文本文件的代码 NSErro
  • 处理程序/可运行延迟有时会产生不同步的事件

    当尝试学习如何创建延迟时 我研究并发现主要答案是使用 Handler Runnable postDelayed Handler handler new Handler final Runnable r new Runnable public
  • iOS-示例中的协议和委托

    好吧 我正在寻找 但没有任何方法对我有用 以下代码基于许多教程和苹果文档 但我无法让它工作 有人可以帮忙吗 代码崩溃于 obj delegatee self 在 B h 类中 respondsToSelector 和 PerformSele
  • 第一次播放声音时 AVAudioPlayer 启动缓慢

    我试图消除通过 iPhone 上的 AVAudioPlayer 播放 非常短 不到 2 秒 音频文件时的启动延迟 首先 代码 NSString audioFile NSString stringWithFormat caf NSBundle
  • AS2 使用 onEnterFrames 处理多个影片剪辑时减少延迟的最佳方法

    正如标题所述 我想知道同时处理舞台上多个影片剪辑的最佳方法是什么 每个影片剪辑都有自己的 onEnterFrame 函数 假设屏幕上同时有 50 个敌人 并且不断播放行走动画 onEnterFrame 函数将包括获取方向 移动 X Y 值
  • 我的程序有内存泄漏

    IBAction play2 CFBundleRef mainBundle CFBundleGetMainBundle CFURLRef soundFileURLRef soundFileURLRef CFBundleCopyResourc
  • 如何获得隐式依赖关系来使用 Xcode 4 中的工作区?

    我想使用 Xcode 4 和 Cocoa Touch 静态库项目来管理工作区中的项目 其中包含我可以从其他项目引用的共享代码 根据 WWDC 2010 视频和 Xcode 4 文档 Xcode 4 中的工作区有一个 隐式依赖项 功能 我一直
  • 如何在 iPhone 应用程序中播放来自服务器的视频 URL

    实际上 我通过使用从服务器获取一个网址XMLParser 我想在我的应用程序中播放这个视频网址 现在我使用了 MPMoviePlayerController 但它不起作用 请帮忙 XML解析器 m id loadXMLByURL NSStr
  • 替换核心数据模型,无需迁移

    我已经相当广泛地改变了我的核心数据模型 关于如何将旧数据迁移到新模型中存在很多问题 但是我不需要迁移任何内容 我只想替换当前的 Core Data 实例 如何才能做到这一点 我假设您正在使用持久存储协调器NSSQLiteStoreType
  • 有 ALAssetsLibrary 的示例吗

    对于iPhone 4来说 很多API都不能再使用了 我正在寻找 UIImageWriteToSavedPhotosAlbum 的替代解决方案 ALAssetsLibrary 是 Apple 在新 iOS 4 中提供的当前解决方案 任何人都有
  • jQuery 如何实现延迟滑动?

    我正在使用以下 jQuery div 框向上滑动 5 秒后淡出 有没有办法实现这一点 因为该框需要很长时间才能出现 document ready function load limit slideUp 500 have tried fast
  • iOS 4.3 上的cameraOverlayView 问题

    我使用带有cameraOverlayView的选择器控制器在相机视图中显示产品的图像 在应用到覆盖层之前 产品图像会调整大小 它在 iOS 4 2 上运行良好 但在 iOS 4 3 上产品图像显示为全尺寸 pickerController
  • 是否可以使用UIPageControl来控制UITableView的移动?

    从Apple示例 PageControl 中我们可以知道UIPageControl可以用来控制scrollview中页面的移动 由于 UITableView 是 UIScrollView 的子类 我想使用 UIPageControl 来控制
  • 径向渐变绘制性能 - OpenGL-ES 可以改进吗?

    我正在开发一个图像处理应用程序 它将径向渐变叠加在从照片库加载的图像上 在屏幕上 我有一个滑块可以动态地增大 减小径向渐变的半径 我发现模拟器上的性能很好 但在 iPhone 3G 或 3GS 上就很糟糕了much移动滑块时重绘速度较慢 我
  • iPhone UI 带有 Tableview 或 Scrollview? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 当视口设置为 user-scalable=no 时,iOS/移动 Safari 仍然会缩放?检查辅助功能设置!

    这个特定的 Mobile Safari 看似不可能且未记录 问题让我今天坚持了很长一段时间 当我弄清楚它时 我正要在这里发布一个有关它的问题 问题 虽然我设置了我的 iPad 网络应用程序仍然允许手动缩放 在浏览器中捏合 但只能在我的 iP

随机推荐

  • 无法修改全局 int,但可以修改列表。如何?

    列表 VAR1 0 def foo VAR1 1 返回VAR1 通话中foo 我收到此错误 UnboundLocalError local variable VAR1 referenced before assignment 但是 请考虑该
  • 陷阱标志(TF)和监视器陷阱标志之间的区别?

    像 GDB 这样的调试功能通过设置 eflags 寄存器的 TF 标志来工作 这会在处理器每次执行指令后引发异常 让 gdb 等工具控制调试 当我们运行虚拟机 Ex 时 在 kvm 的情况下执行以下操作同样 您需要设置一个名为 MONITO
  • 如何从表中选择所有列以及 ROWNUM 等其他列?

    在Oracle中 可以做一个SELECT将行号作为结果集中的列返回的语句 例如 SELECT rownum column1 column2 FROM table returns rownum column1 column2 1 Joe Sm
  • 如何使CSS平滑过渡

    我怎样才能得到像这样的CSS转换示例here 下拉示例 到目前为止 我已经成功地只更改了文本和背景颜色 但没有更改整个过渡效果 矩形在悬停时滚动 在未悬停时平滑回滚 知道我该如何做吗 实现这一目标 这是我的代码 a menulink tex
  • 使用多处理进行日志记录

    我确实有以下内容logger类 如 logger py import logging logging handlers import config log logging getLogger myLog def start Function
  • android:如何测量智能手机产生的流量?

    我需要监控哪些服务 应用程序为我的手机产生了哪些流量 以 kbit s 为单位 按上行链路和下行链路分隔 我该怎么做呢 我用谷歌搜索但没有找到任何有用的帖子 操作方法 答案是 TrafficStats 类 在这里 您可以获得传输的字节和 或
  • C#:设置工具提示气球中箭头的位置?

    是否可以更改气球工具提示中箭头 茎的位置 更改的原因是因为位于屏幕顶部的按钮应该在其下方有一个工具提示 已删除损坏的图像链接 上面是现在的情况 我只需要箭头位于气球的左上角即可 我使用 InteropServices 调用多个 User32
  • 错误:安装 wx 时为 wxpython-phoenix 构建轮子失败

    我正在尝试安装 wxpython 我有 python 3 5 2 32Bit 和 Windows 10 64Bit 我试过 pip install wx我得到 Failed Building Wheel for wxpython phoen
  • 如何控制引导轮播在项目中滑动的速度?

    我看到你可以设置间隔 但我想控制项目滑动的速度 Sets interval what is transition slide speed mainCarousel carousel interval 3000 速度无法通过 API 控制 尽
  • 洗牌所需的 IEnumerable 的扩展方法[重复]

    这个问题在这里已经有答案了 我需要一个扩展方法来洗牌IEnumerable
  • 获取原始文件名谷歌应用引擎

    当在谷歌应用程序引擎上收到文件上传时 这个例子假设您收到的是 png 但是 您只能通过文件名的扩展名知道图像的类型 如何获取GAE上上传的原始文件名 正在上传的文件的文件名可以通过查看来确定filename保存文件的变量的属性 例如 假设您
  • Mechanize 不显示 FB 消息表单

    import mechanize cookielib br mechanize Browser cookie jar cookielib CookieJar br set cookiejar cookie jar br addheaders
  • Android同步cookies webview和httpclient

    我有一个登录 webview 和 httpclient 需要确认用户是否登录 问题是 webview 和 httpclient 正在使用其他 cookie 因此 httpclient 无法获取 webview cookie 我读了很多人的问
  • 更改 Html.TextBox 的大小

    我正在使用新的 Razor 视图引擎开发 ASP NET MVC3 应用程序 但在更改 TextBox 使其成为多行时遇到一些困难 到目前为止 我通过谷歌找到的只是我需要将多行属性设置为 true 但我不知道如何设置 查看代码如下所示 di
  • Java 绑定异常

    即使重用地址设置为 true 什么会导致 TCP 套接字抛出 java net BindException 地址已在使用中 仅当应用程序快速重新启动时才会发生这种情况 在 CentOS 5 Linux 操作系统上运行 这有点解释它 http
  • Tinymce 与 Angular 2/4 的双向绑定

    这是我的tinymce component ts import Component OnDestroy AfterViewInit EventEmitter Input Output from angular core Component
  • 如何为 Web 客户端打开自动重定向

    我有这个代码 class CustomWebclient WebClient System Security SecuritySafeCritical public CustomWebclient base public CookieCon
  • FastMember列顺序保存

    使用 TypeAccessor Create FastMember 时似乎总是返回按字母顺序排序的列列表 是否可以告诉它保留类中列的顺序 例如 var testClass new B 1 A 2 将从 GetMembers 返回 A 列 然
  • 如何使用 JWT 授权 SignalR Core Hub 方法

    我在 ASP NET Core 2 0 应用程序中使用 OpenIddict 进行 JWT 身份验证 我正在遵循的想法这个线程并打电话AuthorizeWithJWTSignalR 握手后的方法 但现在我不知道我应该设置什么Authoriz
  • 尝试修复 AVAudioPlayer 初次使用时的滞后问题

    这个问题已经出现在其他几个问题中 第一次播放声音时 AVAudioPlayer 启动缓慢 使用 AVAudioPlayer 播放声音时出现延迟 我已尝试实施建议的修复 但没有一个能解决我的问题 我的应用程序向用户呈现一系列可供触摸的对象 当