Über die digitale Audioausgabe unter Linux wurde ja bereits einiges in diesem Forum geschrieben. Ich habe versucht mich diesem Thema mit Linux-Borbmitteln zu nähern und letztlich einen Audiopc aufzubauen, den ich mittels graphischer Front-Ends auch über Tablet-PCs oder Touch-Phones steuern kann.
Selbstverständlich stand auch bei mir die möglichst bitgenaue Wiedergabe der gespeicherten Audiodaten im Vordergrund.
Hinzu kommt, dass ich auch auf die Einbindung von Firewire Audio Interfaces eingegangen bin, was evtl. tatsächlich für den Ein- oder Anderen eine Hilfestellung sein könnte, da diesbezüglich hier noch nicht viel geschrieben wurde.
Da ich auch Platten digitalisiere gibt es auch einen Abschnitt über die Aufnahme analoger Audiodaten und deren digitaler Speicherung.
Über Anregungen und Verbesserungsvorschläge freue ich mich jederzeit. Falls jemand sich an dem von mir beschriebenen Setup orientieren möchte, stehe ich gerne jederzeit mit Rat und Tat zur Verfügung.
Keywords
Linux, Audio, Realtime, Bitperfect, low latency
Resources
http://ccrma.stanford.edu/planetccrma/software
http://music.tutsplus.com/articles/work ... udio-20601
http://stufs4u.wordpress.com/2014/02/25 ... fedora-20/
https://spins.fedoraproject.org/lxde/
http://wiki.linuxmusicians.com/doku.php
http://wiki.linuxaudio.org/wiki/system_configuration
http://wiki.ubuntuusers.de/Tonstudio/Konfiguration
https://access.redhat.com/documentation ... rnors.html
http://lwn.net/Articles/143397
http://docs.fedoraproject.org/en-US/Fed ... erVNC.html
http://stufs4u.wordpress.com/2014/02/25 ... fedora-20/
Hardware
Computer
Jeder beliebige Computer mit einer geeignetten Schnittstelle für eine anständige Soundkarte der mit einem Linuxbetriebssystem lauffähig ist (ich kenne mich nur mit Linux aus).
getestete Soundkarten
EDIROL FA-66
Gustard U12 mit USB-Kabel VS-04-2X2X26C7/7-SDA/SDB/2,0
Musical Fidelity V-Link 192kHz mit USB-Kabel VS-04-2X2X26C7/7-SDA/SDB/2,0
und externem Netzteil Squeeze-Upgrade BOTW Linearnetzteil 5V USB-B
Musical Fidelity V90-DAC 24/96 mit USB-Kabel VS-04-2X2X26C7/7-SDA/SDB/3,0
M Audio Audiophile 24/96
DAC
Naim DAC / Naim 555 PS DR
Vorverstärker
Naim NAC 552 / Naim SuperCap DR
Endstufe
Naim NAP 500
Lautsprecher
Naim DBL
Betriebssystem-Installation
- Installation von Fedora 21 Workstation x86_64
Als Unterlage für unser Audio-Linux System soll Fedora in der aktuellen Version, aber mit möglichst wenig Schnickschnack herhalten.
Fedora bietet sog. Spins an, die vorkonfiguriert die Distribution für unterschiedliche Anwendergruppen bereitstellen. Ich habe mich für den schlanken LXDE Desktop Spin entschieden, siehe:
https://spins.fedoraproject.org/lxde/
Vorgehensweise
→ durchgeführte Maßnahmen bei der Betriebssysteminstallation:
> - booten von Live-Medium
> - sobald Arbeitsoberfläche betriebsbereit: Install to Hard Drive
> - Installationssprache: Deutsch
> - Datum und Uhrzeit: Europa/Berlin
> - Tastatur: Deutsch
> - Installationsziel:
> - ich werde die Partitionierung konfigurieren
> - Partitionierungsschema: Standard-Partition
> + Einhängepunkt: / , Kapazität: 32 GB, Dateisystem: ext4, Label: root
> + Einhängepunkt: swap , Kapazität: 16 GB, Dateisystem: swap, Label: swap
> + Einhängepunkt: local , Kapazität: Rest, Dateisystem: ext4, Label: swap
> Netzwerk & Hostname: pc-wohnzimmer
> Root-Password: ***
← durchgeführte Maßnahmen bei der Betriebssysteminstallation:
booten, dann als root:
→ Benutzer anlegen nach erfolgreicher Intallation un dem ersten Booten:
Code: Alles auswählen
mkdir /local/home
echo "scc:x:750:" >> /etc/group
useradd -d /local/home/hu -u 7513 -g 750 hu
passwd hu
Nachinstallation bei Verwendung von Firewire Audio Devices
nur wenn das Sounddevice ein Firewire Device ist:
Code: Alles auswählen
yum install ffado libffado
yum install jack-audio-connection-kit qjackctl
Hardwarecheck bei Firewire Devices
Karte 1
Code: Alles auswählen
lspci | grep -i firewire
> 08:03.4 FireWire (IEEE 1394): O2 Micro, Inc. Firewire (IEEE 1394) (rev 02)
ffado-test ListDevices
> -----------------------------------------------
> FFADO test and diagnostic utility
> Part of the FFADO project -- www.ffado.org
> Version: 2.2.1-Unversioned directory
> (C) 2008, Daniel Wagner, Pieter Palmers
> This program comes with ABSOLUTELY NO WARRANTY.
> -----------------------------------------------
>
> === 1394 PORT 0 ===
> Node id GUID VendorId ModelId Vendor - Model
> 0 0x00000e1003b3b456 0x0000000E 0x00000000 Linux Firewire -
> 1 0x0040ab0000c33b85 0x000040AB 0x00010049 EDIROL - EDIROL FA-66
Code: Alles auswählen
lspci | grep -i firewire
> 01:07.0 FireWire (IEEE 1394): NEC Corporation uPD72874 [Firewarden]
> IEEE1394a OHCI 1.1 Link/3-port PHY Controller (rev 01)
ffado-test ListDevices
> -----------------------------------------------
> FFADO test and diagnostic utility
> Part of the FFADO project -- www.ffado.org
> Version: 2.2.1-Unversioned directory
> (C) 2008, Daniel Wagner, Pieter Palmers
> This program comes with ABSOLUTELY NO WARRANTY.
> -----------------------------------------------
>
> === 1394 PORT 0 ===
> Node id GUID VendorId ModelId Vendor - Model
> 0 0x0040ab0000c33b85 0x000040AB 0x00010049 EDIROL - EDIROL FA-66
Code: Alles auswählen
more /proc/asound/cards
> 0 [x20 ]: USB-Audio - xCORE USB Audio 2.0
> XMOS xCORE USB Audio 2.0 at usb-0000:00:1d.7-2, high speed
> 1 [M192kHz ]: USB-Audio - Musical Fidelity V-Link 192kHz
> Musical Fidelity Musical Fidelity V-Link 192kHz
> at usb-0000:00:1d.7-2, high spead
> 2 [Intel ]: HDA-Intel - HDA Intel
> HDA Intel at 0xfe220000 irq 50
> 3 [M2496 ]: USB-Audio - M Audio Audiophile 24/96
> M Audio Audiophile 24/96 at at usb-0000:00:1d.7-3, high spead
> 4 [M2496 ]: USB-Audio - Musical Fidelity V90-DAC 24/96
> Musical Fidelity Musical Fidelity V90-DAC 24/96
> at usb-0000:00:1d.0-1, full speed
> 29 [ThinkPadEC ]: ThinkPad EC - ThinkPad Console Audio Control
> ThinkPad Console Audio Control at EC reg 0x30, fw 7KHT24WW-1.08
Repositories
Code: Alles auswählen
yum localinstall http://ccrma.stanford.edu/planetccrma/mirror/fedora/linux/planetccrma/21/x86_64/planetccrma-repo-1.1-3.fc21.ccrma.noarch.rpm
yum localinstall http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-21.noarch.rpm
yum localinstall http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-21.noarch.rpm
Um Musik unter Linux anständig wiedergeben zu können müssen wir den sog.
realtime kernel verwenden.
Code: Alles auswählen
vi /etc/yum.conf
→ /etc/yum.conf:
...
installonly_limit=0
...
← /etc/yum.conf:
vi /etc/yum.repos.d/fedora-updates.repo
→ /etc/yum.repos.d/fedora-updates.repo:
...
[updates]
...
exclude=kernel-[0-9]* kernel-devel-[0-9]* kernel-headers-[0-9]* kernel-tools-* kernel-tools-libs-* kernel-core-* kernel-modules-* kernel-modules-extra-* pulseaudio-*
...
← /etc/yum.repos.d/fedora-updates.repo:
yum install planetccrma-core kernel-rt kernel-headers kernel-tools kernel-tools-libs
Um bei zukünftigen Betriebssystem Updates den Realtime Kernel nicht durch den Standardkernel zu ersetzen, klammern wir die entsprechenden Pakete aus.
Code: Alles auswählen
vi /etc/yum.repos.d/fedora-updates.repo
→ /etc/yum.repos.d/fedora-updates.repo:
...
[updates]
...
exclude=kernel-[0-9]* kernel-devel-[0-9]* kernel-headers-[0-9]* kernel-tools-* kernel-tools-libs-* kernel-core-* k
ernel-modules-* kernel-modules-extra-* pulseaudio-*
...
← /etc/yum.repos.d/fedora-updates.repo:
Code: Alles auswählen
yum erase kernel kernel-core kernel-modules kernel-modules-extra
Code: Alles auswählen
yum update
Code: Alles auswählen
grub2-set-default "Fedora (3.14.25-200.rt22.1.fc21.ccrma.x86_64+rt) 21 (Twenty One)"
reboot
selinux deaktivieren
Code: Alles auswählen
vi /etc/sysconfig/selinux
→ /etc/sysconfig/selinux:
...
SELINUX=disabled
...
← /etc/sysconfig/selinux:
Code: Alles auswählen
systemctl disable auditd.service
systemctl stop auditd.service
systemctl disable avahi-daemon.socket
systemctl stop avahi-daemon.socket
systemctl disable avahi-daemon.service
systemctl stop avahi-daemon.service
systemctl disable bluetooth.service
systemctl stop bluetooth.service
systemctl disable smartd.service
systemctl stop smartd.service
systemctl disable tcsd.service
systemctl stop tcsd.service
Prozesse einschalten
--------------------
systemctl enable sshd.service
systemctl start sshd.service
Code: Alles auswählen
visudo
→ /etc/yum.conf:
...
root ALL=(ALL) ALL
hu ALL=(ALL) NOPASSWD: ALL
...
← /etc/yum.conf:
Der von mir verwendete Laptop ist mit einer Nvidia Grafikkarte ausgestattet.
Code: Alles auswählen
lspci | grep -i vga
> 01:00.0 VGA compatible controller: NVIDIA Corporation G86M [Quadro NVS 140M] (rev a1)
Code: Alles auswählen
vi /etc/yum.conf
→ /etc/yum.conf:
...
exclude=xorg-x11-drv-nouveau-*
...
← /etc/yum.conf:
yum erase xorg-x11-drv-nouveau
vi /etc/modprobe.d/nouveau.conf
→ /etc/modprobe.d/nouveau.conf:
blacklist nouveau
← /etc/modprobe.d/nouveau.conf:
vi /etc/default/grub
→ /etc/default/grub:
...
GRUB_CMDLINE_LINUX="rhgb quiet rdblacklist=nouveau"
...
← /etc/default/grub:
grub2-mkconfig -o /boot/grub2/grub.cfg
grub2-install /dev/sda
systemctl set-default multi-user.target
yum install akmod-nvidia-340xx xorg-x11-drv-nvidia-340xx-libs kernel-rt-devel acpid
reboot
Code: Alles auswählen
vi /etc/X11/xorg.conf
→ /etc/X11/xorg.conf:
# RPM Fusion - nvidia-xorg.conf
#
Section "Device"
Identifier "Videocard0"
Driver "nvidia"
EndSection
← /etc/X11/xorg.conf:
Code: Alles auswählen
systemctl set-default graphical.target
reboot
Code: Alles auswählen
mkdir /local/home
echo "scc:x:750:" >> /etc/group
useradd -d /local/home/hu -u 7513 -g 750 hu
passwd hu
Damit keine Rechte-Probleme beim Zugriff auf die Audio-Devices durch Benutzer entstehen müssen diese den entsprechenden Gruppen hinzugefügt werden.
Code: Alles auswählen
sudo usermod -a -G audio hu
sudo usermod -a -G jackuser hu
grep hu /etc/group
> audio:x:63:hu
> jackuser:x:981:hu
Es existiert die Möglichkeit die Verwendung von Pulsaudio pro Benutzer zu steuern.
Code: Alles auswählen
mkdir ~/.pulse
echo ‘autospawn = no’ > ~/.pulse/client.conf
Code: Alles auswählen
chmod -x /usr/bin/pulseaudio
vi /etc/yum.repos.d/fedora-updates.repo
→ /etc/yum.repos.d/fedora-updates.repo:
...
[updates]
...
exclude=kernel-[0-9]* kernel-devel-[0-9]* kernel-headers-[0-9]* kernel-tools-* kernel-tools-libs-* kernel-core-* k
ernel-modules-* kernel-modules-extra-* pulseaudio-*
...
← /etc/yum.repos.d/fedora-updates.repo:
Zunächst einmal die Liste der Soundkarten aufrufen, die Alsa gefunden hat:
Code: Alles auswählen
cat /proc/asound/cards
> 0 [Intel ]: HDA-Intel - HDA Intel
> HDA Intel at 0xfe220000 irq 49
> 1 [M2496 ]: USB-Audio - Musical Fidelity V90-DAC 24/96
> Musical Fidelity Musical Fidelity V90-DAC 24/96
> at usb-0000:00:1d.0-1, full spe
>29 [ThinkPadEC ]: ThinkPad EC - ThinkPad Console Audio Control
> ThinkPad Console Audio Control at EC reg 0x30,
> fw 7KHT24WW-1.08
Code: Alles auswählen
cat /proc/asound/modules
> 0 snd_hda_intel
> 1 snd_usb_audio
> 29 thinkpad_acpi
Code: Alles auswählen
vi /etc/modprobe.d/sound-cards-order.conf
→ /etc/modprobe.d/sound-cards-order.conf:
options snd_usb_audio index=0
options snd_hda_intel index=1
options thinkpad_acpi index=29
← /etc/modprobe.d/sound-cards-order.conf:
reboot
Code: Alles auswählen
cat /proc/asound/modules
Ziel ist es von der Anwendung direkt auf den Alsa-Kernellayer zuzugreifen. Dabei soll unter Anderem ein Resampling unterbunden werden, d.h. die Audiodaten sollen 1:1 vom Sounddevice wiedergegeben werden.
Ein Mixer (so dass z.B. mehrere Anwendungen gleichzeitig auf das Sound-Device zugreifen können) soll nicht bereitgestellt werden.
Sound Device mit Namen "default" erstellen:
Code: Alles auswählen
vi ~/.asoundrc
→ ~/.asoundrc:
pcm.snd_usb_audio {
type hw
card 0
device 0
}
ctl.snd_usb_audio {
type hw
card 0
device 0
}
ctl.!default {
type hw
card 0
device 0
}
# Create a default pcm, use the "plug" wrapper
# to wrap the named PCM we created above.
#
# Plug will adjust sample format as needed; we can
# force it to never change the sample rate! Nice.
#
pcm.!default {
type plug
slave {
pcm "snd_usb_audio"
rate "unchanged"
}
}
← ~/.asoundrc:
Autologin für den neuen Audio Benutzer
Code: Alles auswählen
vi /etc/lxdm/lxdm.conf
→ /etc/lxdm/lxdm.conf:
...
[base]
autologin=hu
...
← /etc/lxdm/lxdm.conf:
Installiert wird es durch:
Code: Alles auswählen
yum install realTimeConfigQuickScan
Eine feine Sache ist es den Audio-PC über Laptop oder Touch-Pad bzw. Handy fernsteuern zu können. Dies geschieht am einfachsten über das sog. VNC-Protokoll (siehe unten).
In diesem Fall ist es denkbar, auf einen lokalen X-Server gänzlich zu verzichten. Ich mache das so.
Zum deaktivieren des lokalen X-Servers folgenden Befehl absetzen:
Code: Alles auswählen
systemctl set-default multi-user.target
reboot
Der Sinn in der Verwendung eines Kernel mit Echtzeitfähigkeiten liegt in dessen Fähigkeit niedrige Latzenzen für die Widergabe von Audio-Dateien zu ermöglichen.
Der Realtime-Kernel-Test im Script "realTimeConfigQuickScan" fragt leider nicht die richtigen Kernel-Config-Parameter ab. Ob der Kernel über entsprechende Fähigkeiten verfügt findet man heraus durch:
Code: Alles auswählen
grep CONFIG_PREEMPT= /boot/config-`uname -r`; \
grep CONFIG_PREEMPT_RT_BASE= /boot/config-`uname -r`; \
grep CONFIG_PREEMPT_RT_FULL= /boot/config-`uname -r`
> CONFIG_PREEMPT=y
> CONFIG_PREEMPT_RT_BASE=y
> CONFIG_PREEMPT_RT_FULL=y
Weitere Informationen unter: http://wiki.linuxmusicians.com/doku.php ... ilesystems
Code: Alles auswählen
vi /etc/fstab
→ /etc/fstab:
...
/dev/sda1 / ext4 defaults,noatime 1 1
/dev/sda5 /local ext4 defaults,noatime 1 2
...
← /etc/fstab:
Oft wird unter Fedora die CPU nicht mit ihrer maximalen Taktrate betrieben, sondern erst im Bedarfsfall hochgetaktet. Darauf sollte man sich nicht verlassen und stattdessen den Rechner /sollte die CPU dies unterstützen) immer mit vollem CPU-Takt betreiben.
siehe: https://access.redhat.com/documentation ... rnors.html und http://linuxmusicians.com/viewtopic.php?f=27&t=844
Achtung bei Laptops! Kann tüchtig in die Hose gehen.
Code: Alles auswählen
yum install cpupowerutils
cpupower frequency-info --hwfreq
> analysiere CPU 0:
> 1000000
Code: Alles auswählen
cpupower frequency-set -g performance
> Setting cpu: 0
> Setting cpu: 1
cpupower frequency-info --hwfreq
> analysiere CPU 0:
> 2600000
vi /etc/rc.d/rc.local
→ /etc/rc.d/rc.local:
...
cpupower frequency-set -g performance
...
← /etc/rc.d/rc.local:
Code: Alles auswählen
chmod 755 /etc/rc.d/rc.local
Um Prozesse wie unter Anderem den Jack-Daemon priorisieren zu dürfen müssen folgende Anpassungen durchgeführt werden:
Code: Alles auswählen
mv /etc/security/limits.d/95-jack.conf /etc/security/limits.d/95-jack.conf.do_not_use
vi /etc/security/limits.conf
→ /etc/security/limits.conf:
...
# Optimization for Jack-Daemon and realtimepriority
# see: http://wiki.ubuntuusers.de/Tonstudio/Konfiguration
@audio - rtprio 99
@audio - nice -19
@audio - memlock unlimited
@jackuser - rtprio 99
@jackuser - nice -19
@jackuser - memlock unlimited
...
← /etc/security/limits.conf:
Swap abschalten
Sobald nicht genügend Hauptspeicher für alle Programme auf dem Rechner bereitsteht, beginnt normalerweise das Betriebssystem virtuellen Hauptspeicher auf der Festplatte zu verwenden, also zu swappen. Dies ist für eine Audioworkstation unbrauchbar.
Ich schalte das swapping deshalb vollständig aus.
Code: Alles auswählen
vorher:
sysctl vm.swappiness
vm.swappiness = 60
vi /etc/sysctl.d/99-sysctl.conf
→ /etc/sysctl.d/99-sysctl.conf:
...
vm.swappiness = 0
...
← /etc/sysctl.d/99-sysctl.conf:
reboot
nachher:
sysctl vm.swappiness
vm.swappiness = 0
Dieser Abschnitt betrifft vorwiegend ALSA-Midi. Evtl benutzen ja einige dieses, deshalb
sollen die Hardware-Timer nicht unerwähnt bleiben.
Code: Alles auswählen
vi /etc/udev/rules.d/40-timer-permissions.rules
→ /etc/udev/rules.d/40-timer-permissions.rules:
KERNEL=="rtc0", GROUP="audio"
KERNEL=="hpet", GROUP="audio"
← /etc/udev/rules.d/40-timer-permissions.rules:
Code: Alles auswählen
cat /proc/sys/dev/hpet/max-user-freq
> 64
cat /sys/class/rtc/rtc0/max_user_freq
> 64
Code: Alles auswählen
vi /etc/rc.d/rc.local
→ /etc/rc.d/rc.local:
#!/bin/sh
...
echo -n 3072 > /sys/class/rtc/rtc0/max_user_freq
echo -n 3072 > /proc/sys/dev/hpet/max-user-freq
...
← /etc/rc.d/rc.local:
Code: Alles auswählen
chmod 755 /etc/rc.d/rc.local
reboot
cat /proc/sys/dev/hpet/max-user-freq
> 3072
cat /sys/class/rtc/rtc0/max_user_freq
> 3072
Über threadet IRQs möchte ich an dieser Stelle keine Worte verlieren. Wer sich für die Hintergründe interessiert, dem empfehle ich eine Recherche im Internet. Wichtig ist dieser Abschnitt auf jedenfall mindestens für alle, die den Jack-Daemon für die Soundausgabe verwenden. Allgemein sollten jedoch alle mit USB-Sounddevices ihren Augenmerk auf diese Optimierung lenken.
Zunächst einmal prüfe ich, welchen IRQ meine Firewire-Soundkarte denn verwendet. Ein Blick
auf folgende URLs sei empfohlen:
http://lwn.net/Articles/143397
http://wiki.linuxaudio.org/wiki/system_ ... ng_devices
Code: Alles auswählen
grep firewire /proc/interrupts
> 22: 0 84 IO-APIC 22-fasteoi ehci_hcd:usb1, firewire_ohci
Das wollen wir dem System zunächsteinmal abgewöhnen.
Code: Alles auswählen
vi /etc/rc.d/rc.local
→ /etc/rc.d/rc.local:
#!/bin/sh
...
echo -n "0000:00:02.1" > /sys/bus/pci/drivers/ehci-pci/unbind
...
← /etc/rc.d/rc.local:
Code: Alles auswählen
chmod 755 /etc/rc.d/rc.local
Code: Alles auswählen
reboot
grep firewire /proc/interrupts
> 22: 0 83 IO-APIC 22-fasteoi firewire_ohci
Und hier mal ein Beispiel für einen wirklich übervölkerten Interrupt:
Code: Alles auswählen
grep firewire /proc/interrupts
> 16: 105 121 IO-APIC 16-fasteoi uhci_hcd:usb5, yenta, i915, firewire_ohci, yenta, mmc0
Code: Alles auswählen
yum install wget
wget http://download.opensuse.org/repositories/home:/zhonghuaren/Fedora_21/home:zhonghuaren.repo -O /etc/yum.repos.d/rpm-sphere.repo
yum install hwinfo
Code: Alles auswählen
tree /sys/bus/usb/drivers/usb/ | grep usb5
> └── usb5 -> ../../../../devices/pci0000:00/0000:00:1d.3/usb5
also:
echo -n "0000:00:1d.3" > /sys/bus/pci/drivers/uhci_hcd/unbind
Code: Alles auswählen
hwinfo > /tmp/hwinfo
grep yenta_cardbus: /tmp/hwinfo
> yenta_cardbus: /devices/pci0000:00/0000:00:1e.0/0000:08:03.0
> yenta_cardbus: /devices/pci0000:00/0000:00:1e.0/0000:08:03.1
also:
echo -n "0000:08:03.0" > /sys/bus/pci/drivers/yenta_cardbus/unbind
echo -n "0000:08:03.1" > /sys/bus/pci/drivers/yenta_cardbus/unbind
Code: Alles auswählen
grep mmc0 /tmp/hwinfo | grep /devices/pci
> P: /devices/pci0000:00/0000:00:1e.0/0000:08:03.2/leds/mmc0::
> E: DEVPATH=/devices/pci0000:00/0000:00:1e.0/0000:08:03.2/leds/mmc0::
> P: /devices/pci0000:00/0000:00:1e.0/0000:08:03.2/mmc_host/mmc0
> E: DEVPATH=/devices/pci0000:00/0000:00:1e.0/0000:08:03.2/mmc_host/mmc0
> /devices/pci0000:00/0000:00:1e.0/0000:08:03.2/leds/mmc0::
> /devices/pci0000:00/0000:00:1e.0/0000:08:03.2/mmc_host/mmc0
also:
echo -n "0000:08:03.2" > /sys/bus/pci/drivers/sdhci-pci/unbind
Das ist natürlich ärgerlich, das sich die Grafikkarte und die Firewire-Karte den gleichen IRQ teilen. Damit müssen wir dann wohl leben.
Code: Alles auswählen
grep i915 /tmp/hwinfo | grep /devices/pci
> i915: /devices/pci0000:00/0000:00:02.0
> i915: /devices/pci0000:00/0000:00:02.0
> i915: /devices/pci0000:00/0000:00:02.0
also:
echo -n "0000:00:02.0" > /sys/bus/pci/drivers/i915/unbind
Um das Ganze auch beim nächsten Neustart wieder vorzufinden muss alles
in die rc.local eingetragen werden.
Code: Alles auswählen
vi /etc/rc.d/rc.local
→ /etc/rc.d/rc.local:
#!/bin/sh
...
echo -n "0000:00:1d.3" > /sys/bus/pci/drivers/uhci_hcd/unbind
echo -n "0000:08:03.0" > /sys/bus/pci/drivers/yenta_cardbus/unbind
echo -n "0000:08:03.1" > /sys/bus/pci/drivers/yenta_cardbus/unbind
echo -n "0000:08:03.2" > /sys/bus/pci/drivers/sdhci-pci/unbind
...
← /etc/rc.d/rc.local:
Code: Alles auswählen
chmod 755 /etc/rc.d/rc.local
Code: Alles auswählen
reboot
grep firewire /proc/interrupts
> 16: 103 0 IO-APIC 16-fasteoi firewire_ohci, i915
Als letztes ein Beispiel für eine USB-Soundkarte:
Auf welchem Interface befindet sich das USB-Sound Device?
Code: Alles auswählen
hwinfo | grep snd-usb-audio | grep /usb
> snd-usb-audio: /devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0
> snd-usb-audio: /devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.1
> snd-usb-audio: /devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0
> snd-usb-audio: /devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.1
Code: Alles auswählen
grep usb2 /proc/interrupts
> 19: 79 74 IO-APIC-fasteoi ehci_hcd:usb2
als nächstes wird das Script zur Verwendung sog. threadet IRQs von Rui Nuno Capela installiert:
Code: Alles auswählen
yum install rtirq
Code: Alles auswählen
vi /etc/sysconfig/rtirq
→ /etc/sysconfig/rtirq:
#
# Copyright (c) 2004-2013 rncbc aka Rui Nuno Capela.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#
# /etc/sysconfig/rtirq
# /etc/default/rtirq
#
# Configuration for IRQ thread tunning,
# for realtime-preempt enabled kernels.
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 or later.
#
# IRQ thread service names
# (space separated list, from higher to lower priority).
# For ALSA supported Hardware:
# RTIRQ_NAME_LIST="rtc snd i8042"
# For not ALSA supported Hardware like firewire snd-devicer for example:
RTIRQ_NAME_LIST="rtc firewire usb"
# Highest priority.
# RTIRQ_PRIO_HIGH=70
RTIRQ_PRIO_HIGH=90
# Priority decrease step.
RTIRQ_PRIO_DECR=5
# Lowest priority.
RTIRQ_PRIO_LOW=65
# Priority for udev rules
RTIRQ_PRIO_UDEV=70
# Default priority for irq processes
RTIRQ_PRIO_DEFAULT=50
# Whether to reset all IRQ threads to SCHED_OTHER.
RTIRQ_RESET_ALL=0
# On kernel configurations that support it,
# which services should be NOT threaded
# (space separated list).
# For ALSA supported Hardware:
# RTIRQ_NON_THREADED="rtc snd"
# For not ALSA supported Hardware like firewire snd-devicer for example:
RTIRQ_NON_THREADED="rtc firewire usb"
# Process names which will be forced to the
# highest realtime priority range (99-91)
# (space separated list, from highest to lower priority).
# RTIRQ_HIGH_LIST="timer"
← /etc/sysconfig/rtirq:
systemctl enable rtirq.service
systemctl start rtirq.service
Nachdem auch meine Gustard urplötzlich stumm blieb fand ich hier im Forum die Lösung des Problems.
Ich unmute die Karte nun jedesmal beim Systemstart.
Code: Alles auswählen
vi /etc/rc.d/rc.local
→ /etc/rc.d/rc.local:
...
CARD=0
amixer -c $CARD scontrols | sed -e 's/^Simple mixer control //' | while read line; do
amixer -c $CARD sset "$line" unmute;
done
...
← /etc/rc.d/rc.local:
Bildschirmschoner deaktivieren
Über das Startmenü:
Einstellungen; Bildschirmschoner; Bildschirmschoner deaktivieren
Jack konfigurieren und starten (bei Verwendung von Firewire Devices)
Der Soundserver Jackd benötigt zum zuverlässigen Betrieb besondere Rechte. Diese Rechte kann man der Gruppe audio zuweisen, indem man mit einem Editor mit Root-Rechten die Datei /etc/security/limits.conf bearbeitet (wie ja oben schon beschrieben, hier aber nochmal als Hinweis).
Code: Alles auswählen
vi /etc/security/limits.conf
→ /etc/security/limits.conf:
...
# Optimization for Jack-Daemon and realtimepriority
# see: http://wiki.ubuntuusers.de/Tonstudio/Konfiguration
@audio - rtprio 99
@audio - nice -19
@audio - memlock unlimited
@jackuser - rtprio 99
@jackuser - nice -19
@jackuser - memlock unlimited
...
← /etc/security/limits.conf:
Mit dem Programm "qjackctl" existiert eine graphische Anwendung, über die sich der Jack-Daemon
einfach konfigurieren und steuern lässt.
Code: Alles auswählen
qjackctl
> Server Präfix: /usr/bin/jackd
> Treiber: firewire
> Echtzeit: ja
> Priorität: 80
> Ausführliche Meldungen: ja (während der Testphase)
> Frames/Periode: 64 (WICHTIG: spiel damit und schau wie hoch du kommst)
> Abtastrate: 96000 (evtl auch: 192000)
> Perioden/Puffer: 3
> Maximaler Port: 128
> Timeout (ms): 500
> Schnittstelle: hw:1 (evtl auch: hw:M192kHz oder hw:0)
> Audio: Duplex
> Startverzögerung: 2ms
> Latenz: 2ms
ps -ef | grep -i jackd
> hu 1715 1711 30 07:49 ? 00:00:04 /usr/bin/jackd -v -P80 -p128 -dfirewire
> -dhw:0 -r96000 -p64 -n3
Audacious
Audacious ist ein Fork des Beep Media Player (BMP). Die Arbeiten am BMP, der wiederum auf XMMS basierte, wurden schon vor längerer Zeit eingestellt.
Winamp "Classic Skins" können aber mit Audacious weiter benutzt sowie Winamp-Equalizer-Einstellungen importiert werden.
Zu den unterstützten Formaten gehören unter anderen MP3, MP4, MPEG-Audio, CD-Audio, AAC, SID, MOD, Ogg Vorbis, FLAC, WAV, WMA und NSF. Darüber hinaus unterstützt Audacious Internetradio, LIRC und LastFM/Audioscrobbler.
Das Ziel der Entwickler war es, mit Audacious einen entschlackten, schnellen, stabilen und funktionellen Audioplayer zu erstellen. Den nehme ich.
Code: Alles auswählen
yum install audacious audacious-libs audacious-plugins audacious-plugins-jack
Audacios Konfiguration für Firewire Audiodevices
Code: Alles auswählen
audacious
→ Audacious Konfiguration:
> Datei; Einstellungen
> Audio: Ausgabe-Plugin: JACK Ausgabe
>
> Bittiefe: 32
>
> Softwareseitige Amplitudenbegerenzung: nein
> Softwareseitige Lautstärkeregelung: nein
> Wiedergabeverstärkung aktivieren: nein
← Audacious Konfiguration:
Audacious soll über das neu geschaffene "default" Audio-device Musikdateien
abspielen.
Code: Alles auswählen
audacious
→ Audacious Konfiguration:
> Datei; Einstellungen
> Audio: Ausgabe Plugin: ALSA Ausgabe
> Einstellungen: PCM-Gerät: default
> Mixer-Gerät: hw:1 (HDA-Intel)
> Bittiefe: 32
> Puffergröße: 1500 ms
>
> Softwareseitige Amplitudenbegerenzung: nein
> Softwareseitige Lautstärkeregelung: nein
> Wiedergabeverstärkung aktivieren: nein
← Audacious Konfiguration:
Für die zu verwendende Soundkarte habe ich absichtlich kein Mixer-Element definiert doch Audacious verlangt bei der Konfiguration zwingend nach einem.
Wenn ich in Audacious unter Mixer-Gerät auf mein "default" Sounddevice verweise (also: "default (Standard-Mixer-Gerät)"), so erscheint (bei manchen der von mir getesteten Soundkarten) bein Starten von Audacious immer die Fehlermeldung "ALSA error: snd_mixer_attach failed: Das Argument ist ungültig".
Das nervt natürlich. Mit der beschriebenen Vorgehensweise vermeide ich aber die Fehlermeldung. Nicht schön? Finde ich auch. Über sachdienliche Hinweise würde ich mich freuen.
DeaDBeeF - Ultimate Music Player For GNU/Linux
DeaDBeeF hat mir auch auf Anhieb gefallen. Den verwende ich also auch.
Installation:
Code: Alles auswählen
cd /etc/yum.repos.d
wget https://copr.fedoraproject.org/coprs/polarbear/deadbeef/repo/fedora-21/polarbear-deadbeef-fedora-21.repo
yum install deadbeef
Zunächst muss das Plugin zur Wiedergabe von Musik über den Jack-Daemon installiert werden. Die findet sich, neben anderen Plugins auf folgender Internet-Seite:
http://deadbeef.sourceforge.net/plugins.html
Ich habe es in den /tmp Systemordner kopiert. Zur Installation als Audio-Benutzer (nicht root!) dann wie folgt vorgehen:
Code: Alles auswählen
cd /tmp
unzip jack-62d1e6a-x86_64.zip
mkdir -p ~/.local/lib/deadbeef
cp ./plugins/jack.so ~/.local/lib/deadbeef
rm -fr ./jack-62d1e6a-x86_64.zip ./plugins
Code: Alles auswählen
→ DeaDBeeF Konfiguration:
> Bearbeiten; Einstellungen
> Audio-Tab;
> Ausgabe-Plugin: Jack output plugin
> Bearbeiten; Einstellungen
> Erweiterungen-Tab;
> JACK-Output-Plugin; Einstellungen;
> Start JACK server automaticaly if not already running: NEIN!
← DeaDBeeF Konfiguration:
Code: Alles auswählen
→ DeaDBeeF Konfiguration:
> Bearbeiten; Einstellungen
> Audio-Tab;
> Ausgabe-Plugin: ALSA
> Ausgabe-Gerät: Standard Ausgabegerät
> Bearbeiten; Einstellungen
> Erweiterungen-Tab;
> ALSA-Output-Plugin; Einstellungen;
> ALSA resampling verwenden: NEIN!
← DeaDBeeF Konfiguration:
Der gnome-mplayer ist kein eigentlicher Mediaplayer, sondern vielmehr nur ein graphisches Front/End für den kommandozeilenbasierenden mplayer. Gnome-mplayer übernimmt die Benutzerinteraktion und führt im Betrieb einzeln die selektierten Mediadateien an den mplayer weiter.
Dies brachte mich auf die Idee ein kleine Script zu erstellen, dass anstelle von mplayer durch den gnome-mplayer aufgerufen wird, die Mediendaten auf eine Ramdisk kopiert und danach erst den eigentlichen mplayer aufruft.
Die Funktionalität von gnome-mplayer wird dadurch nicht beeinträchtigt. Lediglich die Pausen zwischen den einzelnen Musiktracks werden etwas länger.
Installation:
Code: Alles auswählen
yum install gnome-mplayer
Code: Alles auswählen
mkdir ~/etc
vi ~/etc/mplayer-wrapper.sh
→ ~/etc/mplayer-wrapper.sh:
#!/bin/sh
#################################
#
# Name: mplayer-wrapper.sh
# Date: Di 12. Mai 07:22:42 CEST 2015
# Version: 0.1
#
# Wrapper for the mplayer used from gnome-mplayer.
#
# Files are copied to a ramdisk and played afterwards with a realtime enhanced
# call of mplayer.
#
#################################
DEBUG=1
LOGFILE=/tmp/mplayer-wrapper.log
DELETELOGFILE=1
RAMDIKSIZE=768M
RAMDISKPATH="/run/media/`id -n -u`/audio"
MPLAYER="/bin/chrt 50 /bin/mplayer"
DELETESOFTVOL=1
# do some debugging
#
if [ "$DELETELOGFILE" -eq "1" ]; then
if [ -f "$LOGFILE" ]; then
rm $LOGFILE
fi
fi
if [ "$DEBUG" -gt "0" ]; then
if [ ! -f "$LOGFILE" ]; then
touch $LOGFILE
fi
fi
# Create a bash array for all the arguments passed to this script
#
i=0
argv=()
for arg in "$@"; do
if [ "$DELETESOFTVOL" == "1" ] && [ "$arg" == "-softvol" ]; then
argv[$i]=""
else
argv[$i]="$arg"
fi
i=$((i + 1))
done
NumberOfArguments=$i
if [ "$DEBUG" -gt "0" ]; then
printf "Arguments\n---------\n" >> $LOGFILE
echo $@ >> $LOGFILE
printf "\nnumber of arguments\n-------------------\n" >> $LOGFILE
echo $NumberOfArguments >> $LOGFILE
printf "\nMediafile\n---------\n" >> $LOGFILE
echo ${argv[$((NumberOfArguments - 1))]} >> $LOGFILE
fi
if [ ! -d "$RAMDISKPATH" ]; then
sudo mkdir -p "$RAMDISKPATH"
sudo chown "`id -n -u`.`id -n -g`" "$RAMDISKPATH"
fi
# mount ramdisk directory
#
if [ -z "`mount | grep "$RAMDISKPATH"`" ]; then
sudo mount -t tmpfs -o size="$RAMDIKSIZE" none "$RAMDISKPATH"
fi
# clean ramdisk
#
rm "$RAMDISKPATH"/*
# copy mediafile to ramdisk
#
cp "${argv[$((NumberOfArguments - 1))]}" "$RAMDISKPATH"
# Create a changed bash array for all the arguments passed to this script
# with new path to ramdisked mediafile
#
i=0
newargs=""
for newarg in "${argv[@]}"; do
newargs="$newargs $newarg"
if [ "$i" -eq "$(($NumberOfArguments-2))" ]; then
break
fi
i=$((i + 1))
done
RamdiskedMediaFile="$RAMDISKPATH/`basename "${argv[$((NumberOfArguments - 1))]}"`"
if [ "$DEBUG" -gt "0" ]; then
printf "\nnew Arguments\n-------------\n" >> $LOGFILE
printf "$newargs\n" >> $LOGFILE
printf "\nmplayer call\n------------\n" >> $LOGFILE
printf "$MPLAYER $newargs $RamdiskedMediaFile" >> $LOGFILE
fi
# call mplayer
#
$MPLAYER $newargs "$RamdiskedMediaFile"
# clean ramdisk
#
rm "$RAMDISKPATH"/*
← ~/etc/mplayer-wrapper.sh:
Code: Alles auswählen
gnome-mplayer
→ gnome-mplayer Konfiguration:
> Bearbeiten; Einstellungen
> Wiedergabe Reiter:
> Audioausgabe: Standard
> MPlayer Reiter:
> Benutzung MPlayer-Software-Lautstärgeregelung: NEIN!
> Ausführbare Datei von MPlayer: mplayer-wrapper.sh
← gnome-mplayer Konfiguration:
Ich habe deshalb einen Schalter in des Wrapper-Script eingefügt, der der nachträglich den Schalter für die Software-Lautstärgeregelung aus der Argumentenliste nimmt (siehe: "DELETESOFTVOL=1" im Wrapper-Script).
Musikaufnahme
Audacity
Zum digitalisieren meiner Plattensammlung verwende ich seit Jahren Audacious. Das Programm ist einfach zu bedienen und erfüllt alle meine Abforderungen.
Die Installation erfolgt wie gehabt via yum:
Code: Alles auswählen
yum install audacity
Code: Alles auswählen
audacity
→ Audacity Konfiguration:
> Bearbeiten; Einstellungen
> Geräte: Soundarchitektur: JACK Audio Connection Kit
> Wiedergabe Gerät: firewire_pcm
> Aufnahme Gerät; firewire_pcm
> Aufnahme Kanäle: Stereo
> Qualität:
> Standard-Samplefrequenz: 96000 Hz
> Standard-Sampleformat: 32-bit float
> Echtzeit-Umwandlung
> Samplefrequenz: Medium Quality
> Dither: keiner
> Hochwertige-Umwandlung
> Samplefrequenz: Best Quality
> Dither: Shaped
← Audacity Konfiguration:
Wenn man so weit gekommen ist, so sollte man am Besten verschiedene Audiodateien mit Audacious abspielen und kontrollieren wie die Daten des Streams zum USB-Audio-Device geartet sind.
Z.B. sollte dies wärend der Wiedergabe eines Musikstücks, dass mit 24bit/96kHz gesampelt wurde als Output generiert werden:
Code: Alles auswählen
→ cat /proc/asound/card0/stream0:
Musical Fidelity Musical Fidelity V90-DAC 24/96 at usb-0000:00:1d.0-1, full spe : USB Audio
Playback:
Status: Running
Interface = 1
Altset = 1
Packet Size = 582
Momentary freq = 96007 Hz (0x60.01e8)
Feedback Format = 10.14
Interface 1
Altset 1
Format: S24_3LE
Channels: 2
Endpoint: 1 OUT (ASYNC)
Rates: 32000, 44100, 48000, 88200, 96000
← cat /proc/asound/card0/stream0:
Wer seinen Audio-PC remote steuern will, dem seien folgende Links nahe gelegt.
http://docs.fedoraproject.org/en-US/Fed ... erVNC.html
http://stufs4u.wordpress.com/2014/02/25 ... fedora-20/
Die Fernsteuerung des Audio-PCs über VNC finde ich sehr sinnvoll. Man hat so quasi eine Fernbedienung auf seinem Laptop und das ganze ist vollkommen unempfindlich gegenüber Abbrüchen der Netzwerkverbindung zwischen VNC-Client und VNC-Server.
Bricht die Verbindung einmal ab, so läuft die Musik trotzdem weiter wie ursprünglich angewiesen über den VNC-Client. Dieser kann sich nach wiederhergestellter Netzwerkfunktionalität neu verbinden und bekommt sofort die Oberfläche des Servers angezeigt, wie sie vor dem Abbruch auch war.
Installation des Tiger VNC server Paketes
Code: Alles auswählen
yum -y install tigervnc-server
Code: Alles auswählen
cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:10.service
Code: Alles auswählen
vi /etc/systemd/system/vncserver@:10.service
→ /etc/systemd/system/vncserver@:10.service:
# The vncserver service unit file
#
# Quick HowTo:
# 1. Copy this file to /etc/systemd/system/vncserver@.service
# 2. Edit <USER> and vncserver parameters appropriately
# ("runuser -l <USER> -c /usr/bin/vncserver %i -arg1 -arg2")
# 3. Run `systemctl daemon-reload`
# 4. Run `systemctl enable vncserver@:<display>.service`
#
# DO NOT RUN THIS SERVICE if your local area network is
# untrusted! For a secure way of using VNC, you should
# limit connections to the local host and then tunnel from
# the machine you want to view VNC on (host A) to the machine
# whose VNC output you want to view (host B)
#
# [user@hostA ~]$ ssh -v -C -L 590N:localhost:590M hostB
#
# this will open a connection on port 590N of your hostA to hostB's port 590M
# (in fact, it ssh-connects to hostB and then connects to localhost (on hostB).
# See the ssh man page for details on port forwarding)
#
# You can then point a VNC client on hostA at vncdisplay N of localhost and with
# the help of ssh, you end up seeing what hostB makes available on port 590M
#
# Use "-nolisten tcp" to prevent X connections to your VNC server via TCP.
#
# Use "-localhost" to prevent remote VNC clients connecting except when
# doing so through a secure tunnel. See the "-via" option in the
# `man vncviewer' manual page.
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target
[Service]
Type=forking
# Clean any existing files in /tmp/.X11-unix environment
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/sbin/runuser -l hu -c "/usr/bin/vncserver %i"
PIDFile=/local/home/hu/.vnc/%H%i.pid
ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
[Install]
WantedBy=multi-user.target
← /etc/systemd/system/vncserver@:10.service:
Code: Alles auswählen
firewall-cmd --permanent --zone=public --add-service vnc-server
erweitert auf:
Code: Alles auswählen
vnc-server: Proto TCP, Range 5900-5920
Als Audio-Benutzer (in meinem Fall: hu) lokal auf dem System einloggen. Dann:
Code: Alles auswählen
vncpasswd
Password : ***
Verify : ***
Falls jemand ein leeres Password möchte:
vncpasswd -f > .vnc/passwd
[ENTER]
Code: Alles auswählen
systemctl daemon-reload
systemctl enable vncserver@:10.service
systemctl start vncserver@:10.service
Nachdem alle Pakete installiert sind und ich mich entschieden habe mittels Jack meine Audiohardware anzusteuern und Audacious als Audioplayer zu verwenden, lege ich zwei Iconen zum Schnellstart für die beiden Anwendungen auf dem Desktop an.
Ich klicke im laufenden Desktop mit der rechten Maustaste auf einen freien Bereich. In dem sich öffnenden Kontext-Menü wähle ich "Neu..." und darunter den Punkt "Leere Datei" (mit der Rechten Maus!). LXDE fragt mich nun nach einem Namen für die Datei und ich benenne sie nun "qjackctl.desktop". Wichtig ist das
".desktop", denn daran erkennt LXDE später, dass es sich um eine besondere Datei mit zusätzlichen Angaben handelt.
Die Datei liegt nun auf dem Desktop, Zeit zu hinterlegen was wir mit ihr starten wollen. Ich klicke mit der rechten Maustaste auf das neue Icon und wähle im Kontextmenü den Punkt Leafpad aus. Leafpad ist auf meinem System nach der Grundinstallation ein einfacher mitgelieferter Editor. Wer sein System
anders eingerichtet hat, hat womöglich einen anderen Texteditor hier aufgeführt, oder muss ihn manuell starten und darin unsere Datei öffnen. Sie befindet sich im Ordner ~/Schreibtisch, bei mir also in
/local/home/hu/Schreibtisch .
In die Datei schreibe ich nun folgende Inhalte hinein (Ehrlich gesagt habe ich es nicht wie oben beschrieben über die Maus und Klicks gemacht, sondern direkt die Desktop-Dateien mittels vi editiert.):
Code: Alles auswählen
vi ~/Schreibtisch/qjackctl.desktop
→ ~/Schreibtisch/qjackctl.desktop:
[Desktop Entry]
Name=qjackctl
Comment=start and controll the Jack Daemon
Exec=/usr/bin/qjackctl
TryExec=/usr/bin/qjackctl
Icon=qjackctl
Type=Application
← ~/Schreibtisch/qjackctl.desktop:
neue Desktop Verknüpfung starten.
Das Gleiche wiederhole ich nun für die Anwendung "audacious", also:
Code: Alles auswählen
vi ~/Schreibtisch/audacious.desktop
→ ~/Schreibtisch/audacious.desktop:
[Desktop Entry]
Name=audacious
Comment=start the audacious audio player
Exec=/usr/bin/audacious
Icon=audacious
Type=Application
← ~/Schreibtisch/audacious.desktop:
Code: Alles auswählen
vi ~/Schreibtisch/deadbeef.desktop
→ ~/Schreibtisch/deadbeef.desktop:
[Desktop Entry]
Name=deadbeef
Comment=start the deadbeef audio player
Exec=/usr/bin/deadbeef
Icon=deadbeef
Type=Application
← ~/Schreibtisch/deadbeef.desktop:
Code: Alles auswählen
vi ~/Schreibtisch/gnome-mplayer.desktop
→ ~/Schreibtisch/gnome-mplayer.desktop:
[Desktop Entry]
Name=gnome-mplayer
Comment=start the gnome-mplayer audio player
Exec=/bin/gnome-mplayer
Icon=gnome-mplayer
Type=Application
← ~/Schreibtisch/gnome-mplayer.desktop:
Code: Alles auswählen
vi ~/Schreibtisch/audacity.desktop
→ ~/Schreibtisch/audacity.desktop:
[Desktop Entry]
Name=audacity
Comment=start the audacity audio recorder
Exec=/usr/bin/audacity
Icon=audacity
Type=Application
← ~/Schreibtisch/audacity.desktop:
Und, haben die Systemoptimierungen etwas gebracht? Zunächsteinmal ein kurzer Blick
auf die Prozessliste:
Code: Alles auswählen
top -H
> top - 07:32:34 up 21 min, 2 users, load average: 0,77, 0,84, 0,63
> Threads: 295 total, 1 running, 294 sleeping, 0 stopped, 0 zombie
> %Cpu0 : 12,0 us, 28,9 sy, 0,0 ni, 59,1 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st
> %Cpu1 : 11,8 us, 19,7 sy, 0,0 ni, 65,0 id, 0,0 wa, 0,0 hi, 3,5 si, 0,0 st
> KiB Mem : 5850212 total, 4869388 free, 271948 used, 708876 buff/cache
> KiB Swap: 17577980 total, 17577980 free, 0 used. 5478896 avail Mem
>
> PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
> 1800 hu -85 0 859492 71088 50272 S 17,8 1,2 2:51.65 FW_ISORCV
> 1802 hu -50 0 859492 71088 50272 S 16,2 1,2 2:29.96 jackd
> 452 root -86 0 0 0 0 S 15,5 0,0 2:42.21 irq/22-fire+
> 1799 hu -87 0 859492 71088 50272 S 12,9 1,2 2:02.92 FW_ISOXMT
> 1901 hu -76 0 841432 73192 64804 S 5,3 1,3 0:02.10 audacious
Code: Alles auswählen
ps axHo user,lwp,pid,priority,rtprio,ni,command | grep jackd
> ...
> hu 1778 1768 -86 85 - /usr/bin/jackd -v -P80 -p128 -dfirewire -dhw:1 -r96000 -p64 -n3
> hu 1779 1768 -2 1 - /usr/bin/jackd -v -P80 -p128 -dfirewire -dhw:1 -r96000 -p64 -n3
> hu 1780 1768 -87 86 - /usr/bin/jackd -v -P80 -p128 -dfirewire -dhw:1 -r96000 -p64 -n3
> hu 1781 1768 -85 84 - /usr/bin/jackd -v -P80 -p128 -dfirewire -dhw:1 -r96000 -p64 -n3
> hu 1782 1768 -81 80 - /usr/bin/jackd -v -P80 -p128 -dfirewire -dhw:1 -r96000 -p64 -n3
> ...
Dem FFADO-Firewire Treiber sowie dem Jack-Daemon, dem Interrupt-Handler, der für die Ausgabe der Daten über das Firewire-Interface des Rechners zuständig ist, und dem Ausioplayer audacious, werden die höchsten
Sytemprioritäten zugebilligt (-85, -81, -86, -76).
Die genannten Anwendungen machen regen Gebrauch von den zwei Cores des verwendeten Testsystems (17,8 % + 12,9 % FFADO, 16,2 % jackd, 15,5 % IRQ 22 Firewire-Karte und 5,3 % audacious).
Die Prozesse verteilen sich gleichmäßig auf die Cores.
Bei einem Quad-Core System wären weitere Anpassungen eventuell sinnvoll. Eine Verteilung der FFADO-Firewire Treiber, des Jack-Daemons, des Interrupt-Handlers und des Ausioplayers auf jeweils einen eigenen dedizierten Core wäre denkbar.
Und, wie klingt es?
Dazu später. Im Moment tun mir die Finger vom Tippen weh.