我正在创建一个节拍器作为更大的应用程序的一部分,我有一些非常短的wav文件用作单独的声音.我想使用AVAudioEngine,因为NSTimer存在严重的延迟问题,而Core Audio在Swift中实现起来似乎相当艰巨.我正在尝试以下方法,但我目前无法实现前3个步骤,我想知道是否有更好的方法.
代码大纲:
audioPlayer.scheduleBuffer(buffer, atTime:nil, options:.Loops, completionHandler:nil)到目前为止,我已经能够播放单个声音文件的循环缓冲区(步骤4),但我无法从文件数组构建缓冲区或以编程方式创建静默,也没有在StackOverflow上找到任何答案解决这个问题.所以我猜这不是最好的方法.
我的问题是:是否可以使用AVAudioEngine安排一系列低延迟的声音,然后循环该序列?如果没有,哪个框架/方法最适合在Swift编码时调度声音?
我有一个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中为我的项目安装了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个错误:
桥接头位于如图所示的目录中,因此它似乎取决于第一个错误.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语句以引用不同的文件吗?关于如何解决这个问题的其他想法?
在更新到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) 我注意到,进行比较的迅捷的两种情况下,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纳秒成为平等的截止的合理原因?