我有一个性能密集的iPhone游戏,我想添加声音.似乎有三个主要选择:(1)AVAudioPlayer
,(2)音频队列和(3)OpenAL.我讨厌编写低级代码页面来播放样本,所以我想使用它AVAudioPlayer
.问题是它似乎杀死了性能 - 我做了一个简单的测量使用CFAbsoluteTimeGetCurrent
,play
消息似乎需要9到30毫秒才能完成.考虑到25毫秒== 40 fps,这非常悲惨.
当然有一种prepareToPlay
方法可以加快速度.这就是为什么我写了一个简单的类,它可以保留几个AVAudioPlayer
s,预先准备它们然后使用准备好的播放器播放样本.没有雪茄,仍然需要上面提到的约20毫秒.
这样的性能对于游戏来说是无法使用的,那么你在iPhone上使用什么来播放声音效果不错的声音呢?我做错了AVAudioPlayer
吗?你用音频队列播放声音吗?(在2.2出现之前,我写了一些类似于AVAudioPlayer的内容,我很乐意放弃这种体验.)你使用OpenAL吗?如果是,是否有一种简单的方法可以使用OpenAL播放声音,还是必须编写代码页?
更新:是的,使用OpenAL播放声音非常简单.
这是将请求参数绑定到路由器的代码.
val testReader: Endpoint[Test] = Endpoint.derive[Test].fromParams
val test: Endpoint[String] = post("test" ? testReader) { t : Test => {
Created("OK")
}}
Run Code Online (Sandbox Code Playgroud)
我正在使用这种方法fromParams
.此方法可以非常酷的方式绑定请求参数.但是,我不知道哪种类似的方式可以绑定雀科中的请求体
提前谢谢了
我已经开始使用Finch和Scala.js开发新项目,后端和前端需要共享一些代码.
我担心fastOptJS
Finch 生产JS的好方法.目前,我正在使用自定义的SBT任务从中复制文件js/target/scala-2.11/*.js
到jvm/src/main/resources
.但我想知道是否有更好的方法来做到这一点.
我看到了很棒的SPA教程,它使用了sbt-play-scalajs插件,但它似乎只适用于Play.
我想知道如何在Finch中将RequestReader和Route绑定在一起.我没有找到一个完整的例子.
这个例子来自finch github,它运行正常.
import io.finch.route._
import com.twitter.finagle.Httpx
val api: Router[String] = get("hello") { "Hello, World!" }
Httpx.serve(":3000", api.toService)
Run Code Online (Sandbox Code Playgroud)
我明白这段代码将获得路径"hello"并将返回响应"hello world"
然后我想将RequestHeader绑定到它.
val doSomethingWithRequest: RequestReader[String] =
for {
foo <- param("foo")
bar <- param("bar")
} yield "u got me"
val api: Router[RequestReader[String]] = Get / "hello" /> doSomethingWithRequest
val server = Httpx.serve(":3000", api.toService)
Run Code Online (Sandbox Code Playgroud)
我认为这段代码意味着如果网址是" http:// localhost:3000/hello?foo = 3 ",它将返回"你找我"的回复.但是,响应状态为404.
我认为我对Route和RequestHeader之间的组合做错了.
也许有人可以帮助我这个,也就是说,分享一些关于这个芬奇的好文章会更好.该版本频繁出现,文档已过时https://finagle.github.io/blog/2014/12/10/rest-apis-with-finch/
我使用Finch和Finagle做了一个非常简单的休息方法:
val getUsers:Endpoint[List[User]] = get("users") {Ok(getAllUsers())}
Http.serve(":8080", getUsers.toService)
Run Code Online (Sandbox Code Playgroud)
并得到此错误:
Error:(50, 32) not enough arguments for method toService: (implicit ts: io.finch.internal.ToService[List[DAL.Instances.User.User]])com.twitter.finagle.Service[com.twitter.finagle.http.Request,com.twitter.finagle.http.Response].
Unspecified value parameter ts.
Http.serve(":8080", getUsers.toService)
^
Run Code Online (Sandbox Code Playgroud)
有关如何解决它的任何想法?
已经为此工作了几天,但仍然不知道发生了什么:得到了 finch Web 服务,build.sbt 依赖项如下所示:
"com.github.finagle" %% "finch-circe" % finchVersion changing(),
"com.github.finagle" %% "finch-core" % finchVersion changing(),
"com.github.finagle" %% "finch-jackson" % finchVersion changing(),
"com.github.finagle" %% "finch-test" % finchVersion changing(),
"com.twitter" %% "twitter-server" % "1.28.0",
Run Code Online (Sandbox Code Playgroud)
Finch 版本是 0.14.0。端点看起来像:
def makeService(statsReceiver: StatsReceiver): Service[Request, Response] = {
//val getUserCounter = statsReceiver.counter("get_user_counter")
(
MyEndpoint.endpoint1()
:+: SomeEndpoint.deleteEntity()
:+: SomeEndpoint.createEntity()
:+: SomeEndpoint.updateEntity()
) handle {
case e: InvalidClientError => Unauthorized(e)
case e: InvalidContextError => BadRequest(e)
case e: RelevanceError => BadRequest(e)
case e: Exception => InternalServerError(e)
} …
Run Code Online (Sandbox Code Playgroud) 我正在使用Finch,Circe和Sangria为API构建GraphQL端点.将variables
通过在GraphQL查询来基本上是任意的JSON对象(假设没有嵌套).例如,在我的测试代码中String
,这是两个例子:
val variables = List(
"{\n \"foo\": 123\n}",
"{\n \"foo\": \"bar\"\n}"
)
Run Code Online (Sandbox Code Playgroud)
Sangria API期望这些类型Map[String, Any]
.
我已经尝试了很多方法但到目前为止Decoder
还没能在Circe 写一个.任何帮助赞赏.
我想在我的服务器上做一些Python脚本,我可以通过DBus Python库与finch
(通过pidgin
界面看起来像这样的控制台界面)进行通信,links2
以发送消息或检查好友的在线状态.
如果在X中执行此操作,则此方法有效.finch
在X终端中运行并在另一个终端中运行Python脚本,没有错误/异常.
但如果你没有X,你必须finch
在TTY1(ctrl + alt + f1)和TTY2中的python脚本(ctrl + alt + f2)中运行,但python脚本将失败.
以下是该脚本的前几行:
import dbus
bus = dbus.SessionBus() # gives EXCEPTION error
obj = bus.get_object("im.pidgin.purple.PurpleService", "/im/pidgin/purple/PurpleObject")
...
Run Code Online (Sandbox Code Playgroud)
EXCEPTION错误是:
dbus.exceptions.DBusException: org.freedesktop.DBus.Error.Spawn.ExecFailed: dbus-launch failed to autolaunch D-Bus session: Autolaunch error: X11 initialization failed.`
Run Code Online (Sandbox Code Playgroud)
我读到某个地方,你可能需要finch
在同一个TTY中运行和脚本.但是我无法正确测试,因为它不像cd
在一行和ls
下一行上运行.你键入finch
,它运行,你不能再键入任何其他命令,如links2
.我尝试运行,finch &
但似乎暂停finch
,并且运行脚本也会出现相同的错误.
解?谢谢.
这是一个简单的雀科服务器,使用circe作为解码器:
import com.twitter.finagle.http.RequestBuilder
import com.twitter.io.Buf
import io.circe.generic.auto._
import io.finch._
import io.finch.circe._
case class Test(myValue: Int)
val api = post("foo" :: body.as[Test]) { test: Test => Ok(test) }
val bodyPost = RequestBuilder()
.url("http://localhost:8080/foo")
.buildPost(Buf.Utf8("""{ "myValue" : 42 }"""))
api.toService.apply(bodyPost).onSuccess { response =>
println(s"$response: ${response.contentString}")
}
// output: Response("HTTP/1.1 Status(200)"): {"myValue":42}
Run Code Online (Sandbox Code Playgroud)
将内容myValue
改为Option
开箱即用,给出与上述代码相同的结果.但是,将其更改为scalaz.Maybe
:
import scalaz.Maybe
case class Test(myValue: Maybe[Int])
Run Code Online (Sandbox Code Playgroud)
结果是:
响应("HTTP/1.1状态(400)"):{"message":"正文无法转换为测试:CNil:El(DownField(myValue),true,false)."}
我该如何实现所需的编码器/解码器?