小编Vin*_*nce的帖子

AVAudioPlayerNode lastRenderTime

我使用了多个AVAudioPlayerNodeAVAudioEngine为混合播放的音频文件.完成所有设置(引擎准备,启动,音频文件段已安排)后,我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)

ios avaudioengine avaudioplayernode

16
推荐指数
1
解决办法
841
查看次数

Swift - 使用where子句展开for循环中的可选项

我有一个带有可选成员的类:

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中有可能吗?

optional for-in-loop swift

7
推荐指数
2
解决办法
2412
查看次数

自定义Spotlight导入器和Finder的获取信息"更多信息"部分

我为我的应用程序定义的自定义文档类型编写了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.

所以在这里我的问题是,我错过了在"更多信息"部分显示这些项目的内容吗?是否有人遇到过这样的问题并找到了解决方案?

编辑:

到目前为止,没有人回答我的问题,也许有人可以指点我这个问题的教程或文档?

macos plugins cocoa metadata spotlight

4
推荐指数
1
解决办法
1580
查看次数