AVAudioPlayer 不播放任何声音

2023-12-09

我正在开发一个 iOS 应用程序,需要使用AVFoundation框架。 Xcode 4 中的工作区结构包含两个项目:

  • Workspace
    • 应用程序本身(主要项目)
    • 实用程序库

构建实用程序库后,会生成一个静态库,该静态库在主应用程序中用作框架。

因此,当尝试使用下面的代码在主应用程序内播放声音时,它会按预期工作。

NSString *resourcePath = [[NSBundle mainBundle] resourcePath];
NSString *path = [NSString stringWithFormat:@"%@/sound.mp3", resourcePath];

NSURL *url = [NSURL fileURLWithPath:path];
NSError *error = nil;

AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url
                                                                    error:&error];
[audioPlayer play];

相反,当尝试使用与上面相同的代码在实用程序库中播放完全相同的声音(或任何其他声音)时,根本不会播放任何声音,即使错误是nil音频播放器属性值是正确的(通道数、持续时间)。

我已经确定了AVFoundation这两个项目都有框架。

另外,我的班级使用AVAudioPlayerDelegate协议并实现这两个方法:

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag;
- (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError *)error;

尝试播放声音后,这些方法都不会被调用。

如果我使用AudioToolbox相反,它会播放声音。但我有兴趣使用AVFoundation有几个原因。

知道发生了什么事吗?我错过了什么吗AVFoundation?是否与使用有关AVAudioPlayer从静态库内部?

提前致谢。


我找到了解决方案,它与我没有提到也没有考虑到的事情有关:我正在使用自动引用计数(ARC)进行编译。

ARC 向音频播放器插入一个释放调用,因此它在离开创建它的方法后立即被释放。与以下无关AVAudioPlayer但有了ARC。

为了解决这个问题,我刚刚创建了一个AVAudioPlayer属性到处理声音的类,以便 ARC 不再发布它。好吧,至少在这个类的实例被释放之前它不会被释放。

有关 ARC 的更多信息,请参阅自动引用计数:将弱引用清零详细说明了我遇到此问题的原因。

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

AVAudioPlayer 不播放任何声音 的相关文章

