Go Back   Cockos Incorporated Forums > REAPER Forums > REAPER General Discussion Forum

Reply
 
Thread Tools Display Modes
Old 10-05-2010, 08:45 PM   #1
AdamWathan
Human being with feelings
 
AdamWathan's Avatar
 
Join Date: Apr 2008
Location: Cambridge, Ontario
Posts: 2,644
Default AutoPocket: New Beat Detective clone for Reaper (demo video)

Alright so after fumbling around struggling to get the proper "edit smoothing" behavior in Reaper, I resorted to coding some actions myself to get the behavior I missed from Beat Detective in Pro Tools, while adding a ton of functionality people have been asking for in Beat Detective for years.

The bulk of it is this action:

SWS/AdamWathan: Fill gaps between selected items (advanced)

It's purpose is to intelligently fill the gaps between items that have been cut up and repositioned in the timeline, usually for drum editing purposes (ie. cutting all the hits and snapping them to the grid.) It does this by trimming the starts of items left to fill gaps, time stretching items if the gap is too big, etc. all according to preferences laid out by the user in the initial dialog.

Here's a YouTube video demonstrating my entire drum editing workflow using what I've added to Reaper. Skip to about 6:00 for the details about the action itself:

https://www.youtube.com/watch?v=KTfnp5W4peg



Trigger Pad: This is a leading pad added to the beginning of each chunk and subtracted from the end of the previous chunk. The snap offset is adjusted to compensate so that your media will still snap to the transient. It is a sort of safety buffer. Imagine you have a section where the snare and ride hits at the same time, but the ride is a tiny bit early. Dynamic split cut at the snare transient though for one of a variety of reasons. This buffer would ensure that the ride transient is preserved directly before the snare and that it is cut out of the previous item. It basically just lets you be lazier when checking the quality of your splits

Crossfade Length: This is the length of the crossfade created between the tail of any item and the beginning of the next item. It is always placed to the left and is in addition to any trigger pad (ie. a trigger pad of 5ms and a crossfade length of 5ms will result in a minimum of 10ms between the start of the crossfade and the transient in the next item.)

Maximum Gap: This is the maximum allowable gap before the code attempts to time stretch the previous item. If you set a max gap of 20ms and the code detects a gap of 50ms, it will timestretch the previous item until either a) the gap has been reduced to 20ms, or b) the Maximum Stretch value has been reached. If the detected gap is less than the Maximum Gap, the following item is simply trimmed back to fill it with no stretching applied whatsoever.

Maximum Stretch: This is the maximum amount that an item will stretch. The value corresponds with the "Rate" value displayed in a media item when timestretching it, so 0.85 means the item will stretch to a maximum rate of 0.85 In my experience, it usually sounds better to allow more stretching than it does to allow a larger Maximum Gap, so don't be afraid to set this value low. A value of 0 will let the item stretch as much as it needs to while a value of 1 will disable stretching entirely.

Preserve Transient: This is the amount of the item you want to prevent from stretching no matter what. Stretching the initial attack of a media item usually sounds poor, so this will prevent that initial attack from stretching and only stretch the tail of the item. If this is set to 35ms for example, a split is placed 35ms after the transient and only the item to the right of the split will be stretched, leaving the initial attack untouched. A value of 0 disables this function completely. The default value of 35ms is usually pretty good.

Transient Crossfade Length: This is simply the length of the crossfade used when splitting at the "Preserve Transient" point.

Fade Shape: This determines the shape of the fades used when performing any crossfades. It is an integer from 0 to 5, the following chart explains which is which.



Mark possible artifacts?: This is a value of 0 (no) or 1 (yes). If 1 is entered, the action will insert a marker everywhere that the gap exceeded the maximum allowable gap AND the maximum stretch value was reached, which means it had to trim the start of the following item more than expected. This allows you to easily identify areas where there might be an audible glitch so you can listen to them with special attention and either time stretch more to fix it, or copy and paste a better hit from a different part of the song.

Last edited by AdamWathan; 10-23-2010 at 01:13 PM.
AdamWathan is offline   Reply With Quote
Old 10-05-2010, 09:55 PM   #2
CatharsisStudios
Human being with feelings
 
Join Date: Jul 2009
Posts: 18
Default

