majestic icon indicating copy to clipboard operation
majestic copied to clipboard

Crackling sound in the background

Open kasitoru opened this issue 3 years ago • 17 comments

Во время RTSP стрима звук с микрофона воспроизводится с фоновым треском (похоже на гул трансформатора). Если уменьшить громкость, треск не пропадает, просто становится тише (как и полезные звуки). На родной прошивке такого не наблюдается, звук чистый.

https://github.com/OpenIPC/device-mjsxj02hl

Hardware Processor hi3518ev300 Family hi3516ev200 Sensor jxf22_i2c Flash 16 MB

Firmware Version 2.2.11.05-lite Build master+fe6cf7e8, 2022-11-05 Majestic HEAD+1c1718e, 2022-11-05

kasitoru avatar Nov 05 '22 20:11 kasitoru

На камерах HS303 v1 такая-же проблема при уровне громкости 50+

ZigFisher avatar Nov 05 '22 20:11 ZigFisher

На камерах HS303 v1 такая-же проблема при уровне громкости 50+

Здесь уменьшение уровня громкости не спасает - гул просто становится тише, но с ним и посторонние звуки тоже заглушаются. Например при 30% гул слабый, но присутствует. При этом, чувствительность микрофона такая, что камера с родной прошивкой, находящаяся в другой комнате, слышит лучше, чем эта, которая лежит на столе передо мной.

kasitoru avatar Nov 05 '22 20:11 kasitoru

Сделайте дамп cat /proc/umap/a* на родной прошивке и сравните с настройками на OpenIPC, с большой долей вероятности на аудио входе применены разные настройки (в том числе, возможно, эквалайзер)

widgetii avatar Nov 06 '22 06:11 widgetii

Родная прошивка https://pastebin.com/r9EphsF7 OpenIPC https://pastebin.com/ew1TaL0x

Разница как минимум в кодеке (на родной g711a) и в некоторых числовых значениях. А как все это изменить для OpenIPC?

kasitoru avatar Nov 06 '22 09:11 kasitoru

Ключевая разница в уровне усиления сигнала и включенном голосовом эквалайзере:

 -----ACODEC PARAM--------------------------------------------------------------
    LGain(dB)   RGain(dB) DacLVol(dB) DacRVol(dB) AdcLVol(dB) AdcRVol(dB) MicLMut MicRMut DacLMut DacRMut  BoostL  BoostR
-      30.0      30.0         0           0          10          10           0       0       0       0       1       1
+      30.0      30.0         0           0           0           0           0       0       0       0       1       1
 -----AI CHN VQE STATUS0---------------------------------------------------------
 AiDev AiChn   State bVqe workmod    RATE  PoiNum bAgc  bEq bHpf bRnr bHdr bDrc  WrFile
-    0     0  enable    Y    comm    8kHZ     320    N    N    N    N    N    N       N
+    0     0  enable    N    comm  (null)       0    N    N    N    N    N    N       N

Эквалайзер будет добавлен в ultimate прошивку в будущем в связи с отсутствием места в lite (проблема обсуждалась в группе Majestic tests), настроить параметры Acodec вы можете самостоятельно через вызов соответствующих ioctl, воспользовавшись кодом из SDK

widgetii avatar Nov 06 '22 10:11 widgetii

Значения AdcLVol/AdcRVol влияют только на чувствительность, посторонний шум не убирают.

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include "acodec.h"

int main(int argc, char **argv) {

    int acodec;
    acodec = open("/dev/acodec", O_RDWR);
    if(acodec < 0) {
        printf("Error: can't open acodec device!\n");
    } else {
        /*
        // Reset
        if(ioctl(acodec, ACODEC_SOFT_RESET_CTRL)) {
          printf("ioctl ACODEC_SOFT_RESET_CTRL error!\n");
        }
        
        unsigned int gain_mic = 0x0f;
        // LGain
        if(ioctl(acodec, ACODEC_SET_GAIN_MICL, &gain_mic)) {
            printf("ioctl ACODEC_SET_GAIN_MICL error!\n");
        }
        // RGain
        if(ioctl(acodec, ACODEC_SET_GAIN_MICR, &gain_mic)) {
            printf("ioctl ACODEC_SET_GAIN_MICR error!\n");
        }
        */
        
        ACODEC_VOL_CTRL vol_ctrl;
        vol_ctrl.vol_ctrl_mute = 0;
        vol_ctrl.vol_ctrl = 0x14;
        // AdcLVol
        if(ioctl(acodec, ACODEC_SET_ADCL_VOL, &vol_ctrl)) {
            printf("ioctl ACODEC_SET_ADCL_VOL error!\n");
        }
        // AdcRVol
        if(ioctl(acodec, ACODEC_SET_ADCR_VOL, &vol_ctrl)) {
            printf("ioctl ACODEC_SET_ADCR_VOL error!\n");
        }
    
        printf("End.\n");
        close(acodec);
    }
    return 0;
}

Видимо, дело действительно в голосовом эквалайзере. Будем ждать релиза)

kasitoru avatar Nov 06 '22 19:11 kasitoru

Необходимо добавить файлы libhive_RES.so, libhive_ANR.so, libhive_common.so, libhive_HPF.so в /usr/lib (полагаю, влезут только в ultimate релиз)

widgetii avatar Dec 08 '22 10:12 widgetii

А в самом majestic поддержку эквалайзера уже реализовали?

kasitoru avatar Dec 08 '22 10:12 kasitoru

Да, кто-то ее тестировал еще летом

widgetii avatar Dec 08 '22 10:12 widgetii

Помимо добавления файлов, в конфиге majestic нужно что-то менять для его активации?

kasitoru avatar Dec 08 '22 10:12 kasitoru

в секции audio параметр voiceEqualizer

widgetii avatar Dec 08 '22 10:12 widgetii

Спасибо! Вечером буду пробовать. По результатам отпишусь здесь.

kasitoru avatar Dec 08 '22 10:12 kasitoru

Спасибо! Вечером буду пробовать. По результатам отпишусь здесь.

Сначала прошивка должна будет собраться, что-бы через sysupgrade новый majestic автоматом залился. Ну или руками пробовать подкидывать majestic взяв его с канала dev

flyrouter avatar Dec 08 '22 10:12 flyrouter

Majestic не нужно обновлять, он включает этот функционал, если есть библиотеки для эквалайзера. Нужен PR в firmware с этими файлами (лучше взять проверенные из https://t.me/c/1223369578/11700)

widgetii avatar Dec 08 '22 10:12 widgetii

Тогда да, если это внешняя функция, то нужно будет включить во всех актуальных сборках сначала, а потом уже тесты..

flyrouter avatar Dec 08 '22 11:12 flyrouter

Похоже, это работает! Спасибо! Файлы брал здесь https://github.com/OpenIPC/firmware/tree/master/general/package/hisilicon-osdrv-hi3516ev200/files/lib

kasitoru avatar Dec 08 '22 15:12 kasitoru

Предлагаю закрыть этот тикет после того, как все начнет работать из коробки после установки firmware

widgetii avatar Dec 08 '22 15:12 widgetii