|
|
  |
SpeexLib для STM и качество звука |
|
|
|
Mar 21 2016, 18:45
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 18-10-06
Из: Москва
Пользователь №: 21 459

|
Звук получше можно сделать переключив кодек в один из режимов wideband и увеличить битрейт, 5кбит/с очень мало. Кодек Speex в первую очередь предназначен для передачи голоса, и получить качественного звука на нем не получится. Для воспроизведения звука в хорошем качестве, нужно использовать другой кодек, например Celt.
|
|
|
|
|
Mar 22 2016, 03:35
|
Местный
  
Группа: Участник
Сообщений: 425
Регистрация: 30-04-11
Пользователь №: 64 708

|
Цитата(DeNi @ Mar 21 2016, 21:45)  Звук получше можно сделать переключив кодек в один из режимов wideband и увеличить битрейт, 5кбит/с очень мало. Кодек Speex в первую очередь предназначен для передачи голоса, и получить качественного звука на нем не получится. Для воспроизведения звука в хорошем качестве, нужно использовать другой кодек, например Celt. Уважаемый! Мне как раз голос и нужен. Я сгенерировала голос программой Acapela, конвертировала его кодеком ACMSpeex в 32 kHz 5 кбит/сек, quality=10. Отличий от оригинала не услышала. Понятно, что если бы была музыка, то это была бы ерунда. В общем 5 кбит/сек меня устраивает, есть готовый аудиофайл. Есть также работающий код для STM32, который настроен на 8 кГц и quality=4, битрейт - 1 кбит/сек. Мой вопрос в том, может ли кто либо, реально этим занимавшийся, привести полный список того, что нужно поменять. Академичные рекомендации типа "ну настройте частоту дискретизации" не помогут. Что сделать в принципе я знаю, не это не помогает, какая-то заковырка в самом коде.
|
|
|
|
|
Mar 22 2016, 07:53
|
Местный
  
Группа: Участник
Сообщений: 425
Регистрация: 30-04-11
Пользователь №: 64 708

|
Цитата(Rash @ Mar 22 2016, 09:37)  Вам нужны оригинальные исходники Speex, т.к. у порта от STM для других настроек не хватает таблиц этих самых настроек, так мне коллега по цеху рассказывал, поэтому у него было решение перейти на Opus (исходники были взяты с оригинального сайта), настройки гибче и понравилось ему больше. Вчитавшись в описание... По моему эта библиотека от ST рассчитана только на quality=4. Да, там есть дефайны, определяющие длину пакетов, видимо они сделаны для удобства.
|
|
|
|
|
Mar 22 2016, 08:18
|
Знающий
   
Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725

|
Цитата(murmur @ Mar 22 2016, 08:53)  Вчитавшись в описание... По моему эта библиотека от ST рассчитана только на quality=4. Да, там есть дефайны, определяющие длину пакетов, видимо они сделаны для удобства. Приложил имеющиеся у меня исходники и проект для KEIL, который собирает библиотеку (библиотека собирается для удобства сборки некоего проекта, чтобы не перекомпилировать тот каждый раз из исходников, когда в проекте что-то меняется).
Прикрепленные файлы
speex.zip ( 1.3 мегабайт )
Кол-во скачиваний: 46
|
|
|
|
|
Mar 22 2016, 10:34
|
Местный
  
Группа: Участник
Сообщений: 425
Регистрация: 30-04-11
Пользователь №: 64 708

|
Цитата(KnightIgor @ Mar 22 2016, 11:18)  Приложил имеющиеся у меня исходники и проект для KEIL, который собирает библиотеку (библиотека собирается для удобства сборки некоего проекта, чтобы не перекомпилировать тот каждый раз из исходников, когда в проекте что-то меняется). Ах тыж вот оно что - FRAME_SIZE нужно менять в зависимости от частоты дискретизации, а ENCODED_FRAME_SIZE - в зависимости от сжатия. Скажите, вы что-то меняли кроме исполняемых файлов и их заголовков? Файлы в папке с библиотекой SPEEX не изменены? Просто ваш проект я запускать не буду, я хочу свой, уже готовый переделать.
|
|
|
|
|
Mar 22 2016, 20:01
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 18-10-06
Из: Москва
Пользователь №: 21 459

|
Как уже верно заметили в примерах от ST вырезаны таблицы других режимов из файлов modes.c и modes_wb.c, которые требуются для декодирования режимов отличных от NB 8kbps.
Вот примеры рассчетов длины фреймов для двух режимов:
1. режим narrowband (submode 3) // Sample rate 8kHz SAMPLE_RATE 8000 Hz // Encoded bit rate 8kbps BIT_RATE 1000 Byte/s // Frame length 20 ms FRAME_LENGTH 0.02s
ENCODED_FRAME_SIZE = BIT_RATE * FRAME_LENGTH = 1000 * 0.02 = 20 байт на один кодированный 20мс фрейм FRAME_SIZE = SAMPLE_RATE * FRAME_LENGTH = 8000 * 0.02 = 160 семплов по 16 бит на один декодированный 20мс фрейм
2. режим ultra-wideband // Sample rate 32kHz SAMPLE_RATE 32000 Hz // Encoded bit rate 32kbps BIT_RATE 4000 Byte/s // Frame length 20 ms FRAME_LENGTH 0.02s
ENCODED_FRAME_SIZE = BIT_RATE * FRAME_LENGTH = 4000 * 0.02 = 80 байт на один кодированный 20мс фрейм FRAME_SIZE = SAMPLE_RATE * FRAME_LENGTH = 32000 * 0.02 = 640 семплов по 16 бит на один декодированный 20мс фрейм
|
|
|
|
|
Mar 23 2016, 11:14
|
Местный
  
Группа: Участник
Сообщений: 425
Регистрация: 30-04-11
Пользователь №: 64 708

|
Цитата(KnightIgor @ Mar 22 2016, 18:02)  Уже как бы и не помню. Возможно, я подправил в исходниках некоторые ляпы (ну вроде использования беззнаковых для знаковых, и подобное), а в общем и целом ничего не менял. Попробовала запустить хотя бы ваш проект - он у Вас на 24 МГц что ли? По крайней мере из комментариев к настройкам таймера это следует. Однако при изучении проекта я нашла что файл system_stm32 в проект вообще не добавлен, а в main.c есть функция настройки тактовой чатсоты, которая закомментирована. Признавайтесь, где вы спрятали настройку тактовой частоты, хочу настроить на 72 МГц. Кстати в том виде в котором вы выложили, я слышу не речь а чириканье.
|
|
|
|
|
Apr 19 2016, 15:57
|
Частый гость
 
Группа: Участник
Сообщений: 107
Регистрация: 13-05-09
Пользователь №: 49 008

|
Люди подскажите чем Вы готовите звук. Пробую сделать как в статье Воспроизведение звука на STM32-Discovery при помощи Speex. Звук что в примере у меня играет. Поставил кодек SpeexACM_1.0.1.1 пробую из разных конвертеров ауди сделать закодированный файл, никак не получается то что нужно. Если у кого есть, поделитесь кодеком и конвертером на котором у Вас получилось.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|