У меня есть датчик, который улавливает звуки сердца, и моя проблема в том, что я получаю свои данные в байтах, а затем преобразую их в плавающие. Я просто хочу собрать данные и поместить их в аудиофайл, а затем воспроизвести из файлового менеджера. Я перепробовал много способов, но был смущен ни одной из попыток, которые я сделал, сработал. ребята, мне очень нужна ваша помощь. PS .. я пробовал MediaPlayer и не работал. Я буду так благодарен, если кто-то может решить эту проблему. для большей ясности, моя проблема в том, что я получаю данные, которые содержат сигнал о тоне сердца, его ударах и так далее. Я получаю данные с помощью Bluetooth и, когда все готово, я конвертирую данные в числа, плаваю. Я пытаюсь сохранить эти данные в аудиофайл при получении данных, а затем воспроизводить их, когда нажимаю кнопку «Стоп». По сути, это похоже на запись данных в виде аудио, а затем воспроизведение. MediaRecorder API в android позволяет вам делать это, но через телефон mi c, и я не хочу, чтобы mi c. Мои данные готовы, но как создать аудиофайл и скопировать в него данные sh и воспроизвести их
int BufferElements2Rec = 1024; // want to play 2048 (2K) since 2 bytes we use only 1024
int BytesPerElement = 2; // 2 bytes in 16bit format
private void startRecording() {
recorder = new AudioRecord(MediaRecorder.AudioSource.MIC,
RECORDER_SAMPLERATE, RECORDER_CHANNELS,
RECORDER_AUDIO_ENCODING, BufferElements2Rec * BytesPerElement);
recorder.startRecording();
isRecording = true;
recordingThread = new Thread(new Runnable() {
public void run() {
writeAudioDataToFile();
}
}, "AudioRecorder Thread");
recordingThread.start();
}
//convert short to byte
private byte[] short2byte(short[] sData) {
int shortArrsize = sData.length;
byte[] bytes = new byte[shortArrsize * 2];
for (int i = 0; i < shortArrsize; i++) {
bytes[i * 2] = (byte) (sData[i] & 0x00FF);
bytes[(i * 2) + 1] = (byte) (sData[i] >> 8);
sData[i] = 0;
}
return bytes;
}
private void writeAudioDataToFile() {
// Write the output audio in byte
String filePath = getExternalCacheDir().getAbsolutePath();
filePath+="/audiorecordtest.3gp";
int bufferSize = AudioRecord.getMinBufferSize(RECORDER_SAMPLERATE,
RECORDER_CHANNELS, RECORDER_AUDIO_ENCODING);
byte sData[] = new byte[bufferSize];
FileOutputStream os = null;
try {
os = new FileOutputStream(filePath);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
while (isRecording) {
// gets the voice output from microphone to byte format
recorder.read(sData, 0, BufferElements2Rec);
System.out.println("Short wirting to file" + sData.toString());
try {
// // writes the data to file from buffer
// // stores the voice buffer
byte bData[] = audioBuffer;
os.write(bData, 0, BufferElements2Rec * BytesPerElement);
} catch (IOException e) {
e.printStackTrace();
}
}
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private void stopRecording() {
// stops the recording activity
if (null != recorder) {
isRecording = false;
recorder.stop();
recorder.release();
recorder = null;
recordingThread = null;
}
}