随机推荐

  • R 中有处理命令行选项的包吗?

    R 中有处理命令行选项的包吗 I know commandArgs 但这太基础了 其结果基本上相当于argc and argv in C 但除此之外我还需要一些东西 就像boost program options in C or GetOp
  • 如何将外部文件中的 Fortran 代码插入到单独的代码中?

    我想让我的代码获取在另一个文档中编写的代码 阅读它 然后像在代码中编写一样使用它 假设我们有以下内容 MODULE samplemod CONTAINS FUNCTION sillysum boudary function RESULT c
  • 使用 Trigger.IO/PhoneGap 在 UIWebView 中通过 focus() 事件自动显示键盘

    据推测 自 iOS 6 以来 这是不可能的 您可以在 iOS 6 中设置 UIWebView 的 KeyboardDisplayRequiresUserAction NO 我正在使用 html 5 webview Trigger IO 并构
  • 为什么 foreach 循环不适用于 JSON 数组

    当我尝试的时候解析 json 数组 工作室给了我一个编译错误 指出foreach 不适用于 json 数组 虽然我知道如何获取所有对象并解析 我只是想知道为什么foreach不适用即使 json 数组是一个数组 对于每个循环的工作方式如下
  • 如何在大型排序数组中高效地找到最接近另一个值 X 的值

    对于已排序的列表 如何找到接近给定数字的最小数字 例如 mysortedList 37 72 235 645 715 767 847 905 908 960 如何找到小于或等于700的最大元素quickly 如果我有1000万个元素 那么线
  • 如何在 Laravel 中显示 GIF

    我正在使用 Firefox 浏览器 尝试了所有PNG s JPG一切都在工作 除了GIF 事情是这样的 如果我测试一下http localhost pepsi gif GIF实际上正在工作并显示 但当我在里面尝试时HTML 图片标签它不显示
  • 匹配两个不同标记之间的任意字符串

    我正在尝试匹配两个不同标记之间的字符串的一部分 它们可能是字符串中多次出现的标记 示例文本 标记为斜体 要匹配的文本为粗体 This is 开始比赛 示例文本 结束比赛 和一些 开始比赛 代币和普通 结束比赛 text 我有以下正则表达式
  • 有人玩过NIO管道来过滤/拦截System.out吗?

    按照建议here我想在选择器循环内执行此操作 我真正想要的是在选择器循环内读取写入系统的内容 EDIT1 我编写了一个完整的解决方案 只是为了发现您无法使用 System setOut 重定向 GC 日志 它只是直接转到 FD 或其他东西
  • 使用 geom_bar 彼此相邻的两个条

    我有以下数据框 df decades marxftext durkftext 1 1970 1979 3009 393 2 1980 1989 3468 469 3 1990 1999 3420 657 4 2000 2009 3162 7
  • 流体宽度元素的等高行

    我用过克里斯 科伊尔斯行中的等高块之前多次使用过 jQuery 脚本 而且效果总是很好 话虽这么说 我总是开发针对特定分辨率构建的网站 这次我正在开发一个响应式网站 主容器具有流体宽度 因此 我遇到了问题 但找不到解决问题的方法 克里斯在他
  • As.vector 不会将 data.frame 子集转换为向量

    下面我提供了我一直在研究的一些代码片段 我已经成功地将字符串作为表格读取 我的表中存在一些子集 我希望在其上使用中值 函数 根据我所做的研究和我自己的经验 median 没有为 data frame 或 data frame 的子集定义行为
  • C# 的鼠标钩子

    我正在尝试模拟 硬件 鼠标点击 因为某些软件似乎会阻止来自 PostMessage 的输入 我知道有 SendInput 但这不是一个选项 因为我也需要它在后台窗口中兼容 解决方案似乎是一个低级鼠标钩子 但我四处搜索 除了记录器之外找不到任
  • 满足特定要求的密码正则表达式

    我要编写一个正则表达式来满足以下要求 至少一个字符 至少一位数字 长度必须为 8 至少一个特殊字符 可以是任意特殊字符 前三个很简单 但找不到一种方法来限制至少特殊字符 任何可能的特殊字符 例如 gt etc 您可以通过组合前瞻来解决这些问
  • JavaScript 的客户端 DOM 打开重定向

    我在扫描以下代码时遇到客户端 DOM 打开重定向安全问题 问题出现在我初始化变量 myPath 和 myHost 的位置 我无法理解它如何受到网络钓鱼攻击以及如何修复它 有人可以帮忙吗 var query this value var my
  • Symfony Doctrine 找不到要加载的装置

    我从 Symfony 3 4 开始 但负载夹具有问题 当我执行时php bin console doctrine fixtures load然后我收到消息 In LoadDataFixturesDoctrineCommand php lin
  • PHP PDO 潜在的逻辑错误

    我是 PHP 新手 想知道为什么这段代码不向数据库插入任何内容 返回 0 我确信这一定是一个逻辑错误 因为我没有收到任何错误消息 class DbConnection protected db conn public db host loc
  • C# 线程问题

    我正在做的是从先前的按钮单击动态创建的列表视图 然后 ti 启动一个后台工作程序 其中应清除列表视图并每 30 秒用新信息填充 iistview 我不断得到 跨线程操作无效 从创建它的线程以外的线程访问控制 listView 2 priva
  • Numpy 广播

    下面的代码给出了 a 0 11 中的元素在数组 c 的第一行中出现了多少次 a c 0 我如何调整此代码 以便它对 c 中的所有行 而不仅仅是 c 0 执行相同的操作 本质上是一个for循环 import numpy as np c np
  • 通过测试 numpy 数组中的每个元素是否在 2 个数字之间创建布尔数组

    我有一个 numpy 数字数组 我想创建一个具有相同大小和维度的布尔数组 用于说明该元素是否位于两个数字之间 例如 a np array 1 2 3 4 5 6 7 8 9 我知道如果我写 print a gt 3 我得到一个数组 其中前三
  • AVAudioPlayer 不播放任何声音

    我正在开发一个 iOS 应用程序 需要使用AVFoundation框架 Xcode 4 中的工作区结构包含两个项目 Workspace 应用程序本身 主要项目 实用程序库 构建实用程序库后 会生成一个静态库 该静态库在主应用程序中用作框架