2016-12-15 28 views
2

私はWatson APIを使って遊んでいるので、私はText2Speechサービスを使ってサービスからオーディオストリーム(ファイル)を取得しています。私はすでにコードでファイルを取得しますが、私のMIMEには後で何も含まれていません。私はこのメソッドを以下に呼んだ後に文書を保存します。バイトコンテンツをMIMEに直接ストリーミングするための最良の方法は高く評価されます。Notes文書のMIMEにバイナリレスポンス(ストリーム)を直接書き込む

public void getSpeechFromText(AveedoContext aveedoContext, Document doc, String fieldName, String text, String voiceName) { 
    try { 
     Session session = aveedoContext.getXspHelper().getSession(); 
     session.setConvertMIME(false); 
     TextToSpeech service = new TextToSpeech(); 
     String username = watsonSettings.getTextToSpeechUsername(); 
     String password = watsonSettings.getTextToSpeechPassword(); 
     if (username.isEmpty() || password.isEmpty()) { 
      throw new AveedoException("No credentials provided for service"); 
     } 
     service.setUsernameAndPassword(username, password); 
     MIMEEntity mime = doc.getMIMEEntity(fieldName); 
     if (mime == null) { 
      mime = doc.createMIMEEntity(fieldName); 
     } 

     // local proxy? 
     if (!Util.isEmpty(customEndpoint)) { 
      // service.setEndPoint(customEndpoint + "/speech/"); 
     } 

     Voice voice = Voice.getByName(voiceName); 
     AudioFormat audio = AudioFormat.WAV; 

     System.out.println("Fieldname: " + fieldName + "SPEECH: " + text + ", Voice: " + voice.getName() + ", Format: " 
       + audio.toString()); 

     InputStream stream = service.synthesize(text, voice, audio).execute(); 
     InputStream in = WaveUtils.reWriteWaveHeader(stream); 

     Stream out = session.createStream(); 
     byte[] buffer = new byte[1024]; 
     int length; 
     while ((length = in.read(buffer)) > 0) { 
      out.write(buffer); 
     } 
     mime.setContentFromBytes(out, "audio/wav", MIMEEntity.ENC_IDENTITY_BINARY); 
     out.close();    
     session.setConvertMIME(true); 
     in.close(); 
     stream.close(); 

    } catch (Throwable e) { 
     aveedoLogger.error("Error calling Watson service (text to speech)", e); 
     e.printStackTrace(); 
    } 
} 
+0

'out.setPosition(0)'を追加しようとしましたか? – stwissel

+0

これを試してみましたが違いはありません –

+0

これは何を意味しますか?これを使用しないときの違いは何ですか? –

答えて

2

私は子供のMIMEエンティティを作成する必要があると信じています。私は、画像の添付のために私のアプリケーションの次のコードを使用します:

+0

私はこれを試しましたが、フィールドにも文書内に作成されていません –

+0

ああ待って...私は即座にそれを保存すると、フィールドがそこにある場合。後で別の保存アクションで保存することはできません。 –

関連する問題