sick, fuck yes sick
CatharsisStudios is offline   Reply With Quote
Old 10-05-2010, 10:03 PM   #3
EricM
Human being with feelings
 
EricM's Avatar
 
Join Date: Jul 2009
Location: Ljubljana, Slovenia
Posts: 3,801
Default

nice job dude
__________________
Shoelace 4 Theme | SoundCloud/erXon
EricM is offline   Reply With Quote
Old 10-05-2010, 10:15 PM   #4
bluzkat
Human being with feelings
 
bluzkat's Avatar
 
Join Date: Jun 2007
Location: Northern Michigan
Posts: 6,919
Default

Nice one, definitely.

__________________
Peace...
bluzkat
bluzkat is offline   Reply With Quote
Old 10-05-2010, 10:57 PM   #5
moliere
Human being with feelings
 
moliere's Avatar
 
Join Date: Mar 2007
Location: Wellington, New Zealand
Posts: 2,261
Default

looks awesome!
moliere is offline   Reply With Quote
Old 10-05-2010, 11:12 PM   #6
lawrs
Human being with feelings
 
Join Date: Nov 2009
Posts: 976
Default

Ingenious stuff !
lawrs is offline   Reply With Quote
Old 10-06-2010, 12:30 AM   #7
bblue
Human being with feelings
 
Join Date: Mar 2010
Location: El Cajon, CA (San Diego)
Posts: 593
Default

Very nice, Adam! Will look forward to testing it.

If transient detection was more consistent and predictable this would work well on other rhythmic instruments as well, such as bass and some guitar tracks. Even some vocals.

One thing really nice about Pro Tools Elastic Audio is its transient detection. With just a sensitivity control it gets 99% right, and the rest you can touch up manually before you apply. In Reaper I usually have to do all this sort of thing with slip editing and time-stretching per bar (or whatever) to suit.

I notice in all your methods you rely on cross-fading quite heavily. Is there a particular length or slope that is especially effective? I find that for the most part I can cut cleaner that most of the cross-fades produced. They're always noisy in one way or another.

--Bill
bblue is offline   Reply With Quote
Old 10-06-2010, 08:55 AM   #8
AdamWathan
Human being with feelings
 
AdamWathan's Avatar
 
Join Date: Apr 2008
Location: Cambridge, Ontario
Posts: 2,644
Default

Alright so I've added a feature that makes this surpass Beat Detective and puts it in a league of it's own...

Basically what I did was add a timestretching component. I know I know, it's blasphemy, but hear me out. A lot of the time if two hits are played too close together and you pull them apart and backfill in between, you will hear a noticeable little snit. What I usually do in these situations, is if the gap is too big and I know I'm going to get a noticeable artifact, I will time stretch the first item a little bit in order to shrink the gap, and then backfill.

So the way it works is as follows. You are prompted for a "Max Gap" time, and a "Max Stretch Factor" value. The Max Gap is in seconds, and you just set this to whatever you think the maximum allowable gap is in your material where backfilling it won't sound glitchy. The Max Stretch Factor is how much you want to allow the items to stretch if the gap is too big. So say you set it to 0.85, the most it will stretch the item is down to 0.85 playrate (making the item 1/0.85 longer). 0.5 is half for example.

If you have 2 items with a 50ms gap, and you set the max gap to 25ms, it will stretch the first item until the gap is only 25ms or the max stretch factor is reached, then backfill the rest of the gap from the other item.

So a stretch factor of 1 means no time stretching will ever occur and it will function exactly like Beat Detective. The other extreme is a stretch factor of 0 and max gap of 0, which means it will stretch as much as necessary to fill the space between the items. It is very flexible and with the elastique 2 Pro algorithm in Reaper, it sounds great!

The problem with Elastic Audio has always been that it always stretched items in both directions. So even if doing it BD style would result in no gap and sound great, EA would still compress the first item. The problem with BD, is that if the gap is too big, it will still backfill it which results in a duplication of too much material and creates an audible glitch.

AutoPocket combines the best of both worlds by never compressing audio, and only stretching it when necessary to avoid the glitches you would get in Beat Detective.

Here's a quick demonstration, ignore how bad my commentary is!

http://www.adamwathan.com/reaper/AutoPocketPro.swf
AdamWathan is offline   Reply With Quote
Old 10-06-2010, 09:29 AM   #9
Melvin J.
Human being with feelings
 
