unify voice waveform format: base64 wf={100chars};dur={ms}; for both desktop and Android
- inputbar.cpp: CSV waveform → base64 log-scale (same as voice_recorder.c)
- messagelist.cpp: sendVoiceMessage removes displayName|dur_sec| prefix, uses wfStr directly
setVoiceMessageRoles: decodes new format wf={base64};dur={ms};|... from data field
- messagedelegate.cpp: waveform values now pre-normalized 0..1, no log recalculation needed
- VoiceEncoder: no changes needed (was already compatible)
Both platforms now store identical format in chat_msg_submit.data:
wf=ABCDef...100chars;dur=NNNN;|file_size|block_size|num_blocks|sigs_hex
This commit is contained in:
1 parent
b65a091b00
commit
4ffa59d968
3 files changed
+50
-39
No files matched your search
@@ -250,7 +250,8 @@ void InputBar::onPttReleased() {
|
||||
m_voiceFilePath = QString("%1/%2_%3_%4.%5").arg(mediaPath, blk.dt, blk.basename, blk.suffix, blk.ext);
|
||||
|
||||
const auto& wf = m_recorder->waveformLevels();
|
||||
QString wfStr;
|
||||
QString wfStr = "wf=";
|
||||
static const char b64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
||||
int N = (int)wf.size();
|
||||
for (int i = 0; i < 100; i++) {
|
||||
int s = i * N / 100, e = (i + 1) * N / 100;
|
||||
@@ -260,9 +261,12 @@ void InputBar::onPttReleased() {
|
||||
float sum = 0; int cnt = 0;
|
||||
for (int j = s; j < e; j++) { sum += wf[j]; cnt++; }
|
||||
float v = cnt > 0 ? sum / cnt : 0;
|
||||
if (i > 0) wfStr += ',';
|
||||
wfStr += QString::number(v, 'f', 3);
|
||||
float db = v > 0.00001f ? 20.0f * log10f(v) : -100.0f;
|
||||
int idx = (int)((db + 60.0f) / 60.0f * 64.0f);
|
||||
if (idx < 0) idx = 0; if (idx > 63) idx = 63;
|
||||
wfStr += b64[idx];
|
||||
}
|
||||
wfStr += QString(";dur=%1;").arg(durationMs);
|
||||
GUI_INFO("InputBar: voice message ready: dt=%s stem=%s blocks=%d dur=%.1fs",
|
||||
qPrintable(blk.dt), qPrintable(blk.basename), blk.numBlocks, durationSec);
|
||||
emit sendVoiceMessage(blk.dt, blk.basename, blk.suffix, blk.ext,
|
||||
|
||||
Reference in new issue
Block a user