我使用了多个AVAudioPlayerNode在AVAudioEngine为混合播放的音频文件.完成所有设置(引擎准备,启动,音频文件段已安排)后,我play()在每个播放器节点上调用方法开始播放.
因为遍历所有播放器节点需要花费时间,所以我拍摄了第一个节点lastRenderTime值的快照,并使用它来计算节点play(at:)方法的开始时间,以保持节点之间的播放同步:
let delay = 0.0
let startSampleTime = time.sampleTime // time is the snapshot value
let sampleRate = player.outputFormat(forBus: 0).sampleRate
let startTime = AVAudioTime(
sampleTime: startSampleTime + AVAudioFramePosition(delay * sampleRate),
atRate: sampleRate)
player.play(at: startTime)
Run Code Online (Sandbox Code Playgroud)
问题在于当前播放时间.
我使用这个计算得到值,在seekTime我们寻找玩家的情况下,我跟踪的值是哪里.它0.0开始时:
private var _currentTime: TimeInterval {
guard player.engine != nil,
let lastRenderTime = player.lastRenderTime,
lastRenderTime.isSampleTimeValid,
lastRenderTime.isHostTimeValid else {
return seekTime
}
let sampleRate = player.outputFormat(forBus: 0).sampleRate
let sampleTime = player.playerTime(forNodeTime: …Run Code Online (Sandbox Code Playgroud) 我有一个带有可选成员的类:
class A {
var i: Int? = nil
}
Run Code Online (Sandbox Code Playgroud)
然后我有一个类型的对象数组A.数组中的某些对象具有值i,而其他对象则没有.
我想迭代数组中具有值的对象,i同时解包可选项.我没有找到同时做两件事的方法(我甚至不知道是否可能),迫使我if let在循环中编写一个构造.
例如 :
// a1, a2 have a value for i
let arr: [A] = [a1, a2, a3]
for obj in arr where obj.i != nil {
// I want to avoid if let, or force unwrapping here
if let unwrapped = obj.i {
print(i)
}
// let unwrapped = obj.i! ...
}
Run Code Online (Sandbox Code Playgroud)
在Swift中有可能吗?
我为我的应用程序定义的自定义文档类型编写了Spotlight Importer.
一切正常,Spotlight正确索引元数据字段(使用mdls命令验证),Spotlight搜索显示我的文档.
我遇到的唯一问题是,当我询问有关文件的信息(Finder中的Cmd + I)时,我<displayattrs>在schema.xml文件部分中指定的项目不会显示在"更多信息"部分中.
我希望这些字段出现在那里,因为我在<allattrs>和<displayattrs>部分中都声明了它们.
我在这里找到了几个与此问题相关的问题,但没有一个问题对我有帮助.
导入器捆绑到应用程序中,由系统加载(mdimport -L已确认).此外,bundle结构似乎正确,schema.xml出现在Resources文件夹中,以及schema.stringsen/lproj文件夹中.
这是schema.xml文件的样子:
<schema version="1.0"
xmlns="http://www.apple.com/metadata"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.apple.com/metadata file:///System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Resources/MetadataSchema.xsd">
<types>
<type name="com.mydomain.myapp.mydocument">
<allattrs>
kMDItemTitle kMDItemAuthors kMDItemAlbum
</allattrs>
<displayattrs>
kMDItemTitle kMDItemAuthors kMDItemAlbum
</displayattrs>
</type>
</types>
Run Code Online (Sandbox Code Playgroud)
更多的事情,我的系统缺少mdcheckschema命令,但XML文件太短,我怀疑语法有问题.
有时,"更多信息"部分显示文件上次打开日期,有时没有.
最后,我尝试重新导入文件(mdimport),但无济于事.
我正在运行Mac OS X Moutain Lion 10.8.3,Xcode 4.6.2.
所以在这里我的问题是,我错过了在"更多信息"部分显示这些项目的内容吗?是否有人遇到过这样的问题并找到了解决方案?
编辑:
到目前为止,没有人回答我的问题,也许有人可以指点我这个问题的教程或文档?