Melvin J.'s Avatar
 
Join Date: Apr 2010
Location: South West Michigan
Posts: 256
Default

Looks great, Adam! Thanks a lot for this tool.
__________________
ADK Laptop Intel i7 2860QM, 8 GB RAM, Avid MBOX Pro 3 (BLA Modified), Novation Remote SL37, DSI Mopho, DSI Tempest, Trilian, Aether 1.5.1, Valhalla, Nerve, Komplete 7
Melvin J. is offline   Reply With Quote
Old 10-06-2010, 09:30 AM   #10
hopi
Human being with feelings
 
hopi's Avatar
 
Join Date: Oct 2008
Location: Right Hear
Posts: 15,618
Default

nice one Adam.... is there a place for us to download your work on this?
__________________
...should be fixed for the next build... http://tinyurl.com/cr7o7yl
https://soundcloud.com/hopikiva
hopi is offline   Reply With Quote
Old 10-06-2010, 09:55 AM   #11
Drugs
Human being with feelings
 
Drugs's Avatar
 
Join Date: Oct 2008
Posts: 270
Default

im definitely diggin this, awesome work
__________________
Drugs are bad. Brains are good.
Drugs is offline   Reply With Quote
Old 10-06-2010, 10:10 AM   #12
chip mcdonald
Human being with feelings
 
chip mcdonald's Avatar
 
Join Date: May 2006
Location: NA - North Augusta South Carolina
Posts: 4,294
Default

It would be even cooler if there were a couple of preset/macro buttons you could set split/quantize/etc. actions to, to make it go in one pass.

