@drew010のボタンの助けは素晴らしかったと思います!! ありがとうございました。
SimpleCaptcha(16000Hz)とフラッシュプレーヤー(11025Hz)でサポートされているオーディオ間のレート周波数サポートに関する同じ問題を解決するために、代わりにsimplecaptchaソースを変更するか、フラッシュプログラミングで解決してみました。
私のキャプチャ実装にはカスタムオーディオキャプチャサーブレット(simplecaptchaでサポートされている)があるため、この投稿で@Claudeが提供するヒントを使用して、 tritonuslibを使用してオーディオサンプルレートを変換しました。コードの一部は次のようになります。
AudioFormat outDataFormat = new AudioFormat((float) 11025.0, (int) 16, (int) 1, true, false);
AudioInputStream lowResAIS = AudioSystem.getAudioInputStream(outDataFormat, audioCapthca.getChallenge().getAudioInputStream());
以下の私のキャプチャサーブレットコード:
public class AudioCaptchaServlet extends HttpServlet {
@Override protected void doGet(HttpServletRequest req,
HttpServletResponse resp) throws ServletException, IOException {
Map<Integer, String[]> voicesMap = new HashMap<Integer, String[]>();
String[] fileLocs0 = {"/captcha/pt_BR/0.wav"};
String[] fileLocs9 = {"/captcha/pt_BR/1.wav"};
(...)
voicesMap.put(0, fileLocs0);
voicesMap.put(1, fileLocs1);
(...)
VoiceProducer voiceProducer = new RandomNumberVoiceProducer(voicesMap);
AudioCaptcha ac = new AudioCaptcha.Builder()
.addAnswer()
.addNoise()
.addVoice(voiceProducer)
.build();
req.getSession().setAttribute(AudioCaptcha.NAME, ac.getAnswer());
//Converte Sons com bitrate de 16000Hz (simplecaptcha) para 11025Hz (suportada pelo flash player)
AudioFormat outDataFormat = new AudioFormat((float) 11025.0, (int) 16, (int) 1, true, false);
AudioInputStream lowResAIS = AudioSystem.getAudioInputStream(outDataFormat, ac.getChallenge().getAudioInputStream());
CaptchaServletUtil.writeAudio(resp, new Sample(lowResAIS));
}
@Override protected void doPost(HttpServletRequest req,
HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}