0

我正在使用 JAVA 开发一个 android 应用程序。我想要的只是

  1. 录制一首歌曲并生成其哈希(CODE),然后查询 echoprint 服务器以获取匹配项。
  2. 如果未找到匹配项,则将其上传到服务器(摄取)以供将来参考。

我已经能够实现第一部分。有人可以向我推荐 JAVA 的第二部分吗?(PS:我已经看到如何使用 python 代码来做到这一点——但这对我的情况没有帮助。)

另一个问题,我可以通过全球 echoprint 服务器实现第二个目标吗?或者,我需要自己设置一个吗?

我使用的参考资料是:

http://masl.cis.gvsu.edu/2012/01/25/android-echoprint/

https://github.com/gvsumasl/EchoprintForAndroid

4

1 回答 1

0

要将歌曲插入 echoprint 服务器数据库,您需要做的就是调用该ingest方法。基本上,它只是一个带有正确 json 正文的 HTTP POST 请求。这是我正在使用的 Scala 代码(Java 将非常相似):

import EasyJSON.JSON
import EasyJSON.ScalaJSON
import dispatch.Defaults.executor
import dispatch._
class EchoprintAPI {

  val API_URL = "http://your.api.server"

  def queryURL(code: String) = url(s"$API_URL/query?fp_code=$code")

  def query(code: String): scala.concurrent.Future[ScalaJSON] = {
    jsonResponse(queryURL(code))
  }

  def ingest(json: ScalaJSON, trackId: String): scala.concurrent.Future[ScalaJSON] = {
    val metadata = json("metadata")
    val request = url(s"$API_URL/ingest").POST
      .addParameter("fp_code", json("code").toString)
      .addParameter("artist", metadata("artist").toString)
      .addParameter("release", metadata("release").toString)
      .addParameter("track", metadata("title").toString)
      .addParameter("codever", metadata("version").toString)
      .addParameter("length", metadata("duration").toString)
      .addParameter("genre", metadata("genre").toString)
      .addParameter("bitrate", metadata("bitrate").toString)
      .addParameter("source", metadata("filename").toString)
      .addParameter("track_id", trackId)
      .addParameter("sample_rate", metadata("sample_rate").toString)
    jsonResponse(request)
  }

  def delete(trackId: String): scala.concurrent.Future[ScalaJSON] = {
    jsonResponse(url(s"$API_URL/query?track_id=$trackId").DELETE)
  }

  protected def jsonResponse(request: dispatch.Req): scala.concurrent.Future[EasyJSON.ScalaJSON] = {
    val response = Http(request OK as.String)
    for (c <- response) yield JSON.parseJSON(c)
  }
} 

要生成指纹代码,您可以使用echoprint-codegen命令行调用或使用Java JNI 与 C lib 集成

于 2014-05-06T16:52:55.423 回答