Too bad there isn't a way to automate selecting the drum tracks prior to that step - 1-click bad drumming fix....
__________________
]]] guitar lessons - www.chipmcdonald.com [[[
WEAR A FRAKKING MASK!!!!
chip mcdonald is offline   Reply With Quote
Old 10-06-2010, 10:14 AM   #13
Finnish
Human being with feelings
 
Finnish's Avatar
 
Join Date: Jun 2006
Location: Finland, Kuopio
Posts: 911
Default

This is some serious Reaper rules-stuff, way to go Adam!
__________________
REGISTERED USER
My music, studio and bands
Finnish is offline   Reply With Quote
Old 10-06-2010, 10:40 AM   #14
strinxx
Human being with feelings
 
strinxx's Avatar
 
Join Date: Jun 2009
Posts: 300
Default

Now this is really cool! Wow!
strinxx is offline   Reply With Quote
Old 10-06-2010, 11:01 AM   #15
koolkeys
Human being with feelings
 
Join Date: Jul 2006
Posts: 952
Default

Very cool, thanks! I won't say that I prefer this to BD, because of how integrated BD is and because with Reaper, you still have to split everything(PT lets you do these types of edits without splitting). But this definitely adds to the value of Reaper, and is absolutely useful. I'm more nit-picking than anything, so thanks for doing the work on this!

Brent
koolkeys is offline   Reply With Quote
Old 10-06-2010, 11:07 AM   #16
AdamWathan
Human being with feelings
 
AdamWathan's Avatar
 
Join Date: Apr 2008
Location: Cambridge, Ontario
Posts: 2,644
Default

Quote:
Originally Posted by koolkeys View Post
Very cool, thanks! I won't say that I prefer this to BD, because of how integrated BD is and because with Reaper, you still have to split everything(PT lets you do these types of edits without splitting). But this definitely adds to the value of Reaper, and is absolutely useful. I'm more nit-picking than anything, so thanks for doing the work on this!

Brent
Well you can't quantize anything with Beat Detective without splitting it first... In Elastic Audio you can, but that's not the functionality I'm going for! Glad you like it, hoping to have it up for everyone to check out today. Working on a sort of instruction/workflow manual first so there is at least a clear cut resource explaining how to use it.
AdamWathan is offline   Reply With Quote
Old 10-06-2010, 11:12 AM   #17
koolkeys
Human being with feelings
 
Join Date: Jul 2006
Posts: 952
Default

Quote:
Originally Posted by AdamWathan View Post
Well you can't quantize anything with Beat Detective without splitting it first... In Elastic Audio you can, but that's not the functionality I'm going for! Glad you like it, hoping to have it up for everyone to check out today. Working on a sort of instruction/workflow manual first so there is at least a clear cut resource explaining how to use it.
Correct, which is why I was saying that it was nit-picking since a combination of the PT features lets you do it without splitting.

I hope it didn't sound like complaining! I am thankful for your work, and look forward to trying it out. I do use PT and love it, but Reaper is better all the time, in part because of people putting forth effort like you!

Brent
koolkeys is offline   Reply With Quote
Old 10-06-2010, 11:12 AM   #18
tombuur
Human being with feelings
 
tombuur's Avatar
 
Join Date: Jul 2010
Location: Denmark
Posts: 465
Default

Looking forward to try it out myself. Looks very interesting.
__________________
Reaper 5, latest release, 64-bit w SWS |GA Z270 UD5|Intel i7 K7700|32 GB RAM|Fireface 800|500GB SSD sys, 1TB SSD Rec, 4TB HDD samples|Win 10 64bit|Dynaudio BM6A|Softube Console 1|Sonnox|Waves|Melda|Superior 3|Komplete 12U|Melodyne|Slate|Izotope.
tombuur is offline   Reply With Quote
Old 10-06-2010, 11:47 AM   #19
nfpotter
Human being with feelings
 
Join Date: Feb 2009
Location: Portland, OR, USA
Posts: 1,057
Default

Brilliant, Adam!

Looks like you're on a Mac. Will there be a PC version, or does it even matter?
__________________
"A fly was very close to being called a land, 'cause that's what they do half the time."

-Mitch Hedberg
nfpotter is offline   Reply With Quote
Old 10-06-2010, 11:49 AM   #20
AdamWathan
Human being with feelings
 
AdamWathan's Avatar
 
Join Date: Apr 2008
Location: Cambridge, Ontario
Posts: 2,644
Default

Quote:
Originally Posted by nfpotter View Post
Brilliant, Adam!

Looks like you're on a Mac. Will there be a PC version, or does it even matter?
It's a Python ReaScript, should be cross platform as long as you have Python installed!
AdamWathan is offline   Reply With Quote
Old 10-06-2010, 12:22 PM   #21
nfpotter
Human being with feelings
 
Join Date: Feb 2009
Location: Portland, OR, USA
Posts: 1,057
Default

Is there a way to install it WITHOUT having Python?
__________________
"A fly was very close to being called a land, 'cause that's what they do half the time."

-Mitch Hedberg
nfpotter is offline   Reply With Quote
Old 10-06-2010, 12:26 PM   #22
Jeffos
Mortal
 
Jeffos's Avatar
 
Join Date: Dec 2008
Location: France
Posts: 1,969
Default

very, very cool, AdamWathan! when you'll be happy with it give us a ring to add it to the SWS extensions (as "SWS/AdamW", of course )
Jeffos is offline   Reply With Quote
Old 10-06-2010, 01:44 PM   #23
AdamWathan
Human being with feelings
 
AdamWathan's Avatar
 
Join Date: Apr 2008
Location: Cambridge, Ontario
Posts: 2,644
Default

Quote:
Originally Posted by Jeffos View Post
very, very cool, AdamWathan! when you'll be happy with it give us a ring to add it to the SWS extensions (as "SWS/AdamW", of course )
That would be killer, would love to have it compiled in C instead of via ReaScript so that people can use it without installing Python! Thanks.
AdamWathan is offline   Reply With Quote
Old 10-06-2010, 01:48 PM   #24
AdamWathan
Human being with feelings
 
AdamWathan's Avatar
 
Join Date: Apr 2008
Location: Cambridge, Ontario
Posts: 2,644
Default

Here's a video of it running on Windows...

http://www.adamwathan.com/reaper/autopocket_windows.swf

Seems there are still a lot of performance optimization issues to sort out on the OSX end. Both my videos were made on the same machine (2009 MacBook Pro 2.53ghz 4gb ram) and on Windows the script runs like lightning, you can't even see it happen, whereas on OSX you have to watch it crawl through every single step :/
AdamWathan is offline   Reply With Quote
Old 10-06-2010, 01:50 PM   #25
BenK-msx
Human being with feelings
 
BenK-msx's Avatar
 
Join Date: Jun 2008
Location: Whales, UK
Posts: 6,009
Default

ooh, v. cool. even more so if can be a part of sws.

showing folk (perhaps not the drummer in question...) that little smooth script in action will get them very excited.

maybe can inspire devs to sort that whole area out for next V too.
__________________
JS Super8 Looper Template & intro | BCF2000 uber info Thread | Who killed the Lounge?
BenK-msx is offline   Reply With Quote
Old 10-06-2010, 02:31 PM   #26
sws
Code Monkey
 
sws's Avatar
 
Join Date: Sep 2007
Location: Madison, WI
Posts: 857
Default

Yeah, let's definitely get this into SWS for ease of use/speed/etc.
sws is offline   Reply With Quote
Old 10-06-2010, 02:45 PM   #27
bluzkat
Human being with feelings
 
bluzkat's Avatar
 
Join Date: Jun 2007
Location: Northern Michigan
Posts: 6,919
Default

Adam,

Thought this was a good idea, then I watched the demo video...

This is a freakin' GREAT idea!!

__________________
Peace...
bluzkat
bluzkat is offline   Reply With Quote
Old 10-06-2010, 02:45 PM   #28
Bevosss
Human being with feelings
 
Bevosss's Avatar
 
Join Date: Feb 2007
Location: Sydney Oz
Posts: 8,480
Default

Awesome Adam, that's some great work! And way cool it's going to be part of the sws extension, congrats.
__________________
The media are misleading the public about Syria:
https://www.bostonglobe.com/opinion/...tcK/story.html
Bevosss is offline   Reply With Quote
Old 10-06-2010, 03:23 PM   #29
airon
Human being with feelings
 
airon's Avatar
 
Join Date: Aug 2006
Location: Berlin
Posts: 11,817
Default

Fine job indeed.

Everyone take hard looks at it too. It should be as close to what you need as possible before the C-madness begins.
__________________
Using Latch Preview (Video) - Faderport 16 setup for CSI 1.1 , CSI 3.10
Website
"My ego comes pre-shrunk" - Randy Thom
airon is offline   Reply With Quote
Old 10-06-2010, 04:04 PM   #30
AdamWathan
Human being with feelings
 
AdamWathan's Avatar
 
Join Date: Apr 2008
Location: Cambridge, Ontario
Posts: 2,644
Default

Quote:
Originally Posted by TexasFury View Post
On a more practical tech note, would it be safe to assume that with a drummer that gets out of time with THEM-SELF (yes, very possible) and is overhead miked, the overheads would have to be scrapped using any kind of "Beat Fixer"? After all, you can't uncook the omelet that is overhead miking.

However, very nice work, Adam.
Yeah drums have to be edited as a group to maintain the correct phase relationships between mics, so if he is out of time with himself you are sort of SOL. Most drummers usually at least play their hands in time with each other though, and with some highpass filtering on the overheads you can usually edit the kick separately when left with no other option.
AdamWathan is offline   Reply With Quote
Old 10-06-2010, 04:14 PM   #31
Shan
Human being with feelings
 
Shan's Avatar
 
Join Date: Mar 2007
Location: Vancouver
Posts: 2,279
Default

Quote:
Originally Posted by AdamWathan View Post
Alright so I've added a feature that makes this surpass Beat Detective and puts it in a league of it's own...
Killer! Hit me up on Skype tonight and give me a demo.

Quote:
Originally Posted by sws View Post
Yeah, let's definitely get this into SWS for ease of use/speed/etc.
A big +1 on this!!

Shane
__________________
"Music should be performed by the musician not by the engineer."

Michael Wagener 25th July 2005, 02:59 PM
Shan is offline   Reply With Quote
Old 10-06-2010, 07:17 PM   #32
Shan
Human being with feelings
 
Shan's Avatar
 
Join Date: Mar 2007
Location: Vancouver
Posts: 2,279
Default

Thanks for the killer demo on Skype!! Add that "Preserve Transient" field we discussed, and this will be a HUGE hit for the editors. Well done!

Shane
__________________
"Music should be performed by the musician not by the engineer."

Michael Wagener 25th July 2005, 02:59 PM

Last edited by Shan; 10-06-2010 at 08:33 PM.
Shan is offline   Reply With Quote
Old 10-06-2010, 07:30 PM   #33
DeyBwah
Human being with feelings
 
DeyBwah's Avatar
 
Join Date: Mar 2010
Posts: 1,572
Default

Great job Adam! This is SO cool!

+1 for SWS integration! Or heck, maybe the devs will integrate it into REAPER?
__________________
HDSPe | D-Box | MP500-NV | Essence | Obsidian | SM57 | Beta52 | Equi=Tech | CMS40 | HS80 w/HS10W http://soundcloud.com/deybwah | http://www.facebook.com/pages/DeyBwah/208627672487538 | http://twitter.com/#!/DeyBwah
DeyBwah is offline   Reply With Quote
Old 10-06-2010, 08:01 PM   #34
Chris_P_Critter
Human being with feelings
 
Chris_P_Critter's Avatar
 
Join Date: Mar 2008
Location: In a van, down by the river
Posts: 3,574
Default

Adam, you've turned into a Reaper super hero, bro. Good job on this!
__________________
The Freeze Tag Assassins
Chris_P_Critter is offline   Reply With Quote
Old 10-06-2010, 08:39 PM   #35
hopi
Human being with feelings
 
hopi's Avatar
 
Join Date: Oct 2008
Location: Right Hear
Posts: 15,618
Default

Quote:
Originally Posted by Jeffos View Post
very, very cool, AdamWathan! when you'll be happy with it give us a ring to add it to the SWS extensions (as "SWS/AdamW", of course )
Amen.... how great
__________________
...should be fixed for the next build... http://tinyurl.com/cr7o7yl
https://soundcloud.com/hopikiva
hopi is offline   Reply With Quote
Old 10-06-2010, 09:34 PM   #36
Shan
Human being with feelings
 
Shan's Avatar
 
Join Date: Mar 2007
Location: Vancouver
Posts: 2,279
Default

Quote:
Originally Posted by Shan View Post
Thanks for the killer demo on Skype!! Add that "Preserve Transient" field we discussed, and this will be a HUGE hit for the editors. Well done!

Shane
Now that you just got the Preserve Transient feature implemented we discussed on Skype, this is gonna be pretty huge and popular. It's everything I ever wanted to see in the Edit Smoothing section of Beat Detective 2.0. This one has to go in natively. Hurry up and post that new vid.

Well done Adam!

Shane
__________________
"Music should be performed by the musician not by the engineer."

Michael Wagener 25th July 2005, 02:59 PM

Last edited by Shan; 10-06-2010 at 09:44 PM.
Shan is offline   Reply With Quote
Old 10-06-2010, 09:55 PM   #37
AdamWathan
Human being with feelings
 
AdamWathan's Avatar
 
Join Date: Apr 2008
Location: Cambridge, Ontario
Posts: 2,644
Default

Here's the updated video demonstration including the new "Preserve Transient" feature:

http://www.adamwathan.com/reaper/AutoPocket_beta3.swf

Remember, the timestretching and preserve transient functions can be completely disabled by setting the Max Stretch to "1" and Preserve Transient to "0", so if you want to stick to doing everything the old school Beat Detective way, AutoPocket is more than capable of doing it for you
AdamWathan is offline   Reply With Quote
Old 10-06-2010, 11:00 PM   #38
malcolmj
Human being with feelings
 
malcolmj's Avatar
 
Join Date: Jan 2006
Location: Australia
Posts: 1,668
Default

Great stuff Adam. The Preserve Transient feature is particularly impressive.

Cheers,

Malcolm.
malcolmj is offline   Reply With Quote
Old 10-06-2010, 11:18 PM   #39
Bevosss
Human being with feelings
 
Bevosss's Avatar
 
Join Date: Feb 2007
Location: Sydney Oz
Posts: 8,480
Default

Just watched it Adam, awesome man. Dumbass question from someone who uses your drum slip-editing method (and loves it!) but has never used beat detective, what situation would you use this instead of slip-editing manually?

I have to say, you are proving extremely valuable to Reaper users. Well done!
__________________
The media are misleading the public about Syria:
https://www.bostonglobe.com/opinion/...tcK/story.html
Bevosss is offline   Reply With Quote
Old 10-06-2010, 11:22 PM   #40
Bogi
Human being with feelings
 
Join Date: Aug 2006
Location: USA
Posts: 55
Default

Kudos!
Bogi is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -7. The time now is 06:00 AM.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2024, vBulletin Solutions Inc.