Как записать Short[] в выходной файл wav в Android?
Я пытаюсь записать Short[] в аудиофайл wav с использованием потока вывода, но файл содержит только царапающий звук. Причина, по которой я использую short[], а не byte[], заключается в том, что я пытаюсь использовать внешнюю библиотеку, которая обеспечивает обнаружение голосовой активности. Я добавил wav-заголовок, представленный в Android Audio Record, в wav, и я попытался преобразовать Short[] в byte[], используя преобразование короткого массива из аудиозаписи в байтовый массив без ухудшения качества звука? но ни одна из приведенных выше ссылок не смогла мне помочь. Вот мой код:
private class ProcessVoice implements Runnable {
@Override
public void run() {
File fl = new File(filePath, AUDIO_RECORDING_FILE_NAME);
try {
os = new BufferedOutputStream(new FileOutputStream(fl));
} catch (FileNotFoundException e) {
Log.w(TAG, "File not found for recording ");
}
android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_AUDIO);
while (!Thread.interrupted() && isListening && audioRecord != null) {
short[] buffer = new short[vad.getConfig().getFrameSize().getValue() * getNumberOfChannels() * 2];
audioRecord.read(buffer, 0, buffer.length);
isSpeechDetected(buffer);
}
}
private void isSpeechDetected(final short[] buffer) {
vad.isContinuousSpeech(buffer, new VadListener() {
@Override
public void onSpeechDetected() {
callback.onSpeechDetected();
bytes2 = new byte[buffer.length * 2];
ByteBuffer.wrap(bytes2).order(ByteOrder.LITTLE_ENDIAN).asShortBuffer().put(buffer);
//Log.w(TAG, String.valueOf(buffer));
try {
// // writes the data to file from buffer
// // stores the voice buffer
os.write(header, 0, 44);
working = true;
os.write(bytes2, 0, bytes2.length);
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onNoiseDetected() {
callback.onNoiseDetected();
if(working == true){
working = false;
try {
doneRec();
} catch (IOException e) {
e.printStackTrace();
}
}
//Log.w(TAG, String.valueOf(bytes2));
}
});
}
}