Grüssdich Udo
Udor hat geschrieben:
Ich habe den Debugmodus mal eingeschaltet:
Code: Alles auswählen
root@udo-streamer:/home/udo#
/home/udo/audio/bayft/bayft_loop starting...
loopinits_loop_pre
loopinits_loop_pre -> brutefir_on_or_off_set
localhost [127.0.0.1] 3000 (?) : Connection refused
loopinits_loop_pre -- brutefir_on_or_off_set -> brutefir_transit
localhost [127.0.0.1] 3000 (?) : Connection refused
localhost [127.0.0.1] 3000 (?) : Connection refused
localhost [127.0.0.1] 3000 (?) : Connection refused
localhost [127.0.0.1] 3000 (?) : Connection refused
...
loopinits_loop_pre -- brutefir_on_or_off_set <- brutefir_transit
loopinits_loop_pre -- brutefir_on_or_off_set -- continue --
localhost [127.0.0.1] 3000 (?) : Connection refused
...
Die Funktion brutefir_on_off_set scheint der Übeltäter zu sein. Brutefir wird erst eine ganze weile später gestartet.
Wenn ich das richtig verstanden hab schaut das Skript nach ob schon ein Brutefir Prozess läuft und das scheint nicht so richtig zu funktionieren.
bayft kontrolliert wiederholt den Funktionsstatus von Brutefir und bedient sich dabei des CLI (common language interface) von Brutefir, welches defaultmässig über den Port 3000 läuft, z.B. unter anderem innerhalb einer Schleife in der Funktion brutefir_transit (diese stellt sicher, dass beim Start Brutefir vollständig funktional, oder aber beim Stop Brutefir vollständig heruntergefahren ist, bevor das Script weiterläuft, um instabil-transitorische Zustände auszuschliessen).
Offenbar ist es auf Deinem System nicht möglich, das CLI über den Port 3000 anzusprechen, da
localhost [127.0.0.1] 3000 (?) : Connection refused. Deshalb loop'd brutefir_transit so lange und beinahe ewig vor sich hin, bis die voreingestellte grosszügig bemessene maxloop-default-Zeit von 10'' erreicht ist.
Als nächsten Schritt müsstest Du also sicherstellen,dass auf Deinem System der Aufruf des CLI über den Port 3000 möglich wird.
Udor hat geschrieben:
Mich würde mal interessieren wie dein Setup genau aussieht bzw. wie du das Skript genau einsetzt. Regelst du die Lautstärke auch rein über das Skript oder ist da noch eine analoge LS Regelung vorhanden ? Schaltet das Skript die Filter(bzw. Configs) bei wechselnder SR automatisch um sofern autosync z.b. am SPDIF Eingang aktiviert ist ?
Meine aktuelle Brutefir Config:
Code: Alles auswählen
#############################################
## brutefirconfig
## Filterlänge 64k
## 4-Weg-Frequenzweiche Horbach-Keele
## Soundcard: RME Hammerfall DSP Muliface (I)
## Analog inputs 1-2
#############################################
float_bits: 64; # internal floating point precision
sampling_rate: 44100; # sampling rate in Hz of audio interfaces
#filter_length: 32768,2;
#filter_length: 16384,4;
filter_length: 8192,8;
#filter_length: 4096,16;
#
allow_poll_mode: true; # allow use of input poll mode
lock_memory: false; # try to lock memory if realtime prio is set - set to false, dafür keine systemweite SWAP-file
max_dither_table_size: 0; # maximum size in bytes of precalculated dither
powersave: false; # pause filtering when input is zero - nur sinnvoll für Leistungsmessungen ohne Eingangssignal
sdf_length: 0; # subsample filter half length in samples
#
overflow_warnings: true; # echo warnings to stderr if overflow occurs
monitor_rate: true; # monitor sample rate
show_progress: true; # echo filtering progress to stderr
#
convolver_config: "/home/privat/bayft/brutefir_convolver"; # location of convolver config file
#config_file: "/home/privat/bayft/brutefir_config"; # standard location of main config file
#modules_path: "/usr/lib/brutefir"; # extra path where to find BruteFIR modules
modules_path: "/home/privat/bayft";
## LOGIC ##
logic: "cli" { port: 3000; };
## COEFFS ##
#coeff <STRING: name | NUMBER: index> {
# filename: <STRING: filename>; | <NUMBER: shmid>/<NUMBER: offset>/<NUMBER: blocks>[,...];
# format: <STRING: sample format string | "text" | "processed">;
# attenuation: <NUMBER: attenuation in dB>;
# blocks: <NUMBER: length in blocks>;
# skip: <NUMBER: bytes to skip in beginning of file>;
# shared_mem: <BOOLEAN: allocate in shared mem>
#};
coeff "Coeff_Overall_L" {
filename: "/home/privat/bayft_worksets/Stuttgart_AD/PRCcorr_44100_L.dbl";
format: "FLOAT64_LE";
attenuation: 0.0;
blocks: -1;
skip: 0;
shared_mem: false;
};
coeff "Coeff_Overall_R" {
filename: "/home/privat/bayft_worksets/Stuttgart_AD/PRCcorr_44100_R.dbl";
format: "FLOAT64_LE";
attenuation: 0.0;
blocks: -1;
skip: 0;
shared_mem: false;
};
coeff "Coeff_T29MF" {
filename: "/home/privat/bayft_worksets/Stuttgart_AD/XOcorr_T29_44100.dbl";
format: "FLOAT64_LE";
attenuation: 14.0;
blocks: -1;
skip: 0;
shared_mem: false;
};
coeff "Coeff_W12CY" {
filename: "/home/privat/bayft_worksets/Stuttgart_AD/XOcorr_W12_44100.dbl";
format: "FLOAT64_LE";
attenuation: 15.0;
blocks: -1;
skip: 0;
shared_mem: false;
};
coeff "Coeff_L18RNX" {
filename: "/home/privat/bayft_worksets/Stuttgart_AD/XOcorr_L18_44100.dbl";
format: "FLOAT64_LE";
attenuation: 9.3;
blocks: -1;
skip: 0;
shared_mem: false;
};
coeff "Coeff_XXLS12" {
filename: "/home/privat/bayft_worksets/Stuttgart_AD/XOcorr_XXLS_44100.dbl";
format: "FLOAT64_LE";
attenuation: 0.0;
blocks: -1;
skip: 0;
shared_mem: false;
};
## INPUT ##
#input <STRING: name | NUMBER: index>[, ...] {
# device: <STRING: I/O module name> { <I/O module settings>> };
# sample: <STRING: sample format>;
# channels: <NUMBER: open channels>[/<NUMBER: channel index>[, ...]];
# delay: <NUMBER: delay in samples>[, ...];
# subdelay: <NUMBER: additional delay in 1/100th samples (valid range -99 - 99)>[, ...];
# maxdelay: <NUMBER: maximum delay for dynamic changes>;
# individual_maxdelay: <NUMBER: maximum delay for dynamic changes>[, ...];;
# mute: <BOOLEAN: mute channel>[, ...];
# mapping: <NUMBER: channel index>[, ...];
#};
input "In_L", "In_R" {
device: "alsa" { device: "hw:0"; }; # ALSA in
sample: "S24_4LE";
# CHANNELSOPTIONS
# channels: 18/0,1; # Analog inputs 1-2
# channels: 18/16,17; # SPDIF input
channels: 18/0,1;
delay: 0,0;
# subdelay: 0,0;
# maxdelay: -1;
# individual_maxdelay: 0,0;
mute: false, false;
};
## OUTPUT ##
#output <STRING: name | NUMBER: index>[, ...] {
# device: <same syntax as for the input structure>;
# sample: <same syntax as for the input structure>;
# channels: <same syntax as for the input structure>;
# delay: <same syntax as for the input structure>;
# subdelay: <NUMBER: additional delay in 1/100th samples (valid range -99 - 99)>[, ...];
# maxdelay: <same syntax as for the input structure>;
# individual_maxdelay: <same syntax as for the input structure>;
# mute: <same syntax as for the input structure>;
# mapping: <same syntax as for the input structure>;
# dither: <BOOLEAN: apply dither>;
# merge: <BOOLEAN: merge discontinuities at coeff change>;
#};
output "Out_T29MF_L","Out_W12CY_L","Out_L18RNX_L","Out_XXLS12_L","Out_T29MF_R","Out_W12CY_R","Out_L18RNX_R","Out_XXLS12_R" {
device: "alsa" { device: "hw:0,0"; };
sample: "S24_4LE";
channels: 18/0,1,2,3,4,5,6,7;
delay: 12,3,2,0,12,3,2,0;
# maxdelay: -1;
# individual_maxdelay: 0,0,0,0,0,0,0,0;
mute: false,false,false,false,false,false,false,false;
dither: true;
};
## FILTERS ##
#filter <STRING: name | NUMBER: index> {
# from_inputs: <STRING: name | NUMBER: index>[/<NUMBER:attenuation in dB>][/<NUMBER:multiplier>][, ...];
# from_filters: <same syntax as from_inputs field>;
# 200 <same syntax as from_inputs field>;
# to_filters: <STRING: name | NUMBER: index>[, ...];
# process: <NUMBER: process index>;
# coeff: <STRING: name | NUMBER: index>;
# delay: <NUMBER: pre-delay in blocks>;
# crossfade: <BOOLEAN: cross-fade when coefficient is changed>;
#};
filter "Filt_Overall_L" {
from_inputs: "In_L"/0.0;
to_filters: "Filt_T29MF_L", "Filt_W12CY_L", "Filt_L18RNX_L", "Filt_XXLS12_L" ;
process: -1;
coeff: "Coeff_Overall_L";
# coeff: -1;
delay: 0;
crossfade: false;
};
filter "Filt_Overall_R" {
from_inputs: "In_R"/0.0;
to_filters: "Filt_T29MF_R", "Filt_W12CY_R", "Filt_L18RNX_R", "Filt_XXLS12_R" ;
process: -1;
coeff: "Coeff_Overall_R";
# coeff: -1;
delay: 0;
crossfade: false;
};
filter "Filt_T29MF_L" {
from_filters: "Filt_Overall_L"/0.0;
to_outputs: "Out_T29MF_L"/200;
process: -1;
coeff: "Coeff_T29MF";
# coeff: -1;
delay: 0;
crossfade: false;
};
filter "Filt_T29MF_R" {
from_filters: "Filt_Overall_R"/0.0;
to_outputs: "Out_T29MF_R"/200;
process: -1;
coeff: "Coeff_T29MF";
# coeff: -1;
delay: 0;
crossfade: false;
};
filter "Filt_W12CY_L" {
from_filters: "Filt_Overall_L"/0.0;
to_outputs: "Out_W12CY_L"/200;
process: -1;
coeff: "Coeff_W12CY";
# coeff: -1;
delay: 0;
crossfade: false;
};
filter "Filt_W12CY_R" {
from_filters: "Filt_Overall_R"/0.0;
to_outputs: "Out_W12CY_R"/200;
process: -1;
coeff: "Coeff_W12CY";
# coeff: -1;
delay: 0;
crossfade: false;
};
filter "Filt_L18RNX_L" {
from_filters: "Filt_Overall_L"/0.0;
to_outputs: "Out_L18RNX_L"/200;
process: -1;
coeff: "Coeff_L18RNX";
# coeff: -1;
delay: 0;
crossfade: false;
};
filter "Filt_L18RNX_R" {
from_filters: "Filt_Overall_R"/0.0;
to_outputs: "Out_L18RNX_R"/200;
process: -1;
coeff: "Coeff_L18RNX";
# coeff: -1;
delay: 0;
crossfade: false;
};
filter "Filt_XXLS12_L" {
from_filters: "Filt_Overall_L"/0.0;
to_outputs: "Out_XXLS12_L"/200;
process: -1;
coeff: "Coeff_XXLS12";
# coeff: -1;
delay: 0;
crossfade: false;
};
filter "Filt_XXLS12_R" {
from_filters: "Filt_Overall_R"/0.0;
to_outputs: "Out_XXLS12_R"/200;
process: -1;
coeff: "Coeff_XXLS12";
# coeff: -1;
delay: 0;
crossfade: false;
};
Die Lautstärke regle ich ausschliesslich mittels des bayft interfaces, z.B. :
# bayft 23.6
ergibt einen Pegel von -23.6dB auf allen Kanälen.
Für die automatische Umschaltung der Samplerate bedarf es einer Erfassung der SR, welche am SPDIF-Eingang der Soundkarte ansteht. Ich habe derzeit eine solche Lösung für ein RME HDSP Multiface I implementiert, welche den Status der Karte aus /proc/asound/card0/hdsp ausliest. Falls das Script nicht für Deine (HDSP) Karte funktionieren sollte, wäre es ein einfaches, es gemäss dem readout von
# cat /proc/asound/card0/hdsp
umzuschreiben.
Udor hat geschrieben:
... mal Erläutern könntest wie du das mit der Einbeziehung von Jack und Aqualung genau meinst ....
... Jack,Aqualung und Brutefir im 44khz Modus. Davon hab ich mir dann entsprechende Skripte für jeweils 44,48,88 und 96khz gebastelt ...
Ich benutze aktuell weder Jack, noch Aqualung. Da eine Streaming-Lösung jedoch von allgemeinem Interesse sein könnte, werde ich versuchsweise ein Aqualung-Jack-Brutefir-bayft-bash-script (mit hoffentlich automatischer Umschaltung der SR) basteln. ... Denmächst in diesem Theater ...
Warum Jackd bei Dir seit dem Debian-Update nicht mehr im RT-Modul läuft, kann ich nicht beantworten.
Beste Grüsse
Simon