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

Reply
 
Thread Tools Display Modes
Old 06-22-2018, 10:09 AM   #1
Harry Diddlebock
Human being with feelings
 
Harry Diddlebock's Avatar
 
Join Date: Jun 2018
Location: At the bottom optimistically looking up.
Posts: 142
Default Are These Two Problems Solvable In REAPER

First problem: I have about 20,000 midi items. Each midi item is a drum pattern. Sometimes the open hi-hat occupies the same position as the close hi-hat. How do I batch delete all all the close hi-hats that are occupying the same position as the open hi-hat?

Second problem: sometimes the open hi-hat is not resolved by a close hi-hat, and instead there is an empty space, how do I batch insert a close hi-hat in the empty position immediately after an open hi-hat?

Dies REAPER have a "Find And Replace" function similar to what text editors have. Or if not similar then any alternatives?

I did use the word filter in the Action thingy and typed the word "find" by itself, and after that the word "search" by itself but there doesn't seem to be any Actions that does "find and replace" anywhere. It's like a labyrinth in there.
Harry Diddlebock is offline   Reply With Quote
Old 06-22-2018, 10:27 AM   #2
EvilDragon
Human being with feelings
 
EvilDragon's Avatar
 
Join Date: Jun 2009
Location: Croatia
Posts: 24,790
Default

I'm not sure if either problems have a solution easily in Reaper...
EvilDragon is offline   Reply With Quote
Old 06-22-2018, 11:07 AM   #3
Harry Diddlebock
Human being with feelings
 
Harry Diddlebock's Avatar
 
Join Date: Jun 2018
Location: At the bottom optimistically looking up.
Posts: 142
Default

Oh hey it's you from KVR. Thanks very much again for the last problem solved.

Okay, how about complicated solutions to these new problems. If they exist, I'll take take those too.

Maybe REAPER 6.0 might have the solutions and if that's the case I guess waiting is not a problem.
Harry Diddlebock is offline   Reply With Quote
Old 06-22-2018, 11:09 AM   #4
EvilDragon
Human being with feelings
 
EvilDragon's Avatar
 
Join Date: Jun 2009
Location: Croatia
Posts: 24,790
Default

