fix: voice message display, playback, recording UI, audio settings
- messagelist: parse content_type from JSON when DB column is empty - messagelist: recording indicator (red dot + timer + cancel button) - messagedelegate: editorEvent for play/pause toggle + progress bar - messagedelegate: VoicePlayState tracking with QTimer - InputBar: proper recordingContext (mediaDir + channelId) - DbManager: dbPath() for media directory resolution - AudioRecorder: peakLevel() for mic level meter - VoiceEncoder: codec quality presets (Low/Standard/High) - audiodevicesettingspage: Default device option first - audiodevicesettingspage: mic level meter + test microphone - audiodevicesettingspage: test speaker button - audiodevicesettingspage: codec preset combo (Low/Standard/High) - mainwindow: load opus_codec_preset from ui_state on startup
This commit is contained in:
1 parent
4fde0b0325
commit
850a260aac
14 files changed
+483
-57
No files matched your search
@@ -19,6 +19,13 @@ void audioCaptureCallback(ma_device* pDevice, void* pOutput, const void* pInput,
|
||||
size_t add = (size_t)frameCount * (size_t)self->m_channels;
|
||||
self->m_pcmBuffer.resize(cur + add);
|
||||
std::memcpy(self->m_pcmBuffer.data() + cur, src, add * sizeof(int16_t));
|
||||
|
||||
float maxAbs = 0.0f;
|
||||
for (unsigned int i = 0; i < frameCount * (unsigned int)self->m_channels; i++) {
|
||||
float v = (float)abs(src[i]) / 32768.0f;
|
||||
if (v > maxAbs) maxAbs = v;
|
||||
}
|
||||
self->m_peakLevel = maxAbs;
|
||||
}
|
||||
|
||||
AudioRecorder::AudioRecorder(QObject* parent)
|
||||
@@ -127,3 +134,9 @@ void AudioRecorder::stopRecording() {
|
||||
int AudioRecorder::durationMs() const {
|
||||
return m_elapsedMs;
|
||||
}
|
||||
|
||||
float AudioRecorder::peakLevel() const {
|
||||
float v = m_peakLevel;
|
||||
m_peakLevel = 0.0f;
|
||||
return v;
|
||||
}
|
||||
Reference in new issue
Block a user