MyTetra Share
Делитесь знаниями!
Работа с эффект-процессором EMU10K1 под Linux
Время создания: 27.01.2010 01:11
Автор: Xintrea
Текстовые метки: linux, sblive, emu10k1, DSP
Раздел: Компьютер - Linux - Звук и аудио - SBLive! 5.1
Запись: xintrea/mytetra_syncro/master/base/0000001396/text.html на raw.github.com

Термины, использующиеся в тексте:


  • DSP, EMU10K1 - означает одно и тоже - микросхему звукового процессора EMU10K1.
  • Микропрограмма - набор инструкций для DSP. Обычно микропрограмма оформлена в виде файла с расширением *.emu10k1 или *.bin. Микропрограмму можно получить, скомпилировав файл *.asm с помощью ассемблера as10k1. В английской документации, когда говорят о микропрограмме, используют термин patch.


Чтобы воспользоваться возможностями обработки звука в реальном времени, нужны программы:


  • ld10k1 - это сервер, который загружает код обработки в DSP. Программа запускается в виде демона (сервиса). Другие программы работают именно через данный сервис.
  • lo10k1 - это программа, которая позволяет загружать в DSP инструкции и конфигурировать DSP. С DSP она работает через сервер ld10k1, поэтому ее иногда называют "клиентом".


Где взять ld10k1 и lo10k1?


В Debin 6 и 7 эти файлы входили в пакет alsa-tools. Однако была проблема: lo10k1 не мог приконнектиться к ld10k1, и на любую команду выдавая ошибку:


# lo10k1 --debug 8

Error: unable to connect ld10k1


В Debian 8 эти файлы из пакета alsa-tools убрали, и перенесли в пакет с именем ld10k1. Только проблема осталась: клиент и сервер друг с другом не работают. Это происходит по причине того, что в пакет входит кривой скрипт /usr/bin/lo10k1. При запуске в консоли команды lo10k1 запускается именно он, а не программа lo10k1. Кривой скрипт имеет следующее содержимое:


#!/bin/bash


PIPE_NAME=/var/run/ld10k1/ld10k1.socket


if [ -r /etc/default/ld10k1 ]; then

. /etc/default/ld10k1

fi


# FIXME: exec -a is a bashism

exec -a lo10k1 lo10k1.bin --pipe_name $PIPE_NAME "$@"


Настоящая, правильная программа расположена в файле /usr/bin/lo10k1.bin. И если ее вызвать в консоли, она будет работать правильно.


Я ничего лучшего не придумал, как удалить кривой скрипт /usr/bin/lo10k1, а программу /usr/bin/lo10k1.bin переименовать в /usr/bin/lo10k1. На то, чтобы это выяснить, у меня ушло более 10 лет.



Как работать с ld10k1 и lo10k1?


Вначале нужно запустить сервер ld10k1. Делается это под рутом, командой


# ld10k1 -d


Опция "-d" означает, что сервер надо запустить в виде демона. Если запуск прошел молча, то это значит, что скорее всего сервер запустился и работает как положено.


Затем можно от обычного пользователя загрузить код какого-нибудь эффекта в память звукового процессора. Делается это с помощью опции "-a" программы lo10k1.


Например, команда:


# lo10k1 -a sine.emu10k1


загрузит в DSP код генератора синуса. Зачем вообще нужен генератор синуса? Это же не эффект обработки. Ответ прост - генератор синуса хорош именно для отладки, чтобы легко услышать результат, и убедиться, что EMU10K1 действительно работает.


После загрузки, код размещается в памяти DSP, но сразу не запускается на выполнение. Чтобы микропрограмма стала работать, надо связать ее вход и выход с какими-нибудь входами и выходами. Вначале нужно проверить, что код действительно загрузился. Для этого нужно дать команду:


# lo10k1 --debug 5


которая означает, что нужно показать информацию о загруженных микропрограммах. В ответ должен выдаваться список:


Patch List:

000 Sine wave Gen


Данный список означает, что в EMU10K1 загружена микропрограмма синус-генератора, и ее номер 000. Сразу предупрежу любителей сокращать опции команды. Для опции "--debug" нет сокращения. Сокращение "-d" является сокращением от опции "--del", которая используется для удаления микропрограмм из памяти DSP.


В опции печати отладочной информации можно задавать и другие номера. Вот что они означают:


1 - Просмотр информации о регистрах

2 - Просмотр списка констант

3 - Просмотр списка инструкций DSP

4 - Просмотр информации о занятой помяти

5 - Просмотр списка загруженных микропрограмм

6 - Просмотр списка загруженных микропрограмм в порядке их использования в момент оработки звука

7 - Список FX (потоков ?)

8 - Список входов

9 - Список выходов

100 + номер микропрограммы - Просмотр информации о микропрограмме



Соединение звуковых блоков друг с другом


Обычный микрофонный вход в карточку обозначается IN(0).

Обычный вывод из карточки обозначается OUT(0).


Вход и выход микропрограммы обозначается PIN(N) и POUT(N) соответственно. Где N - номер микропрограммы. (Узнать номер микропрограммы можно с помощью команды lo10k1 --debug 5).


Чтобы услышать, как микропрограмма обрабатывает звуковой поток с микрофона, надо дать команды:


lo10k1 --conadd "PIN(0)=IN(0)"

lo10k1 --conadd "POUT(0)=OUT(0)"


Если при выполнении этих команд будет выведена ошибка


Error: wrong parameter - connection string


то это значит, что какой-то "коннектор" не существует. Скорее всего, не существует входной или выходной коннектор микропрограммы - PIN(0) или POUT(0). А не существует потому, что на каком-то предыдущем шаге микропрограмма не была загружена. В этом можно убедиться, дав команду "lo10k1 --debug 5". Если в ее выводе нет микропрограммы с условным номером 000, значит и коннекторов этой программы не существует, следовательно, соединять нечего.


Кроме того, нужно учитывать, что у некоторых микропрограмм нет входного коннектора. Например, у синус-генератора входного коннектора нет. Поэтому при загруженном синус-генераторе с условным номером 000, команда:


lo10k1 --conadd "PIN(0)=IN(0)"


выдаст ошибку:


Error: wrong parameter - connection string from <> to



Сброс DSP


Сброс осуществляется командой


lo10k1 -s


после этой команды с ошибкой вываливается kmix.



 
MyTetra Share v.0.59
Яндекс индекс цитирования