• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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 напрочь, а забытый дома смартфон - катастрофой.
 
Сверху Снизу