Как воспроизвести аудио, передавая байты из mp3 файла в html <audio>? - PullRequest
0 голосов
/ 22 июня 2019

Я пытаюсь воспроизвести mp3 в html-контроле, передавая байты из преобразования mp3-файла из байтов, но он не воспроизводится полностью, он обрезается на 20% mp3s

Я пытался использовать преобразование байтов Base46 и другие преобразования.

этот код является частью ответа API Google text to voice

// Get the audio contents from the response
ByteString audioContents = syntehsizeResponse.getAudioContent();

// Write the response to the output file.
try (OutputStream outStream = new FileOutputStream("File_"+randomTime+".mp3")) {
    outStream.write(audioContents.toByteArray());
}
//out.print(audioContents.toByteArray());
}

//ServletContext ct = getServletContext();
File imageFile = new File("File_"+randomTime+".mp3");
//InputStream input = ct.getResourceAsStream("F:/File_"+x+".mp3");
response.setHeader("Content-Type", getServletContext().getMimeType(imageFile.getAbsolutePath()));
response.setHeader("Content-Length", String.valueOf(imageFile.length()));
//response.setHeader("Content-Disposition", "inline; filename=\""+ imageFile + "\"");


 FileInputStream is = new FileInputStream(imageFile);
byte[] buffer = new byte[(int)imageFile.length()]; // 32k buffer
int offset = 0;
while ( offset < buffer.length ) {
    int count = is.read(buffer, offset, buffer.length - offset);
    offset += count;
} 
byte[] encoded = Base64.encodeBase64(buffer);
//String encodedFile = Base64.encodeBase64String(encoded);
String encodedString = new String(encoded);
response.getWriter().print(encodedString);
<div style="display:none">
    <audio id="audio" controls>
    <source id="test" src="" type="audio/mp3">
</audio>
</div>
    <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script type="text/javascript">
    function convertTextToSpeech(){
          $.ajax({
            url: 'textToSpeech.jsp',
            async: false,
           data: { textSpeech: document.getElementById("txtSpeech").value },
            success: function( data ) {

                var audio = document.getElementById('audio');
                var source = document.getElementById('test');            
                source.src = "data:audio/mp3;base64,"+data;             
                audio.load(); //call this to just preload the audio without playing
                audio.play();
            }
        });
    }
    </script>

Он должен воспроизводить аудио в html Audio controller, но не может найти правильное решение. Мне нужно только передать в другом формате, а не прямой физический файл.

...