chatgui: диагностика воспроизведения голосовых сообщений (Windows)
- sound_manager: ma_engine_init/playRawPcm логируют через DEBUG_* (qWarning/qDebug терялись в GUI-приложении без консоли); детальный результат старта PCM (rc/is_playing/cursor) - main: ранняя инициализация лога в GUI-потоке до SoundManager::init, чтобы диагностика инициализации попала в файл - messagedelegate: лог клика по Play/timeline (filePath/dlState/существует ли файл) - voiceplayback: лог заголовка opus (sr/ch/frameSamples) Попутные правки: - u_async: фикс двойного close wakeup_pipe (eventfd/Windows) - chat_core: NULL-guard в get_db/is_initialized - android: sqlite открывается в utun_instance_init, cleanup stale-потока без утечки fd - android SettingsScreen: компактная раскладка имени интерфейса
This commit is contained in:
1 parent
19dc076528
commit
9793733cd5
8 files changed
+76
-51
No files matched your search
@@ -21,14 +21,21 @@ bool SoundManager::init() {
|
||||
ma_engine* engine = new ma_engine;
|
||||
ma_result result = ma_engine_init(NULL, engine);
|
||||
if (result != MA_SUCCESS) {
|
||||
qWarning("SoundManager: ma_engine_init failed (%d)", result);
|
||||
DEBUG_ERROR(DEBUG_CATEGORY_GENERAL, "SoundManager: ma_engine_init failed (%d)", result);
|
||||
delete engine;
|
||||
return false;
|
||||
}
|
||||
m_engine = engine;
|
||||
m_context = ma_device_get_context(ma_engine_get_device(engine));
|
||||
m_initialized = true;
|
||||
qDebug("SoundManager: initialized (engine=%p, context=%p)", (void*)engine, (void*)m_context);
|
||||
|
||||
ma_device* dev = ma_engine_get_device(engine);
|
||||
DEBUG_INFO(DEBUG_CATEGORY_GENERAL,
|
||||
"SoundManager: initialized engine=%p ctx=%p dev='%s' fmt=%d ch=%u sr=%u internalSr=%u",
|
||||
(void*)engine, (void*)m_context,
|
||||
dev ? dev->playback.name : "?", dev ? (int)dev->playback.format : -1,
|
||||
dev ? dev->playback.channels : 0, dev ? dev->sampleRate : 0,
|
||||
dev ? dev->playback.internalSampleRate : 0);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -78,7 +85,8 @@ void SoundManager::setEvent(const QString& name, bool enabled, float volume) {
|
||||
es.enabled = enabled;
|
||||
es.volume = volume;
|
||||
m_eventSettings[name] = es;
|
||||
qDebug("SoundManager: event '%s' enabled=%d vol=%.2f", qPrintable(name), enabled, volume);
|
||||
DEBUG_DEBUG(DEBUG_CATEGORY_GENERAL, "SoundManager: event '%s' enabled=%d vol=%.2f",
|
||||
qPrintable(name), enabled, volume);
|
||||
}
|
||||
|
||||
SoundManager::EventSettings SoundManager::eventSettings(const QString& name) const {
|
||||
@@ -191,12 +199,14 @@ ma_context* SoundManager::context() {
|
||||
|
||||
void SoundManager::playRawPcm(const int16_t* pcm, int sampleCount, int sampleRate, int channels) {
|
||||
if (!m_engine || !m_initialized) {
|
||||
DEBUG_WARN(DEBUG_CATEGORY_DEBUG, "SoundManager::playRawPcm: not initialized");
|
||||
DEBUG_WARN(DEBUG_CATEGORY_GENERAL, "SoundManager::playRawPcm: not initialized (engine=%p init=%d)",
|
||||
(void*)m_engine, (int)m_initialized);
|
||||
return;
|
||||
}
|
||||
clearCurrentPcm();
|
||||
m_currentPcmSampleRate = sampleRate;
|
||||
DEBUG_DEBUG(DEBUG_CATEGORY_DEBUG, "SoundManager::playRawPcm: %d samples %dHz %dch", sampleCount, sampleRate, channels);
|
||||
DEBUG_DEBUG(DEBUG_CATEGORY_DEBUG, "SoundManager::playRawPcm: %d samples %dHz %dch volume=%.2f",
|
||||
sampleCount, sampleRate, channels, m_volume);
|
||||
|
||||
ma_audio_buffer_config bufCfg = ma_audio_buffer_config_init(
|
||||
ma_format_s16, (ma_uint32)channels, (ma_uint64)sampleCount, pcm, NULL);
|
||||
@@ -204,7 +214,7 @@ void SoundManager::playRawPcm(const int16_t* pcm, int sampleCount, int sampleRat
|
||||
m_currentPcmBuffer = buf;
|
||||
ma_result r = ma_audio_buffer_init_copy(&bufCfg, buf);
|
||||
if (r != MA_SUCCESS) {
|
||||
DEBUG_WARN(DEBUG_CATEGORY_DEBUG, "SoundManager: audio_buffer_init_copy failed (%d)", r);
|
||||
DEBUG_WARN(DEBUG_CATEGORY_GENERAL, "SoundManager: audio_buffer_init_copy failed (%d)", r);
|
||||
delete buf; m_currentPcmBuffer = nullptr;
|
||||
return;
|
||||
}
|
||||
@@ -212,14 +222,20 @@ void SoundManager::playRawPcm(const int16_t* pcm, int sampleCount, int sampleRat
|
||||
m_currentPcmSound = new ma_sound;
|
||||
r = ma_sound_init_from_data_source(m_engine, (ma_data_source*)buf, 0, nullptr, m_currentPcmSound);
|
||||
if (r != MA_SUCCESS) {
|
||||
DEBUG_WARN(DEBUG_CATEGORY_DEBUG, "SoundManager: PCM sound init failed (%d)", r);
|
||||
DEBUG_WARN(DEBUG_CATEGORY_GENERAL, "SoundManager: PCM sound init failed (%d)", r);
|
||||
ma_audio_buffer_uninit(buf); delete buf; m_currentPcmBuffer = nullptr;
|
||||
delete m_currentPcmSound; m_currentPcmSound = nullptr;
|
||||
return;
|
||||
}
|
||||
|
||||
ma_sound_set_volume(m_currentPcmSound, m_volume);
|
||||
ma_sound_start(m_currentPcmSound);
|
||||
r = ma_sound_start(m_currentPcmSound);
|
||||
ma_uint64 cursor = 0;
|
||||
ma_sound_get_cursor_in_pcm_frames(m_currentPcmSound, &cursor);
|
||||
DEBUG_INFO(DEBUG_CATEGORY_GENERAL,
|
||||
"SoundManager::playRawPcm: started rc=%d is_playing=%d cursor=%llu/%d",
|
||||
(int)r, (int)ma_sound_is_playing(m_currentPcmSound),
|
||||
(unsigned long long)cursor, sampleCount);
|
||||
}
|
||||
|
||||
void SoundManager::pauseCurrentPcm() {
|
||||
|
||||
Reference in new issue
Block a user