I-NOZex Posted April 11, 2014 Report Share Posted April 11, 2014 (edited) Bem, tenho aqui esta função que alem de outras operações efetua a conversão de uma variavel de tempo em MM:SS ou HH:MM:SS para segundos. Isto funciona à parte, mas no sitio onde deverá ficar, nao está a funcionar a parte de conversao... public function getKbps($size,$length){ $size = floatval($size); if (bccomp('1', $size, 2) == false) return 0; //MB to KB $bytes = floatval($size) * 1024 * 1024; //KB to bits $bits = $bytes * 8; unset($bytes); //(HH:)MM:SS to seconds //$length = preg_replace("/^([\d]{1,2})\ [\d]{2})$/", "00:$1:$2", $length); $length = $this->parseLength($length); $length = date_parse($length); $seconds = $length['hour'] * 3600 + $length['minute'] * 60 + $length['second']; //sscanf($length, "%d:%d:%d", $hours, $minutes, $seconds); //$seconds = $hours * 3600 + $minutes * 60 + $seconds; if ($seconds < 60) return 0; die($seconds); unset($length); //Calculate kbits per second $kbps = $bits / $seconds; unset($bits,$seconds); //Calculate KBytes per second $kbps = ceil($kbps / 1000); die($kbps); //Get common valid Kbps $commonKbps = array(128,160,192,224,256,320); foreach ($commonKbps as $v) if ((($kbps - $v) < 16) || (($kbps - $v) <= -16)) return $v; return $kbps; } as linhas onde o erro está, estao assinaladas... alguem consegue detetar qual é o erro? se repararem tem 2 linhas comentadas, que era a forma que eu inicialmente estava a fazer, vi essa alternativa, mas continua sem funcionar :/ deixo aqui a baixo uma funçao helper que faz a devida conversao para HH:MM:SS public function parseLength($length){ $length = preg_replace("/^([\d]{1,2})\ [\d]{2})$/", "00:$1:$2", $length); sscanf($length, "%d:%d:%d"); return date('H:i:s',strtotime($length)); } obrigado! edit: estava a usar o valor de teste 11:11:11 edit2: andei a ver melhor e o erro não está na conversão do tempo... a funçao em si é que não está a funcionar correctamente... basicamente calcula o possivel bitrate de um ficheiro mp3 com base na duraçao e tamanho, retornando o bitrate mais proximo de um dos comuns (128,256...) alguem consegue ajudar? :| isto já funcionou, e agora que voltei a pegar nisto, nao está a dar :S eu tou a testar com size = 111.11 (mb) length = 11:11:11 thks Edited April 11, 2014 by I-NOZex B2R » Beat2Revolution v3.0b | Regista e divulga-nos beat2revolution.net Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted April 11, 2014 Report Share Posted April 11, 2014 acho que foste tu que criaste um tópico sobre o mesmo assunto, onde foram apresentadas imensas soluções para leitura do tempo ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
I-NOZex Posted April 11, 2014 Author Report Share Posted April 11, 2014 (edited) sim fui eu eu ja vi que o erro não está ali, nao é nessa parte... tou aqui a testar as 2 funçoes a parte <?php function getKbps($size,$length){ $size = floatval($size); if (bccomp('1', $size, 2) == false) return 0; //MB to KB $bytes = floatval($size) * 1024 * 1024; //KB to bits $bits = $bytes * 8; unset($bytes); //(HH:)MM:SS to seconds //$length = preg_replace("/^([\d]{1,2})\ [\d]{2})$/", "00:$1:$2", $length); $length = parseLength($length); //$length = date_parse($length); //$seconds = $length['hour'] * 3600 + $length['minute'] * 60 + $length['second']; sscanf($length, "%d:%d:%d", $hours, $minutes, $seconds); $seconds = $hours * 3600 + $minutes * 60 + $seconds; if ($seconds < 60) return 0; //die(var_dump($seconds)); unset($length); //Calculate kbits per second $kbps = $bits / $seconds; unset($bits,$seconds); //die(var_dump($kbps)); //Calculate KBytes per second $kbps = ceil($kbps / 1000); //var_dump($kbps); //Get common valid Kbps $commonKbps = array(128,160,192,224,256,320); foreach ($commonKbps as $v) if ((($kbps - $v) < 16) || (($kbps - $v) <= -16)) return $v; return $kbps; } function parseLength($length){ $length = preg_replace("/^([\d]{1,2})\ [\d]{2})$/", "00:$1:$2", $length); sscanf($length, "%d:%d:%d"); return date('H:i:s',strtotime($length)); } $size = '111.11'; $length = '11:11:11'; echo getKbps($size,$length); ?> era suposto retornar 24, mas retorna 128... ele não está a respeitar a condiçao do ultimo if... alias, está a entrar nele, onde simplesmente deveria ir para o ultimo return... mas na classe onde tenho estas funçoes, ele nem retorna nada :S edit: resolvido, burrice minha pois claro que 24-128 dá um numero negativo, e sendo negativo obvio que é menor q 16 e -16... resolvi assim: if (($kbps > 127) && ((($kbps - $v) < 16) || (($kbps - $v) <= -16))) alguma sugestão sobre uma forma mais correcta de resolver? 🙂 reedit: na class é que continua sem funcionar D: isto ta tudo marado :|| Edited April 11, 2014 by I-NOZex B2R » Beat2Revolution v3.0b | Regista e divulga-nos beat2revolution.net Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted April 11, 2014 Report Share Posted April 11, 2014 (edited) pelo que percebi será isto que pretendes ... <?php function getKbps($size, $length, $step = 32, $max = 320){ $size = floatval($size); if (bccomp('1', $size, 2) == false) return 0; $bits = floatval($size) * 1024 * 1024 * 8; sscanf(parseLength($length), "%d:%d:%d", $hours, $minutes, $seconds); $seconds = $hours * 3600 + $minutes * 60 + $seconds; if ($seconds < 60) return 0; $kbps = (int)($bits / $seconds / 1000); if ($kbps < $step) return "< ".$step; else if ($kbps >= $max) return "> ".$max; else return ((int)($kbps / $step)) * ($step + 1); } function parseLength($length){ $length = preg_replace("/^([\d]{1,2})\ [\d]{2})$/", "00:$1:$2", $length); sscanf($length, "%d:%d:%d"); return date('H:i:s',strtotime($length)); } $size = '111.11'; $length = '11:11:11'; echo getKbps($size,$length)."Kbps\n"; ?> caso queiras que o valor resultante esteja "mais aproximado do valor real", talvez este código seja melhor: if ($kbps < $step) return "< ".$step; else if ($kbps >= $max) return "> ".$max; else foreach (range($step, $max, $step) as $val) { if ($kbps >= $val - ($step / 2) && $kbps <= $val + ($step / 2)) return $val; } } Edited April 11, 2014 by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now