1
短いオーディオファイルからStringを取得するために、speech recognition API by Microsoftがテストされました。このAPIは、整形式のメディアタイプを必要としません(RetrofitまたはOkhttpの場合のみ、本当に整形式なのですか?)。IllegalArgumentExceptionを解決するにはRetrofitで不正なコンテンツタイプ:......
Content-Type: audio/wav; codec=audio/pcm; samplerate=16000
このように、以下のようなRetrofitインターフェイス用に設定しました。
@Multipart
@POST("/speech/recognition/{recognitionMode}/cognitiveservices/v1")
Observable<Recognition> getRecgnition(
@Header("Ocp-Apim-Subscription-Key") String subscriptionKey,
@Header("Content-Type") String contentType,
@Path("recognitionMode") String recognitionMode,
@Query("language") String language,
@Query("format") String format,
@Part("file")RequestBody file
);
は、それから私は、このヘッダとオーディオファイルを送信するための要求でエラーを持っています。私はその理由を知っているので、はnull
を返すだろうからMatcher#lookingAt
はfalse
を返すだろうから。
さて、私は理由がある。この例外を無視する方法はわかりません。 このエラーを回避するためのアドバイスをお願いします。
java.lang.IllegalArgumentException: Malformed content type: audio/wav;codec=audio/pcm; samplerate=16000
at retrofit2.RequestBuilder.addHeader(RequestBuilder.java:81)
at retrofit2.ParameterHandler$Header.apply(ParameterHandler.java:79)
at retrofit2.ServiceMethod.toRequest(ServiceMethod.java:111)
at retrofit2.OkHttpCall.createRawCall(OkHttpCall.java:184)
at retrofit2.OkHttpCall.execute(OkHttpCall.java:168)
at retrofit2.adapter.rxjava.CallExecuteOnSubscribe.call(CallExecuteOnSubscribe.java:40)
at retrofit2.adapter.rxjava.CallExecuteOnSubscribe.call(CallExecuteOnSubscribe.java:24)
at retrofit2.adapter.rxjava.BodyOnSubscribe.call(BodyOnSubscribe.java:36)
at retrofit2.adapter.rxjava.BodyOnSubscribe.call(BodyOnSubscribe.java:28)
at rx.Observable.unsafeSubscribe(Observable.java:10256)
at rx.internal.operators.OperatorSubscribeOn$SubscribeOnSubscriber.call(OperatorSubscribeOn.java:100)
at rx.internal.schedulers.CachedThreadScheduler$EventLoopWorker$1.call(CachedThreadScheduler.java:230)
at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:428)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:272)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:762)