Originariamente inviato da
SimoneFil
Dopo un bel po' di tempo ho ripreso in mano lms+squeezelite con c-3po. Ho voluto prima fare dei test sul mio mac ed è emerso un bug di cui mi ero totalmente sistemato e che andrebbe messo a posto. In poche parole c3po non riesce a riconoscere il binario di sox modificato anche se è stato sostituito.
Questo bug è presente solamente su macos.
Marco, in che modo c3po "riconosce" il binario di SoX modificato? Così vedo di sistemarlo
eseguendolo con --v e verificando che risponda 'correttamente':
codice:
sub _getSoxVersion{
my $self = shift;
my $pathToSox = $self->pathToSox();
if (! $pathToSox || ! (-e $pathToSox)){
$log->warn('WARNING: wrong path to SOX - '.$pathToSox);
return undef;
}
my $command= qq("$pathToSox" --version);
$command= Plugins::C3PO::Shared::finalizeCommand($command);
my $ret= `$command`;
my $err=$?;
if (!$err==0){
$log->warn('WARNING: '.$err.' '.$ret);
return undef;
}
my $i = index($ret, "SoX v");
my $versionString= substr($ret,$i+5);
my ($version, $extra) = Plugins::C3PO::Shared::unstringVersion($versionString,$log);
if (main::DEBUGLOG && $log->is_debug) {
$log->debug("Sox path is: ".$pathToSox);
$log->debug("Sox version is: ".$version.($extra ? $extra : ''));
}
return $version;
}
sub soxVersion {
my $self = shift;
return $soxVersion;
}
Per capire se supporta i formati e gli effetti richiesti usa:
codice:
sub _getSoxDetails{
my $self = shift;
my $pathToSox = $self->pathToSox();
if (! $pathToSox || ! (-e $pathToSox)){
$log->warn('WARNING: wrong path to SOX - '.$pathToSox);
return undef,undef;
}
my $command= qq("$pathToSox" --help);
$command= Plugins::C3PO::Shared::finalizeCommand($command);
my @ret= `$command`;
my $err=$?;
if (!$err==0){
$log->warn('WARNING: '.$err);
return undef,undef;
}
my $formatsHeader= "AUDIO FILE FORMATS: ";
my $effectsHeader= "EFFECTS: ";
my $formats="";
my $effects="";
foreach my $row (@ret) {
chomp ($row);
#print $row."\n";;
if (index($row, $formatsHeader)>-1){
$formats= substr($row,index($row, $formatsHeader)+length($formatsHeader));
} elsif (index($row, $effectsHeader)>-1) {
$effects= substr($row,index($row, $effectsHeader)+length($effectsHeader));
}
}
my %SoxFormats = map { $_ => 1 } split(/ /, $formats);
my %SoxEffects = map { $_ => 1 } split(/ /, $effects);
return (\%SoxFormats, \%SoxEffects);
}
sub isFormatSupportedBySox{
my $self = shift;
my $format =shift;
if($format && exists($SoxFormats->{$format})) { return 1 }
return 0;
}
sub isEffectSupportedBySox{
my $self = shift;
my $effect =shift;
if($effect && exists($SoxEffects->{$effect})) { return 1 }
return 0;
}
sub isSoxDsdCapable{
my $self = shift;
my $effect =shift;
my $dsf = $self->isFormatSupportedBySox("dsf");
my $dff = $self->isFormatSupportedBySox("dff");
my $sdm = $self->isEffectSupportedBySox("sdm");
if ($dsf && $dff && $sdm){
return 1;
}
return 0;
}