mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge.git
synced 2026-07-31 07:44:24 +02:00
Zepp OS: Decode voice memo files
This commit is contained in:
+1
-2
@@ -28,11 +28,10 @@ import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEvent;
|
||||
import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator;
|
||||
import nodomain.freeyourgadget.gadgetbridge.devices.huami.zeppos.ZeppOsCoordinator;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.zeppos.services.ZeppOsAssistantService;
|
||||
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
|
||||
|
||||
public abstract class AbstractZeppOsService {
|
||||
private static final Logger LOG = LoggerFactory.getLogger(ZeppOsAssistantService.class);
|
||||
private static final Logger LOG = LoggerFactory.getLogger(AbstractZeppOsService.class);
|
||||
|
||||
private final ZeppOsSupport mSupport;
|
||||
private boolean encrypted;
|
||||
|
||||
+1
-1
@@ -309,7 +309,7 @@ public class ZeppOsSupport extends HuamiSupport implements ZeppOsFileTransferSer
|
||||
|
||||
@Override
|
||||
public void onTestNewFunction() {
|
||||
setRawSensor(!rawSensor);
|
||||
voiceMemosService.requestList();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+26
-1
@@ -19,6 +19,8 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.huami.zeppos.servic
|
||||
import android.os.Handler;
|
||||
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
import org.concentus.OpusDecoder;
|
||||
import org.concentus.OpusException;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@@ -51,7 +53,7 @@ public class ZeppOsVoiceMemosService extends AbstractZeppOsService {
|
||||
private final Handler handler = new Handler();
|
||||
|
||||
public ZeppOsVoiceMemosService(final ZeppOsSupport support) {
|
||||
super(support, false);
|
||||
super(support, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -140,4 +142,27 @@ public class ZeppOsVoiceMemosService extends AbstractZeppOsService {
|
||||
write("voice memo download finish", CMD_DOWNLOAD_FINISH_REQUEST);
|
||||
}
|
||||
}
|
||||
|
||||
private void decode(final byte[] opusBytes) throws OpusException {
|
||||
final int SAMPLE_RATE = 16000;
|
||||
final int NUM_CHANNELS = 1;
|
||||
final int FRAME_SIZE = 320;
|
||||
|
||||
final OpusDecoder opusDecoder = new OpusDecoder(SAMPLE_RATE, NUM_CHANNELS);
|
||||
final ByteBuffer buf = ByteBuffer.wrap(opusBytes).order(ByteOrder.BIG_ENDIAN);
|
||||
|
||||
final byte[] pcm = new byte[FRAME_SIZE * 2];
|
||||
|
||||
while (buf.hasRemaining()) {
|
||||
final int len = buf.getInt();
|
||||
final int unk = buf.getInt();
|
||||
final byte[] arr = new byte[len];
|
||||
buf.get(arr);
|
||||
|
||||
int decode = opusDecoder.decode(arr, 0, arr.length, pcm, 0, FRAME_SIZE, false);
|
||||
|
||||
// ffmpeg -f s16le -ar 16k -ac 1 -i memo.pcm memo.wav
|
||||
// outputStream.write(pcm, 0, FRAME_SIZE * 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user