Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

RTL00 MP3 player

Тема в разделе "Realtek - SDK, прошивки и утилиты", создана пользователем pvvx, 13 окт 2016.

  1. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    8.396
    Симпатии:
    1.271
    Не на 4, а больше и один канал.
    RAM всегда в притык, если не RTL8711AM. Чем больше буфера - тем лучше и расставлены на предел имеющейся RAM. RAM более 1 Мег - уже можно ограничивать. Во всяком случае хватает без ухищрений и урезаний других частей - не ESP8266...
    И почему 192 kbs не тянет? Не смогли переделать установки кодека и выходного битрейта?
    Я не делаю полностью готовых приложений. Тут только пример и он пашет с приведенными ссылками на web-радио. Считаю, что полный проект соберет тот, кому это надо. Да и других ссылок на другие битрейты web-радио у меня нет – не люблю радио… во первых выбора нет, да одна болтовня, а на счет качества - там и 4-х бит хватает - вечно у них накручены тембры и ограничение амплитуды...
     
    Последнее редактирование: 10 янв 2017
  2. mikush

    mikush Новичок

    Сообщения:
    18
    Симпатии:
    0
    RTL8711AM как по мне дороговато,
    я так понимаю Helix отжирает СPU и таск ридера медленно загоняет входной буфер. vTaskGetRunTimeStats не компилится из ардуино, чего то не хватает.
    оффтоп
    за цену RTL8711AM можно взять что то типа orange pi zero или подобное с openwrt. значит нужно выжимать 8710
     
  3. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    8.396
    Симпатии:
    1.271
    8710 хватает сполна. Там надо ещё поиграться приоритетами задач. Я не оптимизил это дело.

    И если более углубляться – у них и у вас источник CPM в 4-ре бита на 44 кГц, т.е. даже 10 кГц вывести на полную амплитуду не может. Далее его зажали MP3. :) Когда найдете источник записи более 4-х бит на дискрет в 44 кГц – отпишитесь :)
    [​IMG]
    The audio contained in a CD-DA consists of two-channel signed 16-bitLinear PCM sampled at 44,100 Hz.
    Звуковой CD - Разрядность — 16 бит (линейное квантование*)
    Линейное квантование - PCM u-law/a-law (4-ре бита и мантиса... :))
     
    Последнее редактирование: 10 янв 2017
  4. mikush

    mikush Новичок

    Сообщения:
    18
    Симпатии:
    0
    мне хватит, я как раз жду dac, будет пару лишних кб рама. но и сейчас удовлетворяет, паралельно работает web сервер, udp и декодирование до 192. весь функционал который я планировал.
    Еще нужно проревювить может у меня где то затык, импользовал только код для вывода i2s. так что вполне вероятно , 320 с флешки играет на stm32f103 по идеи 8710 должен тянуть
     
  5. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    8.396
    Симпатии:
    1.271
    То, что есть жрет 60% времени CPU без оптимизаций. Там вроде команда посмотреть загрузку есть - "ATST".
     
  6. mikush

    mikush Новичок

    Сообщения:
    18
    Симпатии:
    0
    Arduino. чистый пример
    320 поток "sentinel.scenesat.com/scenesatmax", 8000 заикаться и в лог шлет FIFO: Buffer Underrun,что аж терминал сума сходит
    VLC на большом брате с кешем в 1ms играет нормально, вроде поток в норме.
     
    Последнее редактирование: 10 янв 2017
  7. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    8.396
    Симпатии:
    1.271
    Ещё раз - в коде нет поддержки битрейтов больше, чем в тестовом примере.
    И для меломанов:
    "Запись реального реверберационного процесса без потери информации представляет огромные трудности. Например, для помещения объемом 1000 м3 число отражений через одну секунду после начала реверберационного процесса составляет 511287 отр/с. Это значит, что отраженные лучи будут прибывать с интервалом менее 2 мкс, вызывая соответствующие флуктуации в выходном сигнале микрофона. Естественно, что даже при временном интервале между отсчетами 5,2 мкс (как для DVD-Audio) эти флуктуации не смогут быть зарегистрированы.

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

    Как оказалось, слух к этим бинауральным сдвигам (бинауральный джиттер) очень чувствителен, даже если они составляют доли микросекунд!

    Частоты дискретизации, используемые в современных системах, оказываются недостаточными, чтобы «схватить» эти тонкие временные сдвиги, что приводит к неточной локализации в периферической зоне и потере ощущения окружения и ощущения глубины. Таким образом, анализ показывает, что музыка, исполняемая в помещении, создает сложный звуковой сигнал, который соответствует чрезвычайно тонким и сложным способностям слуховой системы к его анализу. Процесс записи звука должен иметь разрешающую способность, соответствующую как сигналу, так и возможностям слуховой системы."
    А кодек MP3 сжимает звук за счет устранения этой информации в помойку из потока.
    "sentinel.scenesat.com/scenesatmax" переадресует http://primitive.be/scenesatmax:8000 "LOL 404"

    Я могу вам закодировать звук на осциллографе у которого 4 канала по 16 бит на 10 MHz и далее в 100 Mbit в MP3. :) Куда его потом? На каждой web-радиостанции есть поток 96 кбит/c - его вполне хватает для вывода ШИМ. По этому пример содержит битрейты от 48 до 96 кбит/c - больше не требуется для возможностей вывода на ШИМ выходы.
     
    Последнее редактирование: 10 янв 2017
  8. mikush

    mikush Новичок

    Сообщения:
    18
    Симпатии:
    0
    я с Вами соглашусь на счет качества, да и мои скудные познания в схемотехнике (дак , усилитель и их питание )все качество входного потока умножит на ноль, просто спортивный интерес.
    на хеликсе mp3dec 22% bitrate 192000
     
  9. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    8.396
    Симпатии:
    1.271
    А я собирал что есть всего в помощь kissste. Он решил взять декодек и что шло к ESP8266. Ну это и перевел на RTL не думая и не анализируя других вариантов - чисто для сравнения ESP8266 c RTL8710AF. Получилось, что ESP82xx на Tensilica's L106 стараниями Espressif безоговорочно сдулся.
    Ну вот, а говорили, что 320 не потянет. :)
    Можно ещё поработать с расположением критически скоростного кода и его стека в TCM область RAM. Даст ещё до десяток % выигрыша.
    Соберите декодек и выложите детям – пусть играются. А то уже пишут всякие из PADI и предлагают “как разработчику” бесплатные образцы их продукции… Вот на кого бы это всё свалить?
     
    Последнее редактирование: 11 янв 2017
  10. mikush

    mikush Новичок

    Сообщения:
    18
    Симпатии:
    0
    Ваш кодек, прекрасно работает, выложу уже пример под хардварный i2s дак, как только он до меня доберется из поднебесной
     
  11. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    8.396
    Симпатии:
    1.271
    Протестировал FFT128real32.zip - 32 bit real FFT 128 points + windowing + magnitude (IAR, Keil, gcc) из Embedded Signals на RTL00.
    Window16to32b_real( x, Hamming128_16b, N); // perform windowing function
    [N] тактов:
    [128] 1012, [1024] 7732, [2048] 15412, [4096] 30772

    FFT128Real_32b(y,x); // call FFT routine
    [128] 9765

    Стек в TCM, код в SRAM. Видно, то SRAM вставляет такты ожидания, как и описано в доке к RTL.
    Сравнительная таблица дана в PDF на сайте...
    Буду нечто похожее лепить под свою задачу - надо справиться с ADC 250ksps 24 bit и анализом 28 частот по ДПФ окнами по 0.03 сек... RTL8710 вроде вписывается...
     
  12. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    8.396
    Симпатии:
    1.271
    Код (Text):
    1. # ATST
    2.  
    3. CLK CPU         200000000 Hz
    4. RAM heap        22960 bytes
    5. RAM free        5792 bytes
    6. TCM heap        408 bytes
    7. TCM ps_monitor  764 bytes
    8. RAM Heap Memory List:
    9. [0]=0x0x100522ec, 0
    10. [1]=0x0x10003010, 1984
    11. [2]=0x0x10059820, 272
    12. [3]=0x0x1006af18, 20704
    13. TCM Free List:
    14. prev 100524e0, chunk 1fff5454, size 408
    15.  
    16. CPU total run time is 285907
    17. TaskName        DeltaRunTime    percentage
    18. log_servi               0               <1%
    19. tskmad          180             17%
    20. IDLE            810             80%
    21. Tmr Svc         0               <1%
    22. TCP_IP          0               <1%
    23. rtw_check               0               <1%
    24. cmd_threa               0               <1%
    25. rtw_TDMA_               0               <1%
    26. log_uart                0               <1%
    27. rtw_littl               0               <1%
    28. rtw_inter               10              <1%
    29. rtw_recv_               20              1%
    30. tskreader               0               <1%
    31. rtw_xmit_               0               <1%
    32.  
    33. [MEM] After do cmd, available heap 22960+408
    tskmad 180 17% :)
    RTL8711AM как свои 200 МГц... Обгоняем ESP-32S...
    Да, Espressif уже бесплатно раздает ESP-32S - Бесплатные ESP32 dev kit
    - налетай на утюг, требующий минимум 1A для запуска и имеющий раза в два менее памяти для приложений, чем RTL00... :)
     
    Последнее редактирование: 14 фев 2017
  13. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    8.396
    Симпатии:
    1.271
    После первого прохода "чистки" SDK и расстановки приоритетов задач, MP3 пошел уверенно на 83 МГц CLK CPU.
    Код (Text):
    1. CLK CPU         83333333 Hz
    2. RAM heap        23336 bytes
    3. TCM heap        27928 bytes
    4.  
    5. CPU total run time is 1988826
    6. TaskName        DeltaRunTime    percentage
    7. loguart         2905            <1%
    8. IDLE            407926          20%
    9. Tmr Svc         162             <1%
    10. TCP_IP          11365           <1%
    11. rtw_check       0               <1%
    12. cmd_threa       3009            <1%
    13. tskreader       9767            <1%
    14. rtw_littl       5567            <1%
    15. rtw_inter       4541            <1%
    16. rtw_recv_       17173           <1%
    17. tskmad          1447303         72%
    18. rtw_TDMA_       0               <1%
    19. rtw_xmit_       3               <1%
    20.  
    21. Task List:
    22. ==============================
    23. Name      Status Priority HighWaterMark TaskNumber
    24. loguart         R       4       218     2
    25. IDLE            R       0       36      3
    26. Tmr Svc         B       5       438     4
    27. TCP_IP          B       9       637     5
    28. rtw_TDMA_       B       7       219     12
    29. rtw_xmit_       B       5       183     7
    30. tskreader       B       8       130     54
    31. rtw_littl       B       10      439     10
    32. rtw_inter       B       6       209     8
    33. rtw_recv_       B       5       891     6
    34. tskmad          B       7       106     55
    35. rtw_check       B       5       219     11
    36. cmd_threa       B       6       221     9
    Приближаемся к потреблению BLE при MP3 на ШИМ через 2 x i2s :)
    ESP-32S-шники "нервно курят в сторонке" :)
    При старте памяти:
    RAM heap 120432 bytes
    TCM heap 64768 bytes
    Потом всё на буфера...
    Скоро кину с обновлением SDK на git...
    Какая-то версия, проверенная, что собирается, скинута. Далее SDK будет расходиться с оф. версией всё больше и больше... Версии на git будут "не стабильные", пока не допилю следующий этап, а их предполагается много :) Короче SDK "пошел под пресс". Сейчас уже всё собирается с одной lib_wlan.a либ (и пару *.obj в lib_platform_new.a - hal_crypto.o + hal_spi_flash_ram.o). На все функции в либе lib_wlan.a и т.д., ROM есть заголовки и описания всех полей данных...
     
    Последнее редактирование: 4 мар 2017
    rst, Seeker, Simon и 3 другим нравится это.
  14. Neov

    Neov Читатель

    Сообщения:
    209
    Симпатии:
    7
    Пытаюсь собрать своим сборщиком, ругается линковщик

    Код (Text):
    1. c:/projects/rtl00mp3-master/tools/5.4 2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/bin/ld.exe: c:\projects\RTL00MP3-master\build\app.axf section `.bf_data' will not fit in region `BD_RAM'
    2. c:/projects/rtl00mp3-master/tools/5.4 2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/bin/ld.exe: region RAM overflowed with stack
    3. c:/projects/rtl00mp3-master/tools/5.4 2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/bin/ld.exe: region `BD_RAM' overflowed by 6884 bytes
    4. c:/projects/rtl00mp3-master/tools/5.4 2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/bin/ld.exe: warning: section `.valid' type changed to PROGBITS
    в чем может быть дело?
     
  15. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    8.396
    Симпатии:
    1.271
    Файлы линковщика другие (*.ld), так-же есть переименование секций для сборки boot-loader-а... Без переименования секций за раз не собрать boot и приложение. gcc не умеет менять имя сегмента данных в си, а приписывать секции к каждой var = "стринг".... Проще создать отдельную группу и махнуть разом все имена сегментов -> RTL00MP3/sdkbuild.mk at master · pvvx/RTL00MP3 · GitHub
    Мне, например, тоже не понятно, зачем было делать загрузку boot в центр кучи .rodata и .data переменных rom-bios? :) Но такая ROM и уже не переписать...По этому boot несет в себе данные для ROM-BIOS. Иначе кранты API в ROM. Дополнительный кавардак ещё для объединения (совместного использования) структур данных ROM и пользовательской Image. В стандартном SDK данные ROM дублируются, что уменьшает объем памяти и требует доп. действий для их обновления и связей... Народ категорически не хочет покупать RTL871xAM, а в RTL8710AF мало памяти на всё :) Приходиться выжимать каждый байтик. И это только начало :) В дальнейшем весь одноразовый стартапный код (инициализации) будет заниматься нужными вещами после отработки, а не сидеть в RAM, занимая место. Ущё, если будет время, урежется глупый текстовый интерфейс к WiFi драйверу, что даст ещё десятки кило с увеличением возможностей... Думаю, что вашему питону придется потрудиться, распутывая это всё :)
     
    Последнее редактирование: 20 мар 2017
  16. Neov

    Neov Читатель

    Сообщения:
    209
    Симпатии:
    7
    Не могли бы выложить лог сборки?
     
  17. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    8.396
    Симпатии:
    1.271
    Какой? (т.е. с какой опцией mingw32-make.exe ?)
    без '-s' уже не лезет в сообщение.
    C '-n' или '-p'? - он будет к гегобайту :)
    Без опций:
     

    Вложения:

    • log.zip
      Размер файла:
      1,9 КБ
      Просмотров:
      5
  18. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    8.396
    Симпатии:
    1.271
    @Neov - нет там ничего в сборке сложного, кроме описанного - нового *.ld и замены секций у rtl_boot.c.
    Было 2 группы файлов, стало три: SRC_C, DRAM_C, BOOT_C.

    "section `.bf_data' will not fit in region `BD_RAM'" - вообще в map нет такой секции - `.bf_data'. Оно есть только в старом *.ld, от оф. SDK.
     
    Последнее редактирование: 20 мар 2017
  19. Neov

    Neov Читатель

    Сообщения:
    209
    Симпатии:
    7
    @pvvx , оказвается я собирал устаревшую v03.
    Сейчас получше, но проверка ASSERT(__ram_image_end__ == 0x100020c0, "Error rom-bios-boot code & data!") не проходит, если удалить строку, то все собирается :)
    При этом, символа __ram_image_end__ в ELF нет, а __ram_image_start__ есть

    При этом кажется все флаги компилятора и линковщика соблюдены, порядок соблюден, дополнительные .o не линкуются.

    Я бы попросил полный лог с перечнем команд исполнения, я бы даже сказал, что мне только хронология выполнения команд и нужна
     
    Последнее редактирование: 20 мар 2017
  20. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    8.396
    Симпатии:
    1.271
    Это значит, что неверно собрана область инициализации переменных ROM-BIOS. :)
    Дальше - ваше собранное приложение = большой глюк. :)
    Оставлено специально, т.к. если даны другие опции трансляции, влияющие на сборку структур и прочего (align и размеры bool), то система будет неверно обращаться к структурам WiFi и прочим в ROM.
    Ещё бы по хорошему там надо ввести проверку 6-ти килобайтной сборки общей структуры WiFi, в которую входят к десятку структур с сотнями разных полей и описателей, чтобы полностью проверить правильно ли заданы опции транслятору...
    Всё это можно выкинуть, но мне не нужен уровень качества Arduino (то работает, то нет, то через час виснет, ... :)).
    Решение написать собственный make на Питоне - это не мое решение :)
     
    Последнее редактирование: 21 мар 2017

Поделиться этой страницей