web-verzus-team
@web-verzus-team
Full Stack Developer

Какую структуру звуковых файлов лучше всего сделать на сайте?

На сайте есть мини-игра: в случайном порядке показываются и озвучиваются слагаемые от 1 до 2000.
В конце игры посетитель сайта вводит ответ.
Суть проблемы: на данный момент в одной папке /sounds/ храниться 10 000 звуковых файлов(по 5 разный форматов для каждого из 2000 звуков.)
У некоторых клиентов озвучка идет с перебоями. Насколько вероятно то, что браузеру/серверу тяжело искать один файл для воспроизведения среди 10000 файлов?
Если вероятно - то как лучше организовать структуру файлов?
  • Вопрос задан
  • 182 просмотра
Пригласить эксперта
Ответы на вопрос 2
sergiks
@sergiks Куратор тега JavaScript
♬♬
10к в одной папке может быть проблемой. Я бы раскидал по дереву папок, скажем, по сотням от 0 до 20, и числам:

1234 => /12/34/ => и там пять файлов
0001 => /00/01/
2000 => /20/00/

У себя в одном проекте я организовал примерно похожую структуру папок, но чуть усложнил – т.к. число папок не равномерно для разных корневых папок, я зеркалирую порядок битов в каждом номере, и бью на уровни по шестнадцатиричным буквам:
число  двоичное        наоборот        hex  папка
0001   0000 0000 0001  1000 0000 0000  800  /8/0/0
1234   0100 1101 0010  0100 1011 0010  4B2  /4/B/2
0173   0001 0111 0011  1100 1110 1000  CE8  /C/E/8
2000   0111 1101 0000  0000 1011 1110  0BE  /0/B/E
Так в каждом уровне папок у вас будет не более 16 подпапок.

А ещё, может быть, вы не делаете предзагрузку звуков? Стоит начинать скачивать звуковой файл сразу, как становится ясно, или вероятно, что он понадобится. Чтобы на момент начала воспроизведения файл уже был загружен.
Ответ написан
Комментировать
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
А почему бы просто так взять и не разбить число, например, "2134" на отдельные звуки:
"две" "тысячи" "сто" "тридцать" "четыре" ?
При обновлении числа - Вы будете грузить только изменившиеся разряды: "2314":
"две" "тысячи" - не грузим, используем из предыдущей озвучки
"триста" "четырнадцать" - грузим
Можно сделать один файл с разбивкой по временным меткам и воспроизводить с разных меток для получения нужного голосового фрагмента заданного числа.
Тогда у Вас будет всего лишь 5 файлов!
Однократно закэшированный файл на стороне клиента - уже не будет грузиться каждый раз.
Проверьте поддержку TTS на нужном языке в браузере и если возможно - произнесите с его помощью вместо загрузки файла.
Вариантов - масса..
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы