Jump to content

cbox


iBotPeaches

Owner
  • Posts

    6582
  • Joined

  • Last visited

  • Days Won

    139

Everything posted by iBotPeaches

  1. I'll try and look for a vb of it.
  2. I haven't logged into the ACP today. And thats caused by someone messing with the cache. I'll have to rebuild it.
  3. iBotPeaches

    UMP v4

    Also theres UMP v5 lol I reset your milkman account pass, it got sent to your email.
  4. So you want to be-able to rename the (artist name, song name) of a song you opened in some language I've yet to find out lol. I think those are called the ID3 tags of the song (or if older the ID2 titles) fileNamepath to the MP3 filearrayVarNamename of the array variable to be used as container for the MP3 information, will be erased before filleddebugFlagboolean - true if information about the first 2 frame headers shouldn't be deleted and be returned namespace eval ::mp3InfoReader { variable bitRateTable; variable sampleRateTable; variable channelModeTable; array set bitRateTable { 0.1.0 0 0.1.1 8 0.1.2 16 0.1.3 24 0.1.4 32 0.1.5 40 0.1.6 48 0.1.7 56 0.1.8 64 0.1.9 80 0.1.10 96 0.1.11 112 0.1.12 128 0.1.13 144 0.1.14 160 0.1.15 -1 0.3.0 0 0.3.1 32 0.3.2 48 0.3.3 56 0.3.4 64 0.3.5 80 0.3.6 96 0.3.7 112 0.3.8 128 0.3.9 144 0.3.10 160 0.3.11 176 0.3.12 192 0.3.13 224 0.3.14 256 0.3.15 -1 3.1.0 0 3.1.1 32 3.1.2 40 3.1.3 48 3.1.4 56 3.1.5 64 3.1.6 80 3.1.7 96 3.1.8 112 3.1.9 128 3.1.10 160 3.1.11 192 3.1.12 224 3.1.13 256 3.1.14 320 3.1.15 -1 3.2.0 0 3.2.1 32 3.2.2 48 3.2.3 56 3.2.4 64 3.2.5 80 3.2.6 96 3.2.7 112 3.2.8 128 3.2.9 160 3.2.10 192 3.2.11 224 3.2.12 256 3.2.13 320 3.2.14 384 3.2.15 -1 3.3.0 0 3.3.1 32 3.3.2 64 3.3.3 96 3.3.4 128 3.3.5 160 3.3.6 192 3.3.7 224 3.3.8 256 3.3.9 288 3.3.10 320 3.3.11 352 3.3.12 384 3.3.13 416 3.3.14 448 3.3.15 -1 0.2.10 -1 0.2.12 -1 0.2.7 -1 0.2.0 -1 0.2.4 -1 0.2.8 -1 0.2.6 -1 0.2.3 -1 0.2.14 -1 0.2.5 -1 0.2.2 -1 } array set sampleRateTable { 0.0 11025 0.1 12000 0.2 8000 2.0 22050 2.1 24000 2.2 16000 3.0 44100 3.1 48000 3.2 32000 } array set channelModeTable { 3.0 {4 31} 3.1 {8 31} 3.2 {12 31} 3.3 {16 31} 1.0 {} 1.1 {"intensity stereo"} 1.2 {"ms stereo"} 1.3 {"intensity stereo" "ms stereo"} }; proc readI4 {fileId} { if {[binary scan [read $fileId 4] I I4] != 1} { error "couldn't read a 4byte bit-endian integer value from \"$fileId\""; } return $I4 } variable genres { Blues {Classic Rock} Country Dance Disco Funk Grunge Hip-Hop Jazz Metal {New Age} Oldies Other Pop R&B Rap Reggae Rock Techno Industrial Alternative Ska {Death Metal} Pranks Soundtrack Euro-Techno Ambient Trip-Hop Vocal Jazz+Funk Fusion Trance Classical Instrumental Acid House Game {Sound Clip} Gospel Noise AlternRock Bass Soul Punk Space Meditative {Instrumental Pop} {Instrumental Rock} Ethnic Gothic Darkwave Techno-Industrial Electronic Pop-Folk Eurodance Dream {Southern Rock} Comedy Cult Gangsta {Top 40} {Christian Rap} Pop/Funk Jungle {Native American} Cabaret {New Wave} Psychadelic Rave Showtunes Trailer Lo-Fi Tribal {Acid Punk} {Acid Jazz} Polka Retro Musical {Rock & Roll} {Hard Rock} Folk Folk-Rock {National Folk} Swing {Fast Fusion} Bebob Latin Revival Celtic Bluegrass Avantgarde {Gothic Rock} {Progressive Rock} {Psychedelic Rock} {Symphonic Rock} {Slow Rock} {Big Band} Chorus {Easy Listening} Acoustic Humour Speech Chanson Opera {Chamber Music} Sonata Symphony {Booty Brass} Primus {Porn Groove} Satire {Slow Jam} Club Tango Samba Folklore Ballad {Power Ballad} {Rhytmic Soul} Freestyle Duet {Punk Rock} {Drum Solo} {A Capela} Euro-House {Dance Hall} } proc mpegBin {byte2} { return [expr {($byte2 >> 3) & 0x3}]; } proc mpeg {byte2} { switch -exact -- [mpegBin $byte2] { 0 {return 2.5;} 2 {return 2;} 3 {return 1;} } return 0; } proc layerBin {byte2} { return [expr {($byte2 >> 1) & 0x3}]; } proc layer {byte2} { set layer [expr {4 - [layerBin $byte2]}]; if {$layer > 3} { return 0; } return $layer } proc protection {byte2} { return [expr {($byte2 & 0x1) == 0}]; } proc bitRateBin {byte3} { return [expr {($byte3 >> 4) & 0xF}]; } proc bitRate {byte2 byte3} { if {[set bitRateIdx [bitRateBin $byte3]] == 0xF} { return -1; } if {[set layerIdx [layerBin $byte2]] == 0} { return -1; } if {[set mpegIdx [mpegBin $byte2]] == -1} { return -1; } elseif {$mpegIdx == 2} { if {$layerIdx == 2} { set layerIdx 1; } set mpegIdx 0; } variable bitRateTable; return $bitRateTable($mpegIdx.$layerIdx.$bitRateIdx); } proc sampleRateBin {byte3} { return [expr {($byte3 >> 2) & 0x3}]; } proc sampleRate {byte2 byte3} { if {[set sampleRateIdx [sampleRateBin $byte3]] == 0x3} { return 0; } if {[set mpegIdx [mpegBin $byte2]] == 1} { return 0; } variable sampleRateTable; return $sampleRateTable($mpegIdx.$sampleRateIdx); } proc private {byte3} { return [expr {($byte3 & 0x1) == 1}]; } proc padding {byte3} { return [expr {(($byte3 >> 1) & 0x1) == 1}]; } proc channelModeBin {byte4} { return [expr {($byte4 >> 6) & 0x3}]; } proc channelMode {byte2 byte4} { switch -exact -- [channelModeBin $byte4] { 3 {return "single";} 2 {return "dual";} 0 {return "stereo";} } if {[set layerIdx [layerBin $byte2]] == 0} { return "joint"; } elseif {$layerIdx == 2} { set layerIdx 3; } variable channelModeTable; return [list "joint" $channelModeTable($layerIdx.[expr {($byte4 >> 4) & 0x3}])]; } proc copyright {byte4} { return [expr {(($byte4 >> 3) & 0x1) == 1}]; } proc original {byte4} { return [expr {(($byte4 >> 2) & 0x1) == 1}]; } proc emphasisBin {byte4} { return [expr {$byte4 & 0x3}]; } proc emphasisDesc {byte4} { switch -exact -- [emphasisBin $byte4] { 3 {return "CCIT J.17";} 2 {return "reserved";} 1 {return "50/15 ms";} } return "none"; } proc frameLength {byte1 byte2 byte3} { set mpeg [mpegBin $byte2]; set layer [layerBin $byte2]; set protection [protection $byte2]; set padding [padding $byte3]; set bitRate [bitRate $byte2 $byte3]; set sampleRate [sampleRate $byte2 $byte3]; if {!$bitRate} { # (Free bit rate) This will move the scanner one step forward # set frameLength 1; } else { if {$layer == 3} { set frameLength [expr {(12 * $bitRate * 1000 / $sampleRate) + (4 * $padding) + (2 * $protection)}] } else { set frameLength [expr {(144 * $bitRate * 1000 / $sampleRate) + $padding + (2 * $protection)}] } } return $frameLength; } proc isValidFrameHeader {byte1 byte2 byte3 byte4} { # 1. MPEG version not unknown # 2. layer not reserved # 2. sample rate index, 3 not allowed # 3. bitrate, 15 not allowed # if {([mpegBin $byte2] != 0x1) && ([layer $byte2] != 0x0) && ((($byte3 >> 2) & 0x3) != 0x3) && ((($byte3 >> 4) & 0xF) != 0xf)} { return 1; } return 0; } proc mp3InfoReader {fileName arrayVar {debug 0}} { upvar $arrayVar info; variable genres; #PWQ 26 Nov 04 catch {unset info;}; if {[catch {set fd [open $fileName r];} reason]} { error $reason $::errorInfo $::errorCode; } fconfigure $fd -encoding binary -translation binary -buffering full -buffersize 1000000; set idx 1; set result ""; while {![eof $fd]} { # read until frame header is complete and valid # while {![eof $fd]} { scan [read $fd 1] %c byte1; if {($byte1 & 0xFF) == 0xFF} { scan [read $fd 1] %c byte2; if {($byte2 & 0xE0) == 0xE0} { scan [read $fd 2] %c%c byte3 byte4; if {[isValidFrameHeader $byte1 $byte2 $byte3 $byte4]} { break; } } } } # recognize all (normally) frame independent header data # set info($idx.mpeg) [mpeg $byte2]; set info($idx.layer) [layer $byte2]; set info($idx.protection) [protection $byte2]; set info($idx.sampleRate) [sampleRate $byte2 $byte3]; set info($idx.bitRate) [bitRate $byte2 $byte3]; set info($idx.private) [private $byte3]; set info($idx.channelMode) [channelMode $byte2 $byte4]; set info($idx.copyright) [copyright $byte4]; set info($idx.original) [original $byte4]; set info($idx.emphasis) [emphasisDesc $byte4]; set info($idx.padding) [padding $byte3]; if {$info($idx.layer) == 1} { set info($idx.samplesPerFrame) 384; } else { set info($idx.samplesPerFrame) 1152; } if {$idx == 1} { # looking for a Xing VBR header (variable bitrate) # set info(vbr) 0; if {$info($idx.mpeg) == 1} { set xingHeaderStart [expr {$info($idx.channelMode) != "single" ? 32 : 17}]; } else { set xingHeaderStart [expr {$info($idx.channelMode) != "single" ? 17 : 9}]; } seek $fd $xingHeaderStart current; if {[read $fd 4] == "Xing"} { # found a Xing VBR header - looking for the average bit rate # set info(vbr) 1; set xingFrames 0; set xingBytes 0; if {[set xingHeadFlags [readI4 $fd]] & 0x0001} { set xingFrames [readI4 $fd]; } if {$xingHeadFlags & 0x0002} { set xingBytes [readI4 $fd]; } if {($xingFrames > 0) && ($xingBytes > 0) && ($xingHeadFlags & (0x0002 | 0x0001))} { set info(bitRate) [expr {(($xingBytes / $xingFrames) * $info($idx.sampleRate)) / ($info($idx.mpeg) == 1 ? 144000 : 72000)}]; } } else { # first recognized bit rate is assumed to be the global one # set info(bitRate) $info($idx.bitRate); set info(bitRate.calc) 0; } } elseif {!$info(vbr) && (!$info($idx.bitRate) || ($info(bitRate) != $info($idx.bitRate)))} { # another bit rate is not identical to the global (first) one # => calculate bit rate later on! # set info(bitRate.calc) 1; set info(bitRate.list) [list $info(bitRate) $info($idx.bitRate)]; } # jump over audio data, if frame length calculated # seek $fd [frameLength $byte1 $byte2 $byte3] current; if {$idx == 2} { break; } incr idx; } # Now reread the last 128 bytes to decode the MP3 Tag if {[catch {seek $fd -128 end}]} { set tag "" } else { set tag [read $fd] } close $fd; # setting or calculating the bit rate # if {!$info(vbr)} { if {$info(bitRate.calc)} { # calculating the mean bit rate # set result "warning: variable bit rate - published approximated duration and average bit rate!"; set info(bitRate) 0; foreach value [set info(bitRate.list) [lsort -unique $info(bitRate.list)]] { incr info(bitRate) $value; } set info(bitRate) [expr {int($info(bitRate) / double($idx))}]; } } # calculating the durating using the bit rate and the file size # set info(duration) [expr {int([file size $fileName]*8 / double(1000*$info(bitRate)))}]; # copy all frame independent data into the return array # foreach {name value} [array get info 1.*] { set name [join [lrange [split $name "."] 1 end] "."]; if {[string match "bitRate*" $name] || ($name == "crc") || ($name == "duration") || ($name == "frameLength") || ($name == "padding") || ($name == "protection")} { continue; } set info($name) $value; } if {!$debug} { array unset info {[0-9]*}; } binary scan $tag A3 id if {[string equal $id TAG]} { set info(hastag) 1 set info(genre) 12 binary scan $tag a3a30a30a30a4a28ccc id info(title) info(artist) info(album) info(year) info(comment) zero info(track) info(genreid) } else { array set info { hastag 0 title "" artist "" album "" year "" comment "" track 0 genreid -1 } } set info(genre) [lindex $genres $info(genreid)] return $result; } namespace export -clear mp3InfoReader; } Heres something I got off google.
  5. asdf
  6. Some people hardly understand things. Some of these staff members spent their entire High School career as a moderator on IBM. 3-4 long years moderating. Its not leaving, as it is growing up. I'm sure Curtis has some better things to do then moderate a website. As all people grow up and have other commitments. He was a long time guy, have fun out there in the real world. There not as nice as us.
  7. Its how the forum will look. So global
  8. Its getting pretty big since IPB 3, actually got bigger by a bit.
  9. iBotPeaches

    Forum Changes

    I'm using IPB 3 day or two of offline time to re-adjust majorly the forum structure of the site. Currently we have a setup where you have Category AForum A-1 Forum A-2 [*]Category B Forum B-2Sub-Forum B-2-i [*]Forum B-3 Something along the lines of that. Use Category B as an example, you can redo it to match our current section. Halo 3H3 ModdingUsermap Modz It gets quite annoying having to navigate into sections that far. However, with the addition of more and more sections it becomes quite a pain to navigate to the bottom. I propose 2 ways we can list the forums. The first way would be the way we normally do it, except for IPB 3. Which would look like this. All the forums get listed with their summary. (Just random IPB 3 forum. Our forum names will not be that) The second way would be to collapse them like HaloMods. Which would decrease page-load time significantly. However, you cannot see the last post in every forum since their collapsed to such a small space. I have plans to intergrate a more user friendly Xbox 360: Modding and Game Modding forums, and collapse the Halo modding into a section called "Halo's" or something along those lines. I will also remove probably 2 or 3 forums and merge them into another closly related to what it was. Thanks Peaches
  10. The site spikes when things happen (EX. New H3 Mods, COD4 Modding) It seems since the H3 Modding has dimmed down to the dev-ers only, there will need to be some new forum changes.
  11. Honestly, Sites die. Sites become inactive. Look at Halomods, se7ensins has members cause they hardly moderate from what I've seen. Allowing apps of stolen research to float around.
  12. So you want to auto-populate the tags from online? I have no clue. Or you want to sort them based on those tags? I can do that.
  13. Melo, You respond to every topic you don't know anything about the same way. Its getting old, you say been here "3 years and tons of post" however you come off and on for months at a time and 1/2 your posts are "nice share mate"
  14. Fixed. I might have been eager and changed the future IPB 3 settings on here.
  15. No somebody messed with our warn status. Before there was 10 allotted spaces, now theres 5.
  16. We had our laugh. Its done now. Its being used now as a SPAM topic. The application obviously is fake. Closed.
  17. iBotPeaches

    Bioshock 2

    I just don't understand this series at all. Played the first ones demo and thats it. Someone make me a 2 sentence storyline review?
  18. No way possible yet.
  19. I want pics. Since I have no dev.
  20. Last Round added. I'm looking to give 2nd chances to people, who I honestly don't remember why they lost VIP. They will get PM's or MSNs soon.
  21. iBotPeaches

    New Staff

    I remember those leaders. Not a feature in IPB, so I guess nobody.
  22. BlueHost is a sister company of the company I'm with now. So they won't help. I'm looking into LunarPages, they seem good except they charge for SSH access which I don't want to pay extra for.
  23. I'm just wondering about future upgrades to iBotModz. The download manager (Download Button) at top of page seems to be something cool. Except this host doesn't allow file uploads to be stored so I need to store them off-site which has caused problems. So I'm on the look out for a new host that can help from DDoSes but at the same time allow file uploads to about 8MB. I just want some opinions on the download manager. If I do purchase it again for IPB 3 we can add like (Xbox, Xbox 360, Halo 2, Halo 3, Other) and begin adding downloads to tons of things since everyone knows you hate a dead link.
  24. Grabbing stuff from web pages in c# or vb similar to phpCurl or libcurl? Off-Topic, but otherwise its a start to possibly some good programs.
  25. So are those stickers or spray paint?
×
×
  • Create New...