- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
长期阅读,第一次提问...
我正在制作一个音乐应用程序,它使用 AVAssetReader 从 iTunes 库中读取 mp3 数据。我需要精确的时间,所以当我创建一个 AVURLAsset 时,我使用“AVURLAssetPreferPreciseDurationAndTimingKey”来提取时间数据。这有一些开销(当我不使用它时我没有问题,但我需要它!)
在 iphone(4) 和 ipad(1) 上一切正常。我希望它能在我的 ipod touch(第二代)上运行。但事实并非如此:如果声音文件太长(> ~7 分钟),则 AVAssetReader 无法开始读取并抛出错误(AVFoundationErrorDomain 错误 -11800。)
看来我在 ipod touch 的 scanter 资源方面碰壁了。知道发生了什么,或者如何管理创建 AVURLAsset 的开销以便它可以处理长文件?(我尝试使用性能工具运行它,但我没有看到内存出现重大峰值)。
谢谢丹
最佳答案
也许你也开始读书了?据我了解,对于 mp3,它需要遍历整个文件才能实现精确计时。因此,请尝试延迟阅读。您还可以尝试注册为某些 AVAsset 属性的观察者。 iOS 4.3 具有“可读”属性。我从未尝试过,但我的猜测是它最初设置为 NO,一旦 AVAsset 完成加载,它就会设置为 YES。
编辑:实际上,只是查看了文档。您应该为此使用 AVAsynchronousKeyValueLoading 协议(protocol),Apple 提供了一个示例
NSURL *url = <#A URL that identifies an audiovisual asset such as a movie file#>;
AVURLAsset *anAsset = [[AVURLAsset alloc] initWithURL:url options:nil];
NSArray *keys = [NSArray arrayWithObject:@"duration"];
[asset loadValuesAsynchronouslyForKeys:keys completionHandler:^() {
NSError *error = nil;
AVKeyValueStatus durationStatus = [asset statusOfValueForKey:@"duration" error:&error];
switch (durationStatus) {
case AVKeyValueStatusLoaded:
[self updateUserInterfaceForDuration];
break;
case AVKeyValueStatusFailed:
[self reportError:error forAsset:asset];
break;
case AVKeyValueStatusCancelled:
// Do whatever is appropriate for cancelation.
break;
}
}];
如果“持续时间”无济于事,请尝试“可读”(但正如我之前提到的,“可读”需要 4.3)。也许这会解决您的问题。
关于objective-c - AVURLAsset 用于 ipod 上的长音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6052977/
我是 Arduino 的新手(因为这个周末我必须学习它来完成一个学校项目)并且我无法让我的压电扬声器为闹钟发出声音。当草图运行时,一切正常。 LED 闪烁,但蜂鸣器不发声,这很奇怪,因为 LED 和蜂
我想知道是否有人遇到过在 iPhone SDK 中生成铃声的方法。我正在尝试生成 DTMF 音调,但似乎找不到任何实质性内容。我还希望能够指定播放音调的时间(即模拟按住按钮而不是简单地按下按钮....
我正在尝试制作一个可以在 Octave 音阶中水平滚动的钢琴应用程序。下面是另一个我尝试做的钢琴应用程序的示例。箭头在钢琴上滚动 Octave 。我已经了解了scrollview,但是似乎只允许通过滑
我正在我的 Android 应用程序中使用文本转语音 - TTS。我已经粘贴了下面的代码。TTS 工作正常,但是它说的语音/文本不是很清楚。它说的真的快速,以至于它不是完全可以理解的.. 我尝试设置
我正在调用一个带有号码的通话应用程序,然后通过 发送 dtmf 音 String number = "tel:+1234567,890#"; Intent c1 = new Intent(androi
我正在开展一个项目,该项目要求我的应用能够在通话期间以语音的上行链路频率发送 DTMF 音。 我的两个条件是: 我们不使用定制的 Android 平台 我们不需要root手机 我花了几天时间做功课,并
我需要制作一个IVR -auto dialer应用程序,它 => 调用免费电话 => 然后选择一个选项继续 => 然后输入一些代码 => 然后几秒钟后(一些广告/说 30 秒)需要输入另一个选项 前三
在我的 Twilio基于应用程序我通过 Twilio REST 创建拨出电话API。 当目标方响应时,我将他/她放到最近创建的 session 中。 在让他/她参加 session 之前,如何播放特定
Twilio 未从 Skype 检测到我的 DTMF 音。 我们用 twilio 建立了一个 IVR 系统,客户必须输入一个 7位客户编号。 我们的一些客户使用 voip 电话, 因此我们需要确保 t
我想在我的应用程序中以编程方式发送DTMF 铃声。在搜索时我找到了一个方法 public void playDtmfTone(字符数字) 这是 google 在 android 中发送 DTMF 的新
我读过一些有关 Android 中 DTMF 的文章。我想不可能通过流式传输 .wav 文件(或其他格式)进行自动电话调用并检测其他人(调用接收者)的输入。 我想制作一个应用程序来调用我/或其他人,并
我是一名优秀的程序员,十分优秀!