реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
murmur
сообщение Mar 21 2016, 16:11
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 425
Регистрация: 30-04-11
Пользователь №: 64 708



Господа, есть такой кодек речевой - Speex, под него есть библиотека для STM32. Кто работал тот знает.
Пример в ней заточен под quality=4, 8 кГц 1 кбит/сек.
Хочется попробовать звук получше - quality 10, 32 кГц, 5 кбит/сек
Что только не делала, дефайны меняла, размеры фреймов пересчитывала - слышно шипение. Такое ощущение что не все переменные исправила.

Может кто занимался? Подскажите, как перенастроить?
Go to the top of the page
 
+Quote Post
DeNi
сообщение Mar 21 2016, 18:45
Сообщение #2


Участник
*

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



Звук получше можно сделать переключив кодек в один из режимов wideband и увеличить битрейт, 5кбит/с очень мало.
Кодек Speex в первую очередь предназначен для передачи голоса, и получить качественного звука на нем не получится.
Для воспроизведения звука в хорошем качестве, нужно использовать другой кодек, например Celt.
Go to the top of the page
 
+Quote Post
murmur
сообщение Mar 22 2016, 03:35
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 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 кбит/сек.
Мой вопрос в том, может ли кто либо, реально этим занимавшийся, привести полный список того, что нужно поменять. Академичные рекомендации типа "ну настройте частоту дискретизации" не помогут. Что сделать в принципе я знаю, не это не помогает, какая-то заковырка в самом коде.
Go to the top of the page
 
+Quote Post
Rash
сообщение Mar 22 2016, 06:37
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 639
Регистрация: 5-09-05
Пользователь №: 8 231



Вам нужны оригинальные исходники Speex, т.к. у порта от STM для других настроек не хватает таблиц этих самых настроек, так мне коллега по цеху рассказывал, поэтому у него было решение перейти на Opus (исходники были взяты с оригинального сайта), настройки гибче и понравилось ему больше.
Go to the top of the page
 
+Quote Post
murmur
сообщение Mar 22 2016, 07:53
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 425
Регистрация: 30-04-11
Пользователь №: 64 708



Цитата(Rash @ Mar 22 2016, 09:37) *
Вам нужны оригинальные исходники Speex, т.к. у порта от STM для других настроек не хватает таблиц этих самых настроек, так мне коллега по цеху рассказывал, поэтому у него было решение перейти на Opus (исходники были взяты с оригинального сайта), настройки гибче и понравилось ему больше.

Вчитавшись в описание...
По моему эта библиотека от ST рассчитана только на quality=4. Да, там есть дефайны, определяющие длину пакетов, видимо они сделаны для удобства.
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Mar 22 2016, 08:18
Сообщение #6


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(murmur @ Mar 22 2016, 08:53) *
Вчитавшись в описание...
По моему эта библиотека от ST рассчитана только на quality=4. Да, там есть дефайны, определяющие длину пакетов, видимо они сделаны для удобства.

Приложил имеющиеся у меня исходники и проект для KEIL, который собирает библиотеку (библиотека собирается для удобства сборки некоего проекта, чтобы не перекомпилировать тот каждый раз из исходников, когда в проекте что-то меняется).
Прикрепленные файлы
Прикрепленный файл  speex.zip ( 1.3 мегабайт ) Кол-во скачиваний: 46
 
Go to the top of the page
 
+Quote Post
murmur
сообщение Mar 22 2016, 10:34
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 425
Регистрация: 30-04-11
Пользователь №: 64 708



Цитата(KnightIgor @ Mar 22 2016, 11:18) *
Приложил имеющиеся у меня исходники и проект для KEIL, который собирает библиотеку (библиотека собирается для удобства сборки некоего проекта, чтобы не перекомпилировать тот каждый раз из исходников, когда в проекте что-то меняется).