Nobody here knows what Reaper 6 will contain or even when it will be out (except developers, but they ain't saying anything)

I assume a scripted solution could be done for this, but I'm not aware if it exists. Perhaps some of the ReaScripters around might take a poke at it...
EvilDragon is offline   Reply With Quote
Old 06-22-2018, 11:15 AM   #5
X-Raym
Human being with feelings
 
X-Raym's Avatar
 
Join Date: Apr 2013
Location: France
Posts: 9,875
Default

you have to post screenshots of before/after eg so we can see of existing scripts could do the job oe if a custom solution has to be made.


anyway, this sounds totally possible, in a way or another.


a RPP sample will help also of course.
X-Raym is offline   Reply With Quote
Old 06-22-2018, 11:22 AM   #6
Diki Ross
Human being with feelings
 
Join Date: Jan 2015
Location: Sunny Florida
Posts: 34
Default

One solution might be, if the closed hihats are much lower velocity than the open (is this a bleed problem with a triggered drumkit?) simply select all closed hihats and delete those below a certain velocity.
Diki Ross is offline   Reply With Quote
Old 06-22-2018, 11:27 AM   #7
Harry Diddlebock
Human being with feelings
 
Harry Diddlebock's Avatar
 
Join Date: Jun 2018
Location: At the bottom optimistically looking up.
Posts: 142
Default

Quote:
Originally Posted by X-Raym View Post
you have to post screenshots of before/after eg so we can see of existing scripts could do the job oe if a custom solution has to be made.


anyway, this sounds totally possible, in a way or another.


a RPP sample will help also of course.
Okay, I will make pictures. I'll have them posted within an hour if posting pictures here is similar to KVR's way. I can also provide a project file but I don't know where and how to upload the file. I'll find out how.

In the mean time, I looked and found the "Feature Requests" section. I think I will just copy and paste my first post there. Thanks. Be back in a bit.
Harry Diddlebock is offline   Reply With Quote
Old 06-22-2018, 11:30 AM   #8
Harry Diddlebock
Human being with feelings
 
Harry Diddlebock's Avatar
 
Join Date: Jun 2018
Location: At the bottom optimistically looking up.
Posts: 142
Default

Oh wait, maybe I'll wait to see if the problems are solvable first before I post at the "feature Request" section.
Harry Diddlebock is offline   Reply With Quote
Old 06-22-2018, 11:33 AM   #9
Michael AD
Human being with feelings
 
Michael AD's Avatar
 
Join Date: Jul 2017
Location: Hackensack
Posts: 347
Default

I'm not sure if you are simply trying to do some type of batch process... if so, I have no idea.

However, on a case-by-case basis, you input one of your MIDI drum files and then select all the open hi-hats by right-clicking on their note in the piano key, copy them, then drag them to the pitch that corresponds to the closed hi-hat.

Now go back to the original pitch of the open hi-hat and paste back the original file. Now go back to the newly pasted closed hi-hats, right-click to select them all, and then nudge them to the right slightly and you would have now closed all the open hi-hats.
Michael AD is offline   Reply With Quote
Old 06-22-2018, 12:16 PM   #10
Harry Diddlebock
Human being with feelings
 
Harry Diddlebock's Avatar
 
Join Date: Jun 2018
Location: At the bottom optimistically looking up.
Posts: 142
Default

Edit: deleted post because of problem with Photobucket site.

Last edited by Harry Diddlebock; 06-22-2018 at 02:02 PM. Reason: problem with Photobucket site
Harry Diddlebock is offline   Reply With Quote
Old 06-22-2018, 12:22 PM   #11
Harry Diddlebock
Human being with feelings
 
Harry Diddlebock's Avatar
 
Join Date: Jun 2018
Location: At the bottom optimistically looking up.
Posts: 142
Default

Quote:
Originally Posted by Michael AD View Post
I'm not sure if you are simply trying to do some type of batch process... if so, I have no idea.

However, on a case-by-case basis, you input one of your MIDI drum files and then select all the open hi-hats by right-clicking on their note in the piano key, copy them, then drag them to the pitch that corresponds to the closed hi-hat.

Now go back to the original pitch of the open hi-hat and paste back the original file. Now go back to the newly pasted closed hi-hats, right-click to select them all, and then nudge them to the right slightly and you would have now closed all the open hi-hats.
Yes, it has to be a batch operation because I have 20,000 midi items to process. But I will try your method on one file just to see. Thank you.
Harry Diddlebock is offline   Reply With Quote
Old 06-22-2018, 12:29 PM   #12
Harry Diddlebock
Human being with feelings
 
Harry Diddlebock's Avatar
 
Join Date: Jun 2018
Location: At the bottom optimistically looking up.
Posts: 142
Default

Quote:
Originally Posted by Diki Ross View Post
One solution might be, if the closed hihats are much lower velocity than the open (is this a bleed problem with a triggered drumkit?) simply select all closed hihats and delete those below a certain velocity.
The original velocity of all the midi notes were 127. But I've already converted all of them to midi note velocity 100.

The 20, 000 midi items were created randomly by a drum midi pattern generator.
Harry Diddlebock is offline   Reply With Quote
Old 06-22-2018, 01:38 PM   #13
Michael AD
Human being with feelings
 
Michael AD's Avatar
 
Join Date: Jul 2017
Location: Hackensack
Posts: 347
Default

Just curious - what are you doing with these 20,000 drum patterns?
Michael AD is offline   Reply With Quote
Old 06-22-2018, 01:59 PM   #14
Harry Diddlebock
Human being with feelings
 
Harry Diddlebock's Avatar
 
Join Date: Jun 2018
Location: At the bottom optimistically looking up.
Posts: 142
Default

First problem:

Find this:
Replace with this:


Second problem:

Find this:
Replace with this:
Attached Images
File Type: jpg inserted-close-hi-hat.jpg (52.5 KB, 459 views)
File Type: jpg missing-close-hi-hat.jpg (52.2 KB, 505 views)
File Type: jpg with-close-hi-hat.jpg (32.1 KB, 475 views)
File Type: jpg without-close-hi-hat.jpg (23.2 KB, 481 views)
Harry Diddlebock is offline   Reply With Quote
Old 06-22-2018, 02:08 PM   #15
Harry Diddlebock
Human being with feelings
 
Harry Diddlebock's Avatar
 
Join Date: Jun 2018
Location: At the bottom optimistically looking up.
Posts: 142
Default

Quote:
Originally Posted by Michael AD View Post
Just curious - what are you doing with these 20,000 drum patterns?
Let's say I have a bassline that's one bar long...
I randomly pick one drum pattern from the 20,000 midi items and see if it sounds good with the bassline.

If it doesn't sound good, I hide that one doesn't-sound-good-in combination-with-bassline midi item and I then randomly choose another till I find the one that sounds good to me.
Harry Diddlebock is offline   Reply With Quote
Old 06-22-2018, 02:27 PM   #16
tls11823
Human being with feelings
 
tls11823's Avatar
 
Join Date: Aug 2010
Location: Harrisburg, PA USA
Posts: 1,481
Default

So you have 20,000 patterns that were generated randomly, and then you're randomly selecting among those randomly-generated patterns in hopes that you'll eventually randomly stumble on one that matches your bass line?

When you hit another section of the song with a different bass line, I'd guess you have to start again by randomly selecting among the randomly-generated patterns.

And in the midst of this, you're trying to clean up the randomly-generated patterns programatically to address the fact that the random patterns were generated - um - randomly.

Maybe I'm missing something here, but if not, you may want to rethink your process flow. Perhaps intentionally generate drum patterns to match the existing bass line.

If I've completely misunderstood, please clarify.
__________________
We act as though comfort and luxury were the chief requirements of life, when all that we need to make us happy is something to be enthusiastic about.
--Charles Kingsley... or maybe Albert Einstein... definitely somebody wiser than myself--
tls11823 is offline   Reply With Quote
Old 06-22-2018, 02:43 PM   #17
vitalker
Human being with feelings
 
vitalker's Avatar
 
Join Date: Dec 2012
Posts: 13,333
Default

Did you try File->Export project MIDI?
vitalker is offline   Reply With Quote
Old 06-22-2018, 02:51 PM   #18
Harry Diddlebock
Human being with feelings
 
Harry Diddlebock's Avatar
 
Join Date: Jun 2018
Location: At the bottom optimistically looking up.
Posts: 142
Default

Quote:
Originally Posted by tls11823 View Post
So you have 20,000 patterns that were generated randomly, and then you're randomly selecting among those randomly-generated patterns in hopes that you'll eventually randomly stumble on one that matches your bass line?

When you hit another section of the song with a different bass line, I'd guess you have to start again by randomly selecting among the randomly-generated patterns.

And in the midst of this, you're trying to clean up the randomly-generated patterns programatically to address the fact that the random patterns were generated - um - randomly.

Maybe I'm missing something here, but if not, you may want to rethink your process flow. Perhaps intentionally generate drum patterns to match the existing bass line.

If I've completely misunderstood, please clarify.
I did a test with 422 midi items. I am liking the results. The drum patterns sounds good to me. I like to try all sorts of methods. This method seems to be meeting my needs. I may stick to it for a while till I find a better way.
Harry Diddlebock is offline   Reply With Quote
Old 06-22-2018, 02:58 PM   #19
Harry Diddlebock
Human being with feelings
 
Harry Diddlebock's Avatar
 
Join Date: Jun 2018
Location: At the bottom optimistically looking up.
Posts: 142
Default

Quote:
Originally Posted by vitalker View Post
Did you try File->Export project MIDI?
I haven't tried that one yet. I've been batch saving the midi items from the Project Bay. Thanks very much for an alternative way that may be waaaaaay faster than the way I've been doing it.

In fact, my offline computer is tied up doing another batch midi export from the Project Bay right now. It takes over 5.5 hours to export 20,000 midi items. I'll try your suggestion as soon as it's done with the exporting.
Harry Diddlebock is offline   Reply With Quote
Old 06-22-2018, 03:25 PM   #20
preferred.nomenclature
Human being with feelings
 
Join Date: Dec 2014
Posts: 371
Default

Pretty sure I can write a JSFX that could handle your first case (if there’s an open and closed hihat at the same moment, delete block the closed one). I’ll look into it over the weekend.

Last edited by preferred.nomenclature; 06-22-2018 at 03:31 PM. Reason: strikethrough
preferred.nomenclature is offline   Reply With Quote
Old 06-22-2018, 03:39 PM   #21
Harry Diddlebock
Human being with feelings
 
Harry Diddlebock's Avatar
 
Join Date: Jun 2018
Location: At the bottom optimistically looking up.
Posts: 142
Default

Quote:
Originally Posted by preferred.nomenclature View Post
Pretty sure I can write a JSFX that could handle your first case (if there’s an open and closed hihat at the same moment, delete block the closed one). I’ll look into it over the weekend.
Thanks in advance no matter the outcome. Deleting the unwanted close hi-hat has benefits: it will shrink the file size. okay, guys/gals I.m done for the evening. I will be back tomorrow. Bye y'all from Britney Spears's brother. Not really.
Harry Diddlebock is offline   Reply With Quote
Old 06-22-2018, 09:17 PM   #22
preferred.nomenclature
Human being with feelings
 
Join Date: Dec 2014
Posts: 371
Default

Hopefully you can make some use of this. This only works for notes with identical timestamps, which in your example would seem that they do

Code:
desc: gianniMIDI note favorer
in_pin:none
out_pin:none

slider1:HPN=58<0,127,1>high priority note
slider2:LPN=53<0,127,1>low priority note

@init

function isHPN()
(
  (msg1>>4 == 9) &&  // message is a note on
  (msg2 == HPN);
);

function isLPN()
(
  (msg1>>4 == 9) &&  // message is a note on
  (msg2 == LPN)
);

lastLPN = -1;


@block

sampleCount = -1; // we'll increment sampleCount in @sample for parity with offset


@sample

sampleCount += 1;

previousOffset = sampleCount > 0 ? sampleCount - 1 : samplesblock - 1;

lastLPN == previousOffset && lastHPN != previousOffset &&  // we have an unaccounted-for LPN from the previous sample, send it (one sample late, best we can do)
(
  midisend(offset, 9<<4 + lastLPNChannel, LPN, lastLPNVelocity) ;
  lastLPN = -1;               
);

while(midirecv(offset, msg1, msg2, msg3))
(

  handled = 0;

  isHPN() &&
  (
    lastHPN = offset;                    // make a note that we processed a HPN at this offset
    midisend(offset, msg1, msg2, msg3);  // send message
    handled = 1;
  );

  isLPN() &&
  (
    lastHPN !== offset && (         // we haven't process a HPN with the same offset, but we may get one yet
      lastLPN = offset;             // record the offset
      lastLPNVelocity = msg3;       // record the velocity
      lastLPNChannel = msg1 & $~4;  // record the channel
    );
    handled = 1;
  );

  !handled && midisend(offset, msg1, msg2, msg3); // these are not the note-ons we're looking for. move along.
                                                  // this will occasionally pass through spurious LPN-offs
                                                  // but that shouldn't be a problem, he said
);

Last edited by preferred.nomenclature; 06-23-2018 at 01:30 PM.
preferred.nomenclature is offline   Reply With Quote
Old 06-23-2018, 07:54 AM   #23
Harry Diddlebock
Human being with feelings
 
Harry Diddlebock's Avatar
 
Join Date: Jun 2018
Location: At the bottom optimistically looking up.
Posts: 142
Default

Oh wow, that looks... foreign. Newbie here.

Good morning, even though it's rainy and windy. Stay home all day, probably. Google stuff.

Yup, I'm new to scripts. I'm now using Google to find out how to use it but is there a "best link" for absolute beginners somewhere?
Harry Diddlebock is offline   Reply With Quote
Old 06-23-2018, 08:01 AM   #24
vitalker
Human being with feelings
 
vitalker's Avatar
 
Join Date: Dec 2012
Posts: 13,333
Default

Quote:
Originally Posted by Harry Diddlebock View Post

Yup, I'm new to scripts. I'm now using Google to find out how to use it but is there a "best link" for absolute beginners somewhere?
It is JSFX. Just create a new file, paste this code there, save it to the Effects folder in Reaper folder and have fun.
vitalker is offline   Reply With Quote
Old 06-23-2018, 08:05 AM   #25
Harry Diddlebock
Human being with feelings
 
Harry Diddlebock's Avatar
 
Join Date: Jun 2018
Location: At the bottom optimistically looking up.
Posts: 142
Default

Quote:
Originally Posted by vitalker View Post
Did you try File->Export project MIDI?
That procedure exports all the 20,000 midi items as one midi file. I need to export the 20,000 midi items as 20,000 midi files so I could drag and drop each one onto a drum track later.

By the way, how do I stop REAPER from asking the same thing over and over with these dialog boxes? I wish it had a third choice like "Okay for the next 30 times or maybe even a hundred times".

Anyways, thanks for the suggestion.
Harry Diddlebock is offline   Reply With Quote
Old 06-23-2018, 08:06 AM   #26
Harry Diddlebock
Human being with feelings
 
Harry Diddlebock's Avatar
 
Join Date: Jun 2018
Location: At the bottom optimistically looking up.
Posts: 142
Default

Quote:
Originally Posted by vitalker View Post
It is JSFX. Just create a new file, paste this code there, save it to the Effects folder in Reaper folder and have fun.
Okay, thanks a billion. Will try that now, be back in a bit.
Harry Diddlebock is offline   Reply With Quote
Old 06-23-2018, 08:18 AM   #27
Bri1
Banned
 
Join Date: Dec 2016
Location: England
Posts: 2,432
Default

ey-seems your making music a right job m8...why not keep it simple?
rather than generating and editing 20,000 files--can you not make a random generator that creates midi on the fly and edit after as-u-go?
all the deep nerdery is not letting you be realaxed into a musical flow...if that's the intention?
it's like trying to be a musician by talking,or reading about it eh?
Bri1 is offline   Reply With Quote
Old 06-23-2018, 11:01 AM   #28
Harry Diddlebock
Human being with feelings
 
Harry Diddlebock's Avatar
 
Join Date: Jun 2018
Location: At the bottom optimistically looking up.
Posts: 142
Default

Quote:
Originally Posted by Bri1 View Post
ey-seems your making music a right job m8...why not keep it simple?
rather than generating and editing 20,000 files--can you not make a random generator that creates midi on the fly and edit after as-u-go?
all the deep nerdery is not letting you be realaxed into a musical flow...if that's the intention?
it's like trying to be a musician by talking,or reading about it eh?
To me a musician, or more precisely a composer, is this: you make music, the method shouldn't matter. My method is very very very simple. Drag and drop midi drum file onto a drum track, hear if it sounds good with the bass guitar. Build everything from that. Nothing complex, plus I bet lots of people do it that way.

Different methods should be good for diversity. You have your way, they have their ways, I have my way. I like the David Bowie way, especially the way he did his lyrics. He chose random words from newspapers or magazines, etc, and randomly put them together and looked at the words and was inspired by the random sentences that the words made. Cut and paste is what David Bowie called it, I think. Why can't that be done with music too, and not just with lyrics?
Harry Diddlebock is offline   Reply With Quote
Old 06-23-2018, 11:16 AM   #29
Harry Diddlebock
Human being with feelings
 
Harry Diddlebock's Avatar
 
Join Date: Jun 2018
Location: At the bottom optimistically looking up.
Posts: 142
Default

Quote:
Originally Posted by vitalker View Post
It is JSFX. Just create a new file, paste this code there, save it to the Effects folder in Reaper folder and have fun.
I'm having trouble making the JSFX script show up in the FX browser. What am doing wrong?

I have a picture but it's very blurry because file limit of 60KB. Magnify this picture:
Attached Images
File Type: jpg jjsfx-not-showing-up.jpg (59.9 KB, 93 views)
Harry Diddlebock is offline   Reply With Quote
Old 06-23-2018, 11:19 AM   #30
xpander
Human being with feelings
 
xpander's Avatar
 
Join Date: Jun 2007
Location: Terra incognita
Posts: 7,670
Default

Can't tell anything from that picture, but make sure you didn't save the JSFX as a text file (having a .txt or any other extension). Rename the file without any extension and you should be good.
xpander is offline   Reply With Quote
Old 06-23-2018, 11:25 AM   #31
Harry Diddlebock
Human being with feelings
 
Harry Diddlebock's Avatar
 
Join Date: Jun 2018
Location: At the bottom optimistically looking up.
Posts: 142
Default

Quote:
Originally Posted by xpander View Post
Can't tell anything from that picture, but make sure you didn't save the JSFX as a text file (having a .txt or any other extension). Rename the file without any extension and you should be good.
Aha, I did do that, added a .txt extension. Ooops. Okay be back in a bit.
Harry Diddlebock is offline   Reply With Quote
Old 06-23-2018, 11:57 AM   #32
Harry Diddlebock
Human being with feelings
 
Harry Diddlebock's Avatar
 
Join Date: Jun 2018
Location: At the bottom optimistically looking up.
Posts: 142
Default

I copied the "gianniMIDI note favorer" script file to here:
C:\Program Files\REAPER\InstallData\Effects
It still didn't show up in the FX browser.

So I deleted it from there and put it here:
C:\Program Files\REAPER\Effects
It still didn't show up in the FX browser.

In the FX browser it should show up as "JS: gianniMIDI note favorer", right?
But this is what it looks like:
Attached Images
File Type: jpg fx-browser.jpg (58.5 KB, 101 views)
Harry Diddlebock is offline   Reply With Quote
Old 06-23-2018, 11:58 AM   #33
preferred.nomenclature
Human being with feelings
 
Join Date: Dec 2014
Posts: 371
Default

Try hitting F5 to re-scan
preferred.nomenclature is offline   Reply With Quote
Old 06-23-2018, 12:04 PM   #34
Harry Diddlebock
Human being with feelings
 
Harry Diddlebock's Avatar
 
Join Date: Jun 2018
Location: At the bottom optimistically looking up.
Posts: 142
Default

Quote:
Originally Posted by preferred.nomenclature View Post
Try hitting F5 to re-scan
I did the F5 refresh, the FX browser blinked but no change.
Harry Diddlebock is offline   Reply With Quote
Old 06-23-2018, 12:07 PM   #35
Harry Diddlebock
Human being with feelings
 
Harry Diddlebock's Avatar
 
Join Date: Jun 2018
Location: At the bottom optimistically looking up.
Posts: 142
Default

Oh wait, do I need extra components, my setup is bare minimum. Do I need runtimes and stuff?
Harry Diddlebock is offline   Reply With Quote
Old 06-23-2018, 12:10 PM   #36
Harry Diddlebock
Human being with feelings
 
Harry Diddlebock's Avatar
 
Join Date: Jun 2018
Location: At the bottom optimistically looking up.
Posts: 142
Default

I looked at the CCleaner Uninstaller and I see that all I have is microsoft net framework 2.0
Harry Diddlebock is offline   Reply With Quote
Old 06-23-2018, 12:17 PM   #37
EvilDragon
Human being with feelings
 
EvilDragon's Avatar
 
Join Date: Jun 2009
Location: Croatia
Posts: 24,790
Default

Quote:
Originally Posted by Harry Diddlebock View Post
Oh wait, do I need extra components, my setup is bare minimum. Do I need runtimes and stuff?
For JS FX, no, you don't.


JS FX need to go in Reaper's resource folder, so search the action list for "resource", run the action to open the resources folder, you'll see "Effects" folder in there, put the JS FX there.
EvilDragon is offline   Reply With Quote
Old 06-23-2018, 12:18 PM   #38
preferred.nomenclature
Human being with feelings
 
Join Date: Dec 2014
Posts: 371
Default

Nope, you’re fine. Deep breaths!

Options/Show Reaper resource path in Explorer. There will be an Effects folder in there, that’s the one you should use. If it doesn’t show up after putting it there and hitting F5 you have a gremlin in your computer, or possibly missed a line or two when copy-pasting
preferred.nomenclature is offline   Reply With Quote
Old 06-23-2018, 12:22 PM   #39
vitalker
Human being with feelings
 
vitalker's Avatar
 
Join Date: Dec 2012
Posts: 13,333
Default

Quote:
Originally Posted by Harry Diddlebock View Post
I have a picture but it's very blurry because file limit of 60KB. Magnify this picture:
Use https://stash.reaper.fm/ for all the files.
vitalker is offline   Reply With Quote
Old 06-23-2018, 12:25 PM   #40
Harry Diddlebock
Human being with feelings
 
Harry Diddlebock's Avatar
 
Join Date: Jun 2018
Location: At the bottom optimistically looking up.
Posts: 142
Default

Yeeehah. It showed up. Okay I'm off to test if it will block the unwanted hi-hats. Be back in 15 minutes. Thanks guys.
Harry Diddlebock 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 12:59 AM.


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