PHP + Kod Ateşleyici Timecode Hesaplama Mantık Hatası

0 Cevap php

Ben PHP Video zaman kodu ile çalışmak için kullanıyorum bir algoritma ile bir mantık sorun ne şüpheli var. Tüm yardım takdir edilmektedir.

The Objective

Peki temelde ben zaman kodu ile çalışmak ve hesaplamalar yapmak istiyorum

Zaman kodu ile aşina olmayanlar için bu gibi görünüyor

01:10:58:12 or HH:MM:SS:FF 'AKA' HOURS:MINUTES:SECONDS:FRAMES

Ben bu formatı ile çalışan bana yardımcı olmak için HERE adlı komut kullandık.

The Problem

Şimdi ben sadece bu script çalışıyor diyebilirim! (Bu durumda eklemeler) kodunda hesaplamalar doğru yapılmaktadır. Ancak bu komut dosyası sürekli aşağıdaki hataları atar, yine deneyin ve aşağıdaki hesaplama yapmak doğru çıktıyı üretir

00:01:26:00 + 00:02:00:12

Bu hesaplamadan hatalar aşağıda gösterilmiştir

A PHP Error was encountered

Önem: Bildirimi

Mesaj: Undefined index: anahtar

Dosya adı: personel / tools.php

Satır sayısı: 169

A PHP Error was encountered

Önem: Bildirimi

Mesaj: Undefined index: anahtar

Dosya adı: personel / tools.php

Satır sayısı: 169

Satır sayısı 169 parseInput() fonksiyonunda olduğu

// feed it into the tc array
$i=0;
foreach ($tc AS $key=>$value) {
    if ( is_numeric($array["$i"]) ) {
        $tc["$key"]= $array["$i"];
        if ($tc["$key"] < 10 && $tc["$key"] > 0 && strlen($tc['key'])==1 ) $tc["$key"]= "0".$tc["$key"];
        }
    $i++;
    }

return $tc;

Şimdi de yukarıdaki hata atılır kez sayısını ben hesaplarken ben ne bağlı olduğunu belirtmeliyim

00:00:00:00 + 00:00:00:00

Hiçbir hata verir.

01:01:01:01 + 02:02:02:02

yukarıdaki hataların 8 üretir.


Başvuru için, burada en bütünlük içinde kodudur

function add_cue_sheet_clips_process()
{

$sheetID = $_POST['sheet_id'];
$clipName = $_POST['clip_name'];
$tcIn = $_POST['tc_in'];
$tcOut = $_POST['tc_out'];

// string $input
// returns an associative array of hours, minutes, seconds, and frames
//
function parseInput ($input) {
// timecode should look something like hh:mm:ss;ff
// allowed separators are : ; . ,
// values may be single or double digits
// hours are least-significant -- 5.4 == 00:00:05;04
$tc= array("frames"=>"00", "seconds"=>"00", "minutes"=>"00", "hours"=>"00");
$punct= array(":", ";", ".", ",");

// too big? too small?
$input= trim($input);
if (strlen($input)>11 || $input=="") {
    // invalid input, too long -- bzzt
    return $tc;
    }

// normalize punctuation
$input= str_replace( $punct, ":", $input);

// blow it up and reverse it so frames come first
$array= explode(":", $input);
$array= array_reverse($array);

// feed it into the tc array
$i=0;
foreach ($tc AS $key=>$value) {
    if ( is_numeric($array["$i"]) ) {
        $tc["$key"]= $array["$i"];
        if ($tc["$key"] < 10 && $tc["$key"] > 0 && strlen($tc['key'])==1 ) $tc["$key"]= "0".$tc["$key"];
        }
    $i++;
    }

return $tc;
}

// array $tc
// returns a float number of seconds
//
function tcToSec($tc) {
    $wholeseconds= ($tc['hours']*3600) + ($tc['minutes'] * 60) + ($tc['seconds']);
    $partseconds= ( $tc['frames']  / 25 );
    $seconds= $wholeseconds + $partseconds;
    return $seconds;
    }

// float $seconds
// bool $subtract
// returns a timecode array
//
function secToTc ($seconds=0, $subtract=0) {
    $tc= array("frames"=>"00", "seconds"=>"00", "minutes"=>"00", "hours"=>"00");

    $partseconds= fmod($seconds, 1);
    $wholeseconds= $seconds - $partseconds;

    // frames
    if ($subtract==1) $tc['frames']= floor( $partseconds * 25 );
    else $tc['frames']= floor( $partseconds * 25 );

    // hours
    $tc['hours']= floor( $wholeseconds / 3600 );
    $minsec= ($wholeseconds - ($tc['hours'] * 3600));

    // minutes
    $tc['minutes']= floor( $minsec / 60 );

    // seconds
    $tc['seconds']= ( $minsec - ($tc['minutes'] * 60) );

    // padding
    foreach ( $tc AS $key=>$value ) {
        if ($value > 0 && $value < 10) $tc["$key"]= "0".$value;
        if ($value=="0") $tc["$key"]= "00";
        }
    return $tc;
    }

// array $tc
// returns string of well-formed timecode
//
function tcToString (&$tc) {
    return $tc['hours'].":".$tc['minutes'].":".$tc['seconds'].";".$tc['frames'];
    }


$timecodeIN = parseInput($tcIn);
$timecodeOUT = parseInput($tcOut); 

// normalized inputs...
$tc1 = tcToString($timecodeIN);
$tc2 = tcToString($timecodeOUT);

// get seconds
$seconds1 = tcToSec($timecodeIN);
$seconds2 = tcToSec($timecodeOUT);

$result = $seconds1 + $seconds2;

$timecode3 = secToTc($result, 0);
$timecodeDUR = tcToString($timecode3);

$clipArray = array('clip_name' => $clipName, 'tc_in' => $tcIn, 'tc_out' => $tcOut, 'tc_duration' => $timecodeDUR);

$this->db->insert('tools_cue_sheets_clips', $clipArray);

redirect('staff/tools/add_cue_sheet_clips/'.$sheetID);
}

Ben bu bana bu üstüne almak yardımcı olmak için birisi için yeterli bilgi umut, ben son derece minnettar olacaktır.

Teşekkürler,

Tim

0 Cevap