Ах тыж вот оно что - FRAME_SIZE нужно менять в зависимости от частоты дискретизации, а ENCODED_FRAME_SIZE - в зависимости от сжатия.
Скажите, вы что-то меняли кроме исполняемых файлов и их заголовков? Файлы в папке с библиотекой SPEEX не изменены?
Просто ваш проект я запускать не буду, я хочу свой, уже готовый переделать.
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Mar 22 2016, 15:02
Сообщение #8


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(murmur @ Mar 22 2016, 11:34) *
Скажите, вы что-то меняли кроме исполняемых файлов и их заголовков? Файлы в папке с библиотекой SPEEX не изменены?

Уже как бы и не помню. Возможно, я подправил в исходниках некоторые ляпы (ну вроде использования беззнаковых для знаковых, и подобное), а в общем и целом ничего не менял.
Go to the top of the page
 
+Quote Post
DeNi
сообщение Mar 22 2016, 20:01
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 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мс фрейм
Go to the top of the page
 
+Quote Post
murmur
сообщение Mar 23 2016, 11:14
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 425
Регистрация: 30-04-11
Пользователь №: 64 708



Цитата(KnightIgor @ Mar 22 2016, 18:02) *
Уже как бы и не помню. Возможно, я подправил в исходниках некоторые ляпы (ну вроде использования беззнаковых для знаковых, и подобное), а в общем и целом ничего не менял.

Попробовала запустить хотя бы ваш проект - он у Вас на 24 МГц что ли? По крайней мере из комментариев к настройкам таймера это следует.
Однако при изучении проекта я нашла что файл system_stm32 в проект вообще не добавлен, а в main.c есть функция настройки тактовой чатсоты, которая закомментирована.
Признавайтесь, где вы спрятали настройку тактовой частоты, хочу настроить на 72 МГц.
Кстати в том виде в котором вы выложили, я слышу не речь а чириканье.
Go to the top of the page
 
+Quote Post
Rash
сообщение Mar 23 2016, 11:39
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 639
Регистрация: 5-09-05
Пользователь №: 8 231



Судя по описанию, проект на 100-ой дискавери, там макс. 24МГц, тактирование настраевается из стартап файла и скорее всего взято по дефолту.
смотрите файлы тактирования в CMSIS.
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Mar 23 2016, 19:55
Сообщение #12


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(murmur @ Mar 23 2016, 12:14) *
Попробовала запустить хотя бы ваш проект - он у Вас на 24 МГц что ли? По крайней мере из комментариев к настройкам таймера это следует.

Дело в том, что проект - не мой вообще. Это так было. Мой "проект" - это target "speex_lib8", создающий библиотеку *.lib, которую я пользую в совершенно ином, внешнем проекте. Там мне нужна только речь на самом низком качестве кодека для экономии пространства на носителе (реально - EEPROM в 256K).
Go to the top of the page
 
+Quote Post
murmur
сообщение Mar 24 2016, 05:28
Сообщение #13


Местный
***

Группа: Участник
Сообщений: 425
Регистрация: 30-04-11
Пользователь №: 64 708



ОК, все получилось. Только разницы между Q4 8kHz и q10 16 kHz не ощущается. может быть сама запись такого качества. Попробую сегодня свой звук залить.
Go to the top of the page
 
+Quote Post
maxntf
сообщение Apr 19 2016, 15:57
Сообщение #14


Частый гость
**

Группа: Участник
Сообщений: 107
Регистрация: 13-05-09
Пользователь №: 49 008



Люди подскажите чем Вы готовите звук. Пробую сделать как в статье Воспроизведение звука на STM32-Discovery при помощи Speex. Звук что в примере у меня играет. Поставил кодек SpeexACM_1.0.1.1 пробую из разных конвертеров ауди сделать закодированный файл, никак не получается то что нужно. Если у кого есть, поделитесь кодеком и конвертером на котором у Вас получилось.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 12:41
Рейтинг@Mail.ru


Страница сгенерированна за 0.96833 секунд с 7
ELECTRONIX ©2004-2016