Задача – нужен отдельный компьютер полностью оптимизированный аппаратно и программно для высококачественного воспроизведения, с возможностью FIR коррекции и выводом на любое количество каналов. Так же необходима возможность подключения к серверу любых устройств на базе операционных систем Windows, Unix.
Основой нашего сервера будет звуковой сервер Jack http://www.jackaudio.org/
Звуковой сервер Jack возможно установить практически на любую ОС - Windows, Linux, BSD, MacOS.
Связь между сервером и клиентом Jack возможна по трем протоколам
NetJack https://github.com/jackaudio/jackaud...h_User_NetJack
NetJack2 https://github.com/jackaudio/jackaud..._User_NetJack2
Jacktrip https://ccrma.stanford.edu/groups/so...ware/jacktrip/
Все три подходят под наши задачи, будем выбирать какой удобнее в конкретном случае.
Какую выбрать ОС для сервера ?
Windows – нет подходящего под наши задачи FIR фильтра и отсутствие полного контроля, но вариант рабочий.
Linux – есть Brutefir http://www.ludd.luth.se/~torger/brutefir.html возможно управление эквалайзером brutefir через сеть и полный контроль над системой.
Начну с Linux.
За последний месяц попробовал почти все основные сборки, самая удобная и оптимизированная для аудио Tango Studio http://tangostudio.tuxfamily.org/ у меня стоит как вторая (основная) система на PC.
Для сервера остановился на компактном antiX Linux http://antix.mepis.org/index.php?title=Main_Page он собран на Debian, все необходимые пакеты есть в репозитории Debian.
Железная основа сервера – в принципе любая на сколько позволяет кошелек и фантазия.
У меня, пока старый PC из чулана на одноядерном Pentium 4 и 700Мб памяти.
Звук - m audio audiophile 192 и старушка SB Live!
В качестве жесткого диска решил использовать обычную флешку , лучше USB3 (370руб 8Гб)
1. Установка ОС Linux на сервер
Скрытый текст
Устанавливать и настраивать ОС лучше из VirtualBox, в качестве рабочей (основной) ОС Tango Studio.
Как примонтировать реальный диск к VirtualBox смотрите здесь http://mnorin.com/ispol-zovanie-fizicheskogo-diska-v-virtualbox.html
Можно по привычному с CD.
Для создания таблицы разделов и форматирования флешки используем GParted
1. create patrition table / msdos
2. new patrition ext4
Устанавливаем Tango Studio, установка в графическом режиме.
После завершения установки если ставили из VirtualBox, загружаемся в реальной системе и делаем от root
update-initramfs -v -u -k `uname -r` -t
Система в принципе полностью настроенна и все установленно, единственное нужно установить Brutefir
apt-get update
apt-get install brutefir
И настроить jack для работы в RT режиме в файл /etc/security/limits.conf добовляем
@realtime - rtprio 99
@realtime - memlock unlimited
Создаем группу realtime и добавляем пользователей
groupadd realtime
usermod -a -G realtime root
usermod -a -G realtime ваш_логин
usermod -a -G audio root
usermod -a -G audio ваш_логин
Через netmaneger прописываем статический IP
192.168.123.1
255.255.255.0
192.168.123.255
Этот шаг можно пропустить
Для подключения через NetJack2 нужно настроить UDP
устанавливаем smcroute
apt-get install smcroute
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
*/etc/init.d/smcroute* restart
smcroute -j eth0 225.3.19.154
Настраиваем qjackctl, запускаем.
jack_load netmanager
Все сервер NetJack2 запущен, теперь с любой машины с установленным Jack подключаемся к серверу
jackd -R -d net -a 192.168.123.1 асинхронный режим
jackd -R -S -d net -a 192.168.123.1 синхронный режим
Для контроля и настройки сервера лучше установить tigervnc http://tigervnc.org/
Настройка сервера здесь http://ubuntuforums.org/showthread.php?t=1885744
Настраиваем автологин, в нашем случае лучше все делать от root.
В файле /etc/lightdm/lightdm.conf раскомментируем строчку
# autologin-user=
приводим ее в такой вид
autologin-user=root (или ваш ник)
Отключаем видеокарту, встроенную графику - через BIOS.
[свернуть]
2. Установка ОС Linux на сервер (консольный вариант)
Скрытый текст
Устанавливать и настраивать ОС лучше из VirtualBox, в качестве рабочей (основной) ОС Tango Studio.
Как примонтировать реальный диск к VirtualBox смотрите здесь http://mnorin.com/ispol-zovanie-fizicheskogo-diska-v-virtualbox.html
Можно по привычному с CD.
Для создания таблицы разделов и форматирования флешки используем GParted
1. create patrition table / msdos
2. new patrition ext4 / создаем два раздела в моем случае по 3,7Гб
Установка , сначала в второй раздел ставим antiX-15-V_386-base с минимальным рабочим окружением, может понадобится для отладки и настройки. Установка в графическом режиме.
После, ставим в первый раздел antiX-15-V_386-core-libre
Установка в консольном режиме.
root
root
cli-installer
repartition disk - no
root patrition - sda1
home patrition - no
anix-net - no
Копирует файлы далее Enter
User name
Password
Все перезагрузка reboot
В случае если загрузчик Grub не установился, то.
Снова загрузка с CD antiX-15-V_386-core-libre
root
root
mount /dev/sda1 /mnt
mount --bind /dev /mnt/dev
mount --bind /sys /mnt/sys
mount --bind /proc /mnt/proc
chroot /mnt
grub-install /dev/sda
update-grub
exit
reboot
По умолчанию будет antiX-15-V_386-core-libre минимальная ОС без графического интерфейса (он нам на сервере не нужен, контроль через SSH).
Загружаемся в antiX-15-V_386-core-libre. Настраиваем сеть (в VirtualBox чем хорошо, все автоматом и находимся в основной системе).
Устанавливаем нужный нам софт
apt-get update
apt-get install alsa-base alsa-utils alsa-tools jackd1 jacktrip brutefir openssh-server wicd wicd-curses aj-snapshot
При установке jackd вылезит окно - выбераем YES
Настраиваем локальную сеть
wicd-curses
в окне вводим
static IP
192.168.123.1
255.255.255.0
192.168.123.255
Настраиваем SSH сервер
nano /etc/ssh/sshd_configure
В строке
PermitRootLogin without-password меняем на yes
После
service ssh restart
ssh root@192.168.123.1 проверяем подключение
Настраиваем jack для работы в RT режиме в файл /etc/security/limits.conf добовляем
@realtime - rtprio 99
@realtime - memlock unlimited
Создаем группу realtime и добавляем пользователей
groupadd realtime
usermod -a -G realtime root
usermod -a -G realtime ваш_логин
usermod -a -G audio root
usermod -a -G audio ваш_логин
Ставим RT kernel отсюда http://www.pengutronix.de/software/l...debian_en.html
Загружаемся с новым ядром, удаляем старое
apt-get remove linux-image-4.0.5*
Если ставили через virtualbox, то загружаемся в реальном сервере и пересобираем initramfs
update-initramfs -v -u -k `uname -r` -t
Все, сервер готов к работе.[свернуть]
3. Установка ОС Windows на сервер
Скрытый текст
Установка Windows XP на сервер.
Устанавливать будем на флешку.
Образ системы адаптированной для работы с USB флеш берём на рутрекере WinXP-2009-USB-Virtual-Universal-aleks2009 подробное описание установки там же.
После установки системы (лучше через VirtualBox как монтировать реальный диск к VirtualBox смотрите здесь http://mnorin.com/ispol-zovanie-fizicheskogo-diska-v-virtualbox.html )
загружаемся на реальном сервере, предварительно в BIOS отключаем все лишние у-ва IDE, Audio... у меня осталось только Lan и USB, устанавливаем драйвера. Настраиваем сеть, прописоваем адрес 192.168.123.1 255.255.255.0 отключаем брандмауэр, запускаем сеть.
Настройка и контроль через RDP, чтобы подключаться без пароля
выполнить - gpedit.msc
Конфигурация компьютера - Конфигурация Windows - Локальные политики - Параметры безопасности - Учетные записи: ограничить использование пустых паролей только для консольного входа - поставить "Отключить".
Проверяем подключение RDP, отключаем видеокарту, если встроенная графика, то через BIOS.
Устанавливаем jack http://www.jackaudio.org/downloads/
Открываем Jack Control настраиваем,
Start
Открываем Jack Command пишем такую строку
jack_load netmanager -i "-a 192.168.123.1"
Жмем Enter Запускаем Netjack
На машине клиенте открываем Jack Command
jackd -R -d net -a 192.168.123.1 #асинхронный режим
jackd -R -S -d net -a 192.168.123.1 #синхронный режим
Жмем Enter подключаемся к серверу,
в плеере вывод выбераем JackRouter(ASIO)
[свернуть]
Настройка Brutefir.
Установить лучше последнюю версию, с сайта программы. из репо Debian тож нормально работает.
Нужно создать файл с настройками, подробное описание на сайте программы
Вот несколько примеров
FIR фильтр на два канала, обязательно нужно соблюдать синтаксис
Скрытый текст
## DEFAULT GENERAL SETTINGS ##
float_bits: 32;
sampling_rate: 48000;
filter_length: 65536;
modules_path: "/usr/lib/brutefir";
convolver_config: ".fftw3ampir";
monitor_rate: true; # monitor sample rate
powersave: true; # pause filtering when input is zero
lock_memory: true; # try to lock memory if realtime prio is set
## COEFF DEFAULTS ## # здесь указать путь к txt файлу фильтра из rePhase
coeff "leftpl" {
filename: "/home/ampir/brutefir/fir/pl64-48.txt";
format: "text"; # file format
attenuation: 0.0; # attenuation in dB
};
coeff "rightpl" {
filename: "/home/ampir/brutefir/fir/pl64-48.txt";
format: "text"; # file format
attenuation: 0.0; # attenuation in dB
};
## INPUT DEFAULTS ## # описание входов brutefir для jack
input "left-in", "right-in" {
device: "jack" { };
sample: "AUTO";
channels: 2;
};
# соединение выходов brutefir на у-ва jack
output "left-pl", "right-pl" {
device: "jack" { ports: "system:playback_1", "system:playback_2"; };
sample: "AUTO";
channels: 2/0,1;
delay: 0,0; # delay in samples for each channel
maxdelay: -1; # max delay for variable delays
};
## FILTER DEFAULTS ## # описание коммутации фильтров
filter "leftplfilter" {
from_inputs: "left-in";
to_outputs: "left-pl";
coeff: "leftpl";
};
filter "rightplfilter" {
from_inputs: "right-in";
to_outputs: "right-pl";
coeff: "rightpl";
};
СИНТАКСИС, выше не сохроняется
[свернуть]
FIR фильтр на 6 каналов, 17 полосный эквалайзер АЧХ и ФЧХ, эквалайзером можно управлять через CLI интерфейс
Скрытый текст
float_bits: 64;
sampling_rate: 192000;
filter_length: 32768,8;
modules_path: "/usr/lib/brutefir";
convolver_config: ".fftw3ampir";
monitor_rate: true; # monitor sample rate
powersave: true; # pause filtering when input is zero
lock_memory: true; # try to lock memory if realtime prio is set
logic: "cli" { port: 3000; },
"eq" {
{
coeff: "equalizer";
bands: 20, 40, 60, 100, 800, 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 10000, 12000, 16000;
magnitude: 20/0.0, 40/0.0, 60/0.0, 100/0.0, 800/0.0, 1000/0.0, 2000/0.0, 3000/0.0, 4000/0.0, 5000/0.0, 6000/0.0, 7000/0.0, 8000/0.0, 9000/0.0, 10000/0.0, 12000/0.0, 16000/0.0;
};
};
coeff "equalizer" {
filename: "dirac pulse";
shared_mem: true;
blocks: 4;
};
## COEFF DEFAULTS ##
coeff "leftmid" {
filename: "/home/ampir/brutefir/fir/mid64-192.txt";
format: "text"; # file format
attenuation: 0.0; # attenuation in dB
};
coeff "rightmid" {
filename: "/home/ampir/brutefir/fir/mid64-192.txt";
format: "text"; # file format
attenuation: 0.0; # attenuation in dB
};
coeff "lefthi" {
filename: "/home/ampir/brutefir/fir/hi64-192.txt";
format: "text"; # file format
attenuation: 0.0; # attenuation in dB
};
coeff "righthi" {
filename: "/home/ampir/brutefir/fir/hi64-192.txt";
format: "text"; # file format
attenuation: 0.0; # attenuation in dB
};
coeff "leftsab" {
filename: "/home/ampir/brutefir/fir/sab64-192.txt";
format: "text"; # file format
attenuation: 0.0; # attenuation in dB
};
coeff "rightsab" {
filename: "/home/ampir/brutefir/fir/sab64-192.txt";
format: "text"; # file format
attenuation: 0.0; # attenuation in dB
};
## INPUT DEFAULTS ##
input "left-in", "right-in" {
device: "jack" { };
sample: "AUTO";
channels: 2;
};
output "left-mid", "right-mid", "left-hi", "right-hi", "left-sab", "right-sab" {
device: "jack" { ports: "system:playback_1", "system:playback_2",
"system:playback_3", "system:playback_4", "system:playback_5", "system:playback_6"; };
sample: "AUTO";
channels: 6/0,1,2,3,4,5;
delay: 0,0,0,0,0,0; # delay in samples for each channel
maxdelay: -1; # max delay for variable delays
};
## FILTER DEFAULTS ##
filter "eq_l" {
from_inputs: "left-in";
to_filters: "leftmidfilter", "lefthifilter", "leftsabfilter";
coeff: "equalizer";
};
filter "eq_r" {
from_inputs: "right-in";
to_filters: "rightmidfilter", "righthifilter", "rightsabfilter";
coeff: "equalizer";
};
filter "leftmidfilter" {
from_filters: "eq_l";
to_outputs: "left-mid";
coeff: "leftmid";
};
filter "rightmidfilter" {
from_filters: "eq_r";
to_outputs: "right-mid";
coeff: "rightmid";
};
filter "lefthifilter" {
from_filters: "eq_l";
to_outputs: "left-hi";
coeff: "lefthi";
};
filter "righthifilter" {
from_filters: "eq_r";
to_outputs: "right-hi";
coeff: "righthi";
};
filter "leftsabfilter" {
from_filters: "eq_l";
to_outputs: "left-sab";
coeff: "leftsab";
};
filter "rightsabfilter" {
from_filters: "eq_r";
to_outputs: "right-sab";
coeff: "rightsab";
};
[свернуть]
Запуск Brutefir
brutefir -nodefault /.../конф.файл
Буду постепенно дополнять описание всех настроек и .....
Социальные закладки