Ciao Marco, pare che su win Max sample sinco non va...mi si apre sto file
codice:
#
# See plugin.pm for description and terms of use.
use strict;
use FindBin qw($Bin);
use lib $Bin;
use lib $Bin.'/CPAN';
# let standard modules load.
#
use constant SLIM_SERVICE => 0;
use constant SCANNER => 1;
use constant RESIZER => 0;
use constant TRANSCODING => 0;
use constant PERFMON => 0;
use constant DEBUGLOG => ( grep { /--nodebuglog/ } @ARGV ) ? 0 : 1;
use constant INFOLOG => ( grep { /--noinfolog/ } @ARGV ) ? 0 : 1;
use constant STATISTICS => ( grep { /--nostatistics/ } @ARGV ) ? 0 : 1;
use constant SB1SLIMP3SYNC=> 0;
use constant IMAGE => ( grep { /--noimage/ } @ARGV ) ? 0 : 1;
use constant VIDEO => ( grep { /--novideo/ } @ARGV ) ? 0 : 1;
use constant MEDIASUPPORT => IMAGE || VIDEO;
use constant WEBUI => 0;
use constant ISWINDOWS => ( $^O =~ /^m?s?win/i ) ? 1 : 0;
use constant ISMAC => ( $^O =~ /darwin/i ) ? 1 : 0;
use constant HAS_AIO => 0;
use constant LOCALFILE => 0;
use constant NOMYSB => 1;
#
#######################################################################
use Data::Dump qw(dump);
use Getopt::Long;
use YAML::XS;
use File::Spec::Functions qw(:ALL);
use Transcoder;
#########################################################################
#
# Command line options.
#
# -c - client mac address (es. 00:04:20:12:b3:17) -> clientId
# -i - input stream format (es. flc) -> inFormat
# -o - output stream format (es. wav) -> outFormat
# -t - stream time start offset (m:ss.cc es. 24:46.02) -> startTime
# -v - stream time end offset (m:ss.cc es. 28:24.06) -> endTime
# -s - stream seconds start offset (hh:mm:ss.mmm es. 00:15:47.786) -> startSec
# -u - stream seconds end offset (hh:mm:ss.mmm es. 00:19:07.000) -> endSec
# -w - stream seconds duration (n*.n* es. 542.986666666667) -> durationSec
# -r - imposed samplerate
#
# The input file is the first and only parameter (with no option) in line.
#
#########################################################################
#### preference file pathname, will be replaced with the command line options #
#
# my $prefFile = "C:\\Documents and Settings\\All Users\\Dati applicazioni\\SqueezeboxTest\\prefs\\plugin\\C3PO.prefs";
# my $clientId = "e8:de:27:03:05:b2";
#
#################
my $logfile;
init();
#################
sub init{
my $options=getOptions();
#dump ($options);
if (!defined $options) {dieMessage("Missing options")}
if (!defined $options->{clientId}) {dieMessage("Missing clientId in options")}
if (!defined $options->{prefFile}) {dieMessage("Missing preference file in options")}
if (!defined $options->{inCodec}) {dieMessage("Missing input codec in options")}
my $clientId= $options->{clientId};
#dump ($clientId);
my $prefFile=$options->{prefFile};
my $prefs=loadPreferences($prefFile);
#dump ($prefs);
my $client=buildClient($clientId);
#dump ($client);
my $serverFolder=$prefs->{'serverFolder'};
if (!defined $serverFolder) {dieMessage("Missing ServerFolder")}
#dump ($serverFolder);
my $logFolder=$prefs->{'logFolder'};
if (!defined $logFolder) {dieMessage("Missing log directory in preferences")}
#dump ($logFolder);
$logfile= catdir($logFolder, "C-3PO.log");
my $transcodeTable=buildTranscoderTable($client,$prefs);
$transcodeTable->{'options'}=$options;
#dump ($transcodeTable);
$transcodeTable->{'inCodec'}=$options->{inCodec};
my $commandTable=Plugins::C3PO::Transcoder::buildCommand($transcodeTable);
returnCommand($commandTable->{command});
}
sub writeLog {
my $msg = shift;
my $now = localtime;
my $line = qq([$now] $msg);
open(my $fh, ">>", qq($logfile)) or die;
print $fh "\n $line \n";
close $fh;
}
sub returnCommand{
my $command=shift;
if (DEBUGLOG || INFOLOG) {writeLog(qq(INFO: Command is: $command));}
print STDOUT ($command);
exit;
}
sub getOptions{
#dump(@ARGV);
my $options={};
if ( @ARGV > 0 ) {
GetOptions( 'c=s' => \$options->{clientId},
'i=s' => \$options->{inCodec},
'o=s' => \$options->{outCodec},
't=s' => \$options->{startTime},
'v=s' => \$options->{endTime},
's=s' => \$options->{startSec},
'u=s' => \$options->{endSec},
'w=s' => \$options->{durationSec},
'r=s' => \$options->{forcedSamplerate},
'p=s' => \$options->{prefFile},
);
my $file;
for my $str (@ARGV){
if (!defined $file){
$file=$str;
} else {
$file = qq($file $str);
}
}
$options->{file}=$file;
#print "\n\n\n".$options->{file}."\n";
return $options;
}
return undef;
}
sub buildClient{
my $clientId = shift;
$clientId =~ s/-/:/g;
return '_client:'.$clientId;
}
sub loadPreferences {
my $file=shift;
my $prefs;
$prefs = eval {YAML::XS::LoadFile($file) };
if ($@) {
# log is not yet initialized
warn("Unable to read prefs from $file : $@\n");
}
return $prefs;
}
sub buildTranscoderTable{
my $client=shift;
my $prefs= shift;
if (!exists $prefs->{$client}){
dieMessage("Missing client preferences for player $client");
}
my $transcodeTable={};
$transcodeTable->{'id'}=$prefs->{$client}->{'id'};
$transcodeTable->{'macaddress'}=$prefs->{$client}->{'macaddress'};
$transcodeTable->{'model'}=$prefs->{$client}->{'model'};
$transcodeTable->{'modelName'}=$prefs->{$client}->{'modelName'};
$transcodeTable->{'name'}=$prefs->{$client}->{'name'};
$transcodeTable->{'maxSupportedSamplerate'}=$prefs->{$client}->{'maxSupportedSamplerate'};
$transcodeTable->{'codecs'}=$prefs->{$client}->{'codecs'};
$transcodeTable->{'sampleRates'}=$prefs->{$client}->{'sampleRates'};
my $useGlogalSettings=$prefs->{$client}->{'useGlogalSettings'};
$transcodeTable->{'resampleWhen'}= $useGlogalSettings ?
$prefs->{'resampleWhen'} : $prefs->{$client}->{'resampleWhen'};
$transcodeTable->{'resampleTo'}=$useGlogalSettings ?
$prefs->{'resampleTo'} : $prefs->{$client}->{'resampleTo'};
$transcodeTable->{'outCodec'}=$useGlogalSettings ?
$prefs->{'outCodec'} : $prefs->{$client}->{'outCodec'};
$transcodeTable->{'outBitDepth'}=$useGlogalSettings ?
$prefs->{'outBitDepth'} : $prefs->{$client}->{'outBitDepth'};
$transcodeTable->{'outByteOrder'}=$useGlogalSettings ?
$prefs->{'outByteOrder'} : $prefs->{$client}->{'outByteOrder'};
$transcodeTable->{'outEncoding'}=$useGlogalSettings ?
$prefs->{'outEncoding'} : $prefs->{$client}->{'outEncoding'};
$transcodeTable->{'outChannels'}=$useGlogalSettings ?
$prefs->{'outChannels'} : $prefs->{$client}->{'outChannels'};
$transcodeTable->{'gain'}=$useGlogalSettings ?
$prefs->{'gain'} : $prefs->{$client}->{'gain'};
$transcodeTable->{'phase'}=$useGlogalSettings ?
$prefs->{'phase'} : $prefs->{$client}->{'phase'};
$transcodeTable->{'quality'}=$useGlogalSettings ?
$prefs->{'quality'} : $prefs->{$client}->{'quality'};
$transcodeTable->{'aliasing'}=$useGlogalSettings ?
$prefs->{'aliasing'} : $prefs->{$client}->{'aliasing'};
$transcodeTable->{'bandwidth'}=$useGlogalSettings ?
$prefs->{'bandwidth'} : $prefs->{$client}->{'bandwidth'};
$transcodeTable->{'dither'}=$useGlogalSettings ?
$prefs->{'dither'} : $prefs->{$client}->{'dither'};
$transcodeTable->{'pathToFlac'}=$prefs->{'pathToFlac'};
$transcodeTable->{'pathToSox'}=$prefs->{'pathToSox'};
$transcodeTable->{'pathToFaad'}=$prefs->{'pathToFaad'};
$transcodeTable->{'pathToC3PO'}=$prefs->{'pathToC3PO'};
$transcodeTable->{'pathToFFmpeg'}=$prefs->{'pathToFFmpeg'};
$transcodeTable->{'serverFolder'}=$prefs->{'serverFolder'};
$transcodeTable->{'logFolder'}=$prefs->{'logFolder'};
my $outCodec= $transcodeTable->{'outCodec'};
$transcodeTable->{'outCompression'}=0;
if (length($outCodec)>3){
$transcodeTable->{'outCodec'}=substr($outCodec, 0,3);
$transcodeTable->{'outCompression'}=substr($outCodec, 3,1)
}
return $transcodeTable;
}
sub dieMessage{
my $msg=shift;
writeLog(qq(ERROR: $msg));
die ($msg);
}
1;