• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

TB-03F TLSR8253 - кто-нибудь пробовал "звуковые" возможности?

pvvx

Активный участник сообщества
С другой стороны, есть BT Classic, заточенный в том числе и под аудио, т.е. как бы вопрос решен еще давно.
Был решен. Но появился BLE и спецификация 5.2. Т.е. скорости уже хватает на передачу audio, что и было заявлено в спецификации. Но стандартных UUID и форматов работы с ними пока не нашел. У каждого свои. Скоро родят или уже - неизвестно.
Ожидать возможно только от Google. Он заправляет андроидами... :)
 

aloika

Active member
1638474470534.png

Во, красота. Всё работает. Помехи при радиопередаче хорошо видны. Теперь надо с ними бороться.
 

pvvx

Активный участник сообщества
Если бы я умел. Пока не умею. Почитаю, как это делается.
Остается неясным, какая кодировка выбрана - уточните заголовок ADPCM.
ble_sdk_multimode использует разные заголовки блока.
Исходный код (не сжатый) imaadpcm:
Потоковый звук в js требует многого... Но впихнул упрощенный...
 

Вложения

  • 43.7 KB Просмотры: 3

aloika

Active member
Остается неясным, какая кодировка выбрана - уточните заголовок ADPCM.
Кодируется этой функцией:

C:
void mic_to_adpcm_split (signed short *ps, int len, signed short *pds, int start)
{
    int i, j;
    unsigned short code=0;
    unsigned short code16=0;
    static int predict_idx = 0;
    code = 0;
    static signed short *pd;
    static int predict;

    //byte2,byte1: predict;  byte3: predict_idx; byte4:adpcm data len
    if (start)
    {
        pd = pds;
        *pd++ = predict;
        * (((signed char *)pds) + 2)= predict_idx;
        * (((unsigned char *)pds) + 3)= (128 /*ADPCM_PACKET_LEN*/ - 4);
        pd++;
    }

    //byte5- byte128: 124 byte(62 sample) adpcm data
    for (i=0; i<len; i++) {

        s16 di = ps[i];
        int step = steptbl[predict_idx];
        int diff = di - predict;

        if (diff >=0 ) {
            code = 0;
        }
        else {
            diff = -diff;
            code = 8;
        }

        int diffq = step >> 3;

        for (j=4; j>0; j=j>>1) {
            if( diff >= step) {
                diff = diff - step;
                diffq = diffq + step;
                code = code + j;
            }
            step = step >> 1;
        }

        code16 = (code16 >> 4) | (code << 12);
        if ( (i&3) == 3) {
            *pd++ = code16;
        }

        if(code >= 8) {
            predict = predict - diffq;
        }
        else {
            predict = predict + diffq;
        }

        if (predict > 32767) {
            predict = 32767;
        }
        else if (predict < -32768) {
            predict = -32768;
        }

        predict_idx = predict_idx + idxtbl[code];
        if(predict_idx < 0) {
            predict_idx = 0;
        }
        else if(predict_idx > 88) {
            predict_idx = 88;
        }
    }
}

Потоковый звук в js требует многого... Но впихнул упрощенный...
Звук есть - это здорово. Но что-то там не совсем так, как надо. Хрипит/тарахтит что-то. Внимательно чуть позже просмотрю.
 

aloika

Active member
Звук есть - это здорово. Но что-то там не совсем так, как надо. Хрипит/тарахтит что-то. Внимательно чуть позже просмотрю.

Заработало! Дело было в том, что bufferData.set(sound) элементы sound должны быть от -1.0 до +1.0. Поделил все значения на 16384 и услышал почти нормальный звук (а не треск). Радиомикрофон получился :) Качество звука так себе, конечно, помеха эта слышна. По крайней мере, алгоритм ADPCM вроде как правильный.


Закажу на Али цифровой микрофон, пожалуй.
 

pvvx

Активный участник сообщества
Заработало! Дело было в том, что bufferData.set(sound) элементы sound должны быть от -1.0 до +1.0. Поделил все значения на 16384 и услышал почти нормальный звук (а не треск).
Я вообще не проверял js, а слепил болванку для вас... В примере, от куда скопипастил куски, значения были от -1.0 до +1.0 и надеялся что вы сами исправите :)

И вы не написали целей сего девайса - было неясно что лепить и ныне не ясно, что хотите получить?
 

aloika

Active member
Я вообще не проверял js, а слепил болванку для вас... В примере, от куда скопипастил куски, значения были от -1.0 до +1.0 и надеялся что вы сами исправите :)
Ну да, я хотел болванку - детали уж сам поправлю. Поправить почти готовый и почти работающий пример - это же совсем не то, что всё с начала писать. Поэтому я очень рад болванке :)


И вы не написали целей сего девайса - было неясно что лепить и ныне не ясно, что хотите получить?
Хочу получить примитивный (для начала) радиомикрофон/радионяню. С односторонней связью, прием звука - программой на телефоне. Нажал на "кнопочку" в программе - послушал, что в комнате происходит. И весь этот функционал засунуть в имеющееся устойство, которое уже собрано на этом модуле и соединено с телефоном по BLE и управляется по BLE и передает некоторые параметры о своем состоянии тоже по BLE.

Оно можно, конечно, добавить какой передатчик дополнительный, чисто для звука, например, classic BT, но это такое решение, не изящное. А хочется, чтобы красиво. Ну да непонятно, получится ли - пока вот качество звука не хорошее, а потом еще неясно, хватит ли производительности модуля на все задумки одновременно. Так что пока можно считать чистым экспериментом.
 

pvvx

Активный участник сообщества
а потом еще неясно, хватит ли производительности модуля на все задумки одновременно.
Производительности хватит - CLK CPU переключается, RF PHY передавать может и на 2Mbit/c, размера Flash тоже хватит.
 

nikolz

Well-known member
прикольно.
...сят лет назад радиомикрофон -приемник-передатчик делался 2-3 транзисторах по сверхрегенеративной схеме.
Сегодня для этого надо микроконтроллер и смартфон, которые содержат уже десятки миллионов транзисторов.
Самое интересное, что качество такое же, но потребление в 100 раз больше и стоит в сто раз дороже.
 

pvvx

Активный участник сообщества
прикольно.
...сят лет назад радиомикрофон -приемник-передатчик делался 2-3 транзисторах по сверхрегенеративной схеме.
Сегодня для этого надо микроконтроллер и смартфон, которые содержат уже десятки миллионов транзисторов.
Самое интересное, что качество такое же, но потребление в 100 раз больше и стоит в сто раз дороже.
Качество не такое-же. Уже вышел новый стандарт Audio для BLE (5.2) с синхронизацией устройств, с характеристиками лучше чем старый bluetooth (новые кодеки).
Скоро в каждом общ. заведении будут идти трансляции на ваш смартфон...
 

pvvx

Активный участник сообщества
BLE имеет 40 каналов. Фактическая скорость передачи полезных данных после 5.0 составляет 1.4 мегабита в сек.
А у вашей схемы один и плавающий канал :)
 

volaltd

Member
Скоро в каждом общ. заведении будут идти трансляции на ваш смартфон...
Уже у каждого по одному-два автомобиля, а добираться на работу быстрее стало на метре :)
Скоро эфир будет закакан вашими BLE напрочь, а забытый дома смартфон - катастрофой.
 
Сверху Снизу