小编blw*_*ers的帖子

使用AVAudioEngine为低延迟节拍器安排声音

我正在创建一个节拍器作为更大的应用程序的一部分,我有一些非常短的wav文件用作单独的声音.我想使用AVAudioEngine,因为NSTimer存在严重的延迟问题,而Core Audio在Swift中实现起来似乎相当艰巨.我正在尝试以下方法,但我目前无法实现前3个步骤,我想知道是否有更好的方法.

代码大纲:

  1. 根据节拍器的当前设置(每个节拍的节拍数和每个节拍的细分数;节拍的文件A,细分的文件B)创建文件URL数组
  2. 以编程方式根据文件的速度和长度创建具有适当静音帧数的wav文件,并将其插入每个声音之间的数组中
  3. 将这些文件读入单个AudioBuffer或AudioBufferList
  4. audioPlayer.scheduleBuffer(buffer, atTime:nil, options:.Loops, completionHandler:nil)

到目前为止,我已经能够播放单个声音文件的循环缓冲区(步骤4),但我无法从文件数组构建缓冲区或以编程方式创建静默,也没有在StackOverflow上找到任何答案解决这个问题.所以我猜这不是最好的方法.

我的问题是:是否可以使用AVAudioEngine安排一系列低延迟的声音,然后循环该序列?如果没有,哪个框架/方法最适合在Swift编码时调度声音?

ios swift avaudioengine avaudioplayernode

11
推荐指数
2
解决办法
1918
查看次数

Xcode,Parse Crash Reporting,未创建dSYM文件

我有一个iOS应用程序,使用Parse SDK 1.7.0在Xcode 6.2中用Swift编写.我已经完成了Parse Quick Start说明来设置崩溃报告(包括ParseCrashReporting.enable()在AppDelegate中),但似乎我的运行脚本存在问题.错误是:App "/Users/ben/Library/Developer/Xcode/DerivedData/MyApp-ahydphsjgdgefbhcdodokcmofehe/Build/Products/Debug-iphonesimulator/MyApp.app.dSYM" wasn't found. Command /bin/sh failed with exit code 1.

据此,似乎Xcode没有创建dSYM文件.在我的构建设置>构建选项中,我已将调试信息格式更改为"带有dSYM文件的DWARF",用于调试和发布.(以前,Debug设置为"DWARF")

我应该在构建选项中更改其他内容吗?

还有,这可能是问题吗? export DWARF_DSYM_FILE_SHOULD_ACCOMPANY_PRODUCT=NO

这是我的运行脚本:

export PATH=/usr/local/bin:$PATH
cd $PROJECT_DIR/parse

parse symbols "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}"
Run Code Online (Sandbox Code Playgroud)

提前感谢您提供有关如何解决此问题的任何想法.

编辑:感谢@udjat的回答,我能够运行我的应用程序并运行脚本(下面),而不会崩溃.并且由于Parse的一些错误修复,测试崩溃报告现在也在运行,尽管仍然有很大的延迟.

新运行脚本:

echo "Parse Crash Reporting"
export PATH=/usr/local/bin:$PATH
CLOUD_CODE_DIR=${PROJECT_DIR}/parse

if [ -d ${CLOUD_CODE_DIR} ]; then
cd ${CLOUD_CODE_DIR}
parse symbols MyApp --path="${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}"
echo "Finished uploading symbol"
else
echo "Unable to upload symbols"
fi
Run Code Online (Sandbox Code Playgroud)

AppDelegate中的崩溃测试:

func crash() {
    NSException(name:NSGenericException, reason:"Everything is ok. This is just a test …
Run Code Online (Sandbox Code Playgroud)

xcode crash-reports ios parse-platform

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

PFFacebookUtils.h(1.7.1)导入不存在的FacebookSDK.h

我在Xcode中为我的项目安装了Parse和Facebook iOS SDK.我的项目是用Swift编写的,所以我在我的桥接标题中有以下内容:

#import <Parse/Parse.h>
#import <ParseUI/ParseUI.h>
#import <ParseCrashReporting/ParseCrashReporting.h>
#import <Intercom/Intercom.h>
#import <ParseFacebookUtils/PFFacebookUtils.h>
Run Code Online (Sandbox Code Playgroud)

当我构建应用程序时,我得到2个错误:

  1. 错误:找不到'FacebookSDK/FacebookSDK.h'文件
  2. 错误:无法导入桥接标头'/Users/ben/AppFolder/MyApp/Bridging-Header.h'

桥接头位于如图所示的目录中,因此它似乎取决于第一个错误.FacebookSDK.h位于PFFacebookUtils.h顶部的#import语句中:

#import <Foundation/Foundation.h>
#import <FacebookSDK/FacebookSDK.h>
#import <Parse/PFConstants.h>
#import <Parse/PFNullability.h>
#import <Parse/PFUser.h>
Run Code Online (Sandbox Code Playgroud)

FacebookSDK.h在Facebook的入门页面中不存在于Parse iOS SDK 1.7.1或Facebook SDK(大概是4.0.1)中,尽管我知道FacebookSDK.h在以前的版本中.

我试过这个SO问题的批准答案但没有成功.我是否需要在我的桥接头中添加一些内容?我应该更改FacebookSDK.h的import语句以引用不同的文件吗?关于如何解决这个问题的其他想法?

ios facebook-ios-sdk parse-platform

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

ResponseSerializer'无法使用Swift 3调用非函数类型'NSHTTPURLResponse?'的值

在更新到Xcode 8 beta 6之前,我一直在使用以下代码而没有问题.它与Alamofire存储库中的此示例类似.今天早上我将我的Alamofire库更新到最新的swift3分支,现在与beta 6兼容.它显示错误:此处Cannot call value of non-function type 'HTTPURLResponse?'存在类似的问题,但它不是基于当前版本的Swift和Alamofire.

根据我的理解,这个错误是因为它认为我试图返回Request属性response而不是函数,response(responseSerializer: <T>, completionHandler: <(Response<T.SerializedObject, T.ErrorObject>) -> Void>)并且它认为这是因为我responseSerializer或者completionHandler传入函数中的类型错误.

如何调整此代码以使其与函数声明和编译器兼容?

我添加@escaping到completionHandler来更正错误.

import Foundation
import Alamofire
import SwiftyJSON

extension Alamofire.Request {
public func responseObject<T: ResponseJSONObjectSerializable>(_ completionHandler: @escaping (Response<T, NSError>) -> Void) -> Self {
    let responseSerializer = ResponseSerializer<T, NSError> { request, res, data, error in

        guard let responseData = data else {
            let …
Run Code Online (Sandbox Code Playgroud)

ios swift alamofire swifty-json swift3

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

快速日期等于30纳秒

我注意到,进行比较的迅捷的两种情况下,Date==它们有资格作为同一日期当在差DateComponents.nanoseconds小于30.例如:

let calendar = Calendar(identifier: .gregorian)
let startComps = DateComponents(year: 2017, month: 1, day: 1, hour: 0, minute: 0, second: 0, nanosecond: 0)
let endComps = DateComponents(year: 2017, month: 1, day: 1, hour: 0, minute: 0, second: 0, nanosecond: 29)

let startDate = calendar.date(from: startComps)!
let endDate = calendar.date(from: endComps)!
print(startDate == endDate)
//prints true, changing 29 to 30 prints false
Run Code Online (Sandbox Code Playgroud)

如果与之比较,行为是相同的startDate.compare(endDate) == .orderedSame.我在文档或标题中找不到任何提及.是否存在30纳秒成为平等的截止的合理原因?

cocoa nsdate ios swift

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