Я написал скрипт PHP-CLI, который смешивает два аудиофайла (.WAV PCM) (с некоторыми математическими задачами), поэтому PHP должен анализировать тысячи (если не миллионы) сэмплов с unpack()
, выполнять математические операции на них и сохраните их с помощью pack()
.
Теперь мне не нужна фактическая информация о том, как сделать микширование или что-то еще, как говорится в заголовке, я ищу возможности ускорить этот процесс, так как сценарию требуется 30 секунд времени обработки для производства 10 секунд аудио выход.
То, что я пытался:
- Кэшируйте аудиофайлы в память и обрабатывайте их
substr()
вместо fseek()
/ fread()
. Прирост производительности: 3 секунды.
- Записать выходной файл в виде 5000-сэмплов. Прирост производительности: 10 секунд.
После этих оптимизаций у меня получилось примерно 17 секунд на обработку звука в течение 10 секунд. Что меня беспокоит, так это то, что другие инструменты могут выполнять простые аудио операции, такие как смешивание двух файлов в режиме реального времени или даже намного быстрее.
Еще одна идея, которая у меня была, была паралеллизация, но я воздерживался от этого из-за дополнительных проблем, которые могут возникнуть (например, вычисление правильных позиций поиска для вилок / потоков и других связанных вещей).
Так я что-то упустил или это действительно хорошая производительность для скрипта PHP-CLI?