|
|
|
11-12-2012, 12:14 PM
|
#1
|
Human being with feelings
Join Date: Aug 2012
Location: Finland
Posts: 2,668
|
ReaScript: clumsy "arpeggiator"
...and even clumsier chordmaker/note selector
Note: The script uses SWS beta functions (SWS/S&M Extension pre-release v2.3.0 #23). Using with a real project is not recommended. The tkinter window should be closed before shutting Reaper. Also, Reaper's shortcut -keys don't work while the tkinter window is open. Thanks for the help, Veto, Fingers and Jeffos.
Load ArpeggiatorGUI.py from the Actionlist->Reascript:New/load (and make a toolbar -button).
Latest version:
https://stash.reaper.fm/17301/Arpeggiator.zip
- added: Transpose selected notes up/down within selected scale/ selected root
- fixed: get function didn't work correctly if "octave offset" was set to -1
- example files removed from the zip-file
I'll add an option to "force notes to selected scale - keep (or try to keep) the pattern shape"
Example files:
Example files can be loaded into treeviews: download (below) -> save as *.txt -files (into Arpeggiator -folder) -> choose the right tab -> right click on tkinter window -> Load pattern file
The script tries to find "Patterns.txt", "Chords.txt" and "Selections.txt" -files from the Arpeggiator -folder at startup. If they exist - treeviews get populated with these files automatically.
Last edited by spk77; 07-27-2013 at 11:23 AM.
|
|
|
11-13-2012, 04:15 PM
|
#2
|
Human being with feelings
Join Date: Aug 2012
Location: Finland
Posts: 2,668
|
Chords
- Select root note->Select pattern->Press Add button
Last edited by spk77; 12-06-2012 at 12:24 PM.
|
|
|
11-14-2012, 01:55 AM
|
#3
|
Human being with feelings
Join Date: Jun 2009
Location: Earth
Posts: 1,340
|
spk77,
Thank you.., this looks like real fun, can't wait to try it out.
|
|
|
12-06-2012, 12:06 PM
|
#4
|
Human being with feelings
Join Date: Aug 2012
Location: Finland
Posts: 2,668
|
Anton9, the new version is in the post #1. Please test if the selector works as it should. Would it be better if the indexing starts from 1 in the selection patterns? ([0, 3, 7] -> [1, 4, 8]). Currently it starts from 0.
Last edited by spk77; 12-06-2012 at 02:04 PM.
|
|
|
12-07-2012, 04:00 PM
|
#5
|
Human being with feelings
Join Date: Jun 2009
Location: Earth
Posts: 1,340
|
spk77,
I would have replied sooner, but I've been testing the latest pre-release of REAPER and documenting bugs.
It works perfectly and yes I think it might be better if the indexing started at 1.
Again.., thank you so much!
|
|
|
12-08-2012, 11:58 AM
|
#6
|
Human being with feelings
Join Date: Aug 2012
Location: Finland
Posts: 2,668
|
Quote:
Originally Posted by Anton9
spk77,
I would have replied sooner, but I've been testing the latest pre-release of REAPER and documenting bugs.
It works perfectly and yes I think it might be better if the indexing started at 1.
Again.., thank you so much!
|
Thanks for testing. Now the indexing starts at 1 (in the selection patterns).
Anton9, can I add your "Select every n'th MIDI note" -script to this script. It would be a nice addition. (first post updated)
Last edited by spk77; 12-08-2012 at 12:21 PM.
|
|
|
12-08-2012, 09:53 PM
|
#7
|
Human being with feelings
Join Date: Jun 2009
Location: Earth
Posts: 1,340
|
Quote:
Originally Posted by spk77
Anton9, can I add your "Select every n'th MIDI note" -script to this script. It would be a nice addition. (first post updated)
|
Sure.., go for it. I just thought of one other small thing that would be nice for the selector. How about allowing zero to be used as a skip note?
This would be useful for adding space between pattern repeats.
|
|
|
12-09-2012, 06:48 AM
|
#8
|
Human being with feelings
Join Date: Aug 2012
Location: Finland
Posts: 2,668
|
Reverse (flip) positions, lengths and pitches
EDIT: Fingers explained why this isn't working correctly (SWS/S&M Extension -thread)
My post: http://forum.cockos.com/showpost.php...postcount=1118
Fingers answers:
Quote:
Originally Posted by fingers
You can't have notes that overlap when modifying the midi state. So case 2 is by design.
The note growing to the item length looks like a bug. I will look into it.
|
Quote:
Originally Posted by Anton9
Sure.., go for it. I just thought of one other small thing that would be nice for the selector. How about allowing zero to be used as a skip note?
This would be useful for adding space between pattern repeats.
|
Ok, thank you...and yes, that's a good idea.
"Flip notes" -buttons added:
- "Flip positions" flip notes starting positions (moves the notes)
- "Flip length" last note's length->first note's length, second last->second and so on
- "Flip pitches" last note's pitch->first note's pitch, second last->second... (doesn't move the notes)
If the notes overlap, the lengths gets messed up (15s-25s):
Last edited by spk77; 12-13-2012 at 02:21 PM.
|
|
|
12-13-2012, 02:21 PM
|
#9
|
Human being with feelings
Join Date: Aug 2012
Location: Finland
Posts: 2,668
|
Chord inversion
- moves the lowest note(s) one octave up or the highest note(s) one octave down
Last edited by spk77; 12-13-2012 at 10:47 PM.
|
|
|
12-14-2012, 11:57 PM
|
#10
|
Human being with feelings
Join Date: Jun 2009
Location: Earth
Posts: 1,340
|
Thanks spk77 the chord inversion works nicely.
|
|
|
12-15-2012, 08:24 AM
|
#11
|
Human being with feelings
Join Date: Oct 2007
Location: home is where the heart is
Posts: 12,096
|
Oh totally missed this until now.
Nice, thank you.
Just gave it a quick first try, it works fine.
Some things I've observed:
- I have a 'MIDI octave name display offset' of -1 set in set in Preferences/Media/MIDI because I've found that this corresponds to most VSTi's I use.
Now the 'add chords' function is one octave wrong here, ie. when Root is '60 C4' it inserts at C3 on the piano roll. (just mentioning, it's a small thing I can live with)
- When the appregiator window is open it seems to steal keyboard shortcuts somehow, for example I can't do Ctrl+Z anymore (even if I focus back on Reaper's main window), I have to close the appregiator window first.
But very useful stuff nonetheless, thanks again for making this available.
|
|
|
12-15-2012, 11:40 AM
|
#12
|
Human being with feelings
Join Date: Aug 2012
Location: Finland
Posts: 2,668
|
Quote:
Originally Posted by Anton9
Thanks spk77 the chord inversion works nicely.
|
Nice, thanks for testing.
Quote:
Originally Posted by nofish
Oh totally missed this until now.
Nice, thank you.
Just gave it a quick first try, it works fine.
Some things I've observed:
- I have a 'MIDI octave name display offset' of -1 set in set in Preferences/Media/MIDI because I've found that this corresponds to most VSTi's I use.
Now the 'add chords' function is one octave wrong here, ie. when Root is '60 C4' it inserts at C3 on the piano roll. (just mentioning, it's a small thing I can live with)
- When the appregiator window is open it seems to steal keyboard shortcuts somehow, for example I can't do Ctrl+Z anymore (even if I focus back on Reaper's main window), I have to close the appregiator window first.
But very useful stuff nonetheless, thanks again for making this available.
|
Thank you. 'MIDI octave name display offset' -thingy is fixed now (download from post #1). Yes...Tkinter annoyingly steals keyboard shortcuts when running it inside REAPER. I guess it could be prevented if the ReaScript supported multithreading.
|
|
|
12-15-2012, 12:07 PM
|
#13
|
Human being with feelings
Join Date: Oct 2007
Location: home is where the heart is
Posts: 12,096
|
Thanks for the superquick fix.
|
|
|
12-16-2012, 02:28 AM
|
#14
|
Human being with feelings
Join Date: Jan 2008
Posts: 1,257
|
what version of python works with reaper 64?..... reaper doesnt seem to recognise python 64.......cant get this to work at all.....would love to try it.
__________________
Music is the best
เพลง ที่ดีที่สุดคือ
|
|
|
12-16-2012, 05:29 AM
|
#15
|
Human being with feelings
Join Date: Aug 2012
Location: Finland
Posts: 2,668
|
Quote:
Originally Posted by zappadave
what version of python works with reaper 64?..... reaper doesnt seem to recognise python 64.......cant get this to work at all.....would love to try it.
|
This is from http://www.reaper.fm/sdk/reascript/reascript.php :
" To use ReaScript, you must have Python installed on your computer. ReaScript should work with any version of Python between 2.7 and the current 3.x release.
OS X normally comes with Python already installed. If you don't already have Python, it is available as a free download for Windows or Mac from multiple sources. For 32-bit REAPER, you need 32-bit Python (regardless of the operating system). For 64-bit REAPER, you need 64-bit Python.
A list of Python distributions:http://www.python.org/download/
Once Python is installed, REAPER should automatically detect it, and ReaScript will work. If REAPER does not detect Python, you can enter the Python install directory in REAPER preferences, under Plug-Ins/ReaScript. "
I'm using ActivePython Community Edition free v3.2.2.3 (Win32):
http://www.activestate.com/activepython/downloads
|
|
|
12-16-2012, 09:10 AM
|
#16
|
Human being with feelings
Join Date: Jan 2008
Posts: 1,257
|
thanks....tried that....both the lastest 2.7.3 and 3.3.0 64bit and no go
shame
__________________
Music is the best
เพลง ที่ดีที่สุดคือ
|
|
|
12-17-2012, 11:49 PM
|
#17
|
Human being with feelings
Join Date: Jun 2009
Location: Earth
Posts: 1,340
|
Quote:
Originally Posted by zappadave
thanks....tried that....both the lastest 2.7.3 and 3.3.0 64bit and no go
shame
|
Hey zappa,
Not sure if this will help, but look in REAPER Preferences/Plug-ins/ReaScript and make sure "Enable" is checked. If that does'nt work maybe try doing a search on the entire REAPER forum for "python 64" or something like that.., as it seems like I remember seeing a post in which someone else was having a problem with python 64. Anyway I hope you get it working.
|
|
|
12-19-2012, 04:06 AM
|
#18
|
Human being with feelings
Join Date: Jan 2008
Posts: 1,257
|
seem to have python installed......appregiator gui is loaded and toolbar button assigned
i get a line 5 script error......no module named tkinter
what have i missed or done wrong?
__________________
Music is the best
เพลง ที่ดีที่สุดคือ
|
|
|
12-19-2012, 11:17 AM
|
#19
|
Human being with feelings
Join Date: Aug 2012
Location: Finland
Posts: 2,668
|
Quote:
Originally Posted by zappadave
seem to have python installed......appregiator gui is loaded and toolbar button assigned
i get a line 5 script error......no module named tkinter
what have i missed or done wrong?
|
Do you have Python 3.x installed? Python 2.x has a module called "Tkinter" (uppercase) and for 3.x it is "tkinter" (lowercase).
tkinter -folder should be in the \Python32\Lib -folder (C:\Python32\Lib\tkinter)
Also, this script uses ttk (themed widgets), there should be "ttk.py" -file in the tkinter folder. (C:\Python32\Lib\tkinter\ttk.py)
|
|
|
12-27-2012, 02:34 PM
|
#20
|
Human being with feelings
Join Date: Jun 2009
Location: Earth
Posts: 1,340
|
Hey spk77,
I was just wondering if you plan on adding zero as an indicator for not selecting a note in the selector patterns? So for example if you have the following selector pattern (1,3,6,0,0). You would end up with this.
I know this could also be written as (1,3,6,9,11,14) but in certain selection scenarios it would be easier and allow for a more compact selector pattern, especially when you have a large amount of notes.
|
|
|
12-27-2012, 03:31 PM
|
#21
|
Human being with feelings
Join Date: Aug 2012
Location: Finland
Posts: 2,668
|
Quote:
Originally Posted by Anton9
Hey spk77,
I was just wondering if you plan on adding zero as an indicator for not selecting a note in the selector patterns? So for example if you have the following selector pattern (1,3,6,0,0). You would end up with this.
I know this could also be written as (1,3,6,9,11,14) but in certain selection scenarios it would be easier and allow for a more compact selector pattern, especially when you have a large amount of notes.
|
Hello,
I thought something like this (u=unselect. It can be used before or after the pattern):
[1,3,6,u2] (selects notes 1,3,6 and unselects next two notes, as in your example)
[u1,1] (selects every second notes, starts at second)
[1,u1] (selects every second notes, starts at first)
...but I'm already making an editor. Maybe I should add two (narrow) edit boxes before and after the pattern entrybox (for not selecting notes).
|
|
|
12-27-2012, 04:46 PM
|
#22
|
Human being with feelings
Join Date: Jun 2009
Location: Earth
Posts: 1,340
|
Yes I like the idea of using u=unselect.., that would allow for even more compact patterns then my idea.
Here is another idea. How about just one entrybox with the ability to do stuff like this [1,3,6,u2,r2,1,4,7,u1] r# would repeat what comes before it that many times then continue on. So you would get 1,3,6,u,u,1,3,6,u,u,1,4,7,u. This would allow for complex selections.
|
|
|
01-19-2013, 10:00 AM
|
#23
|
Human being with feelings
Join Date: Jun 2009
Location: Earth
Posts: 1,340
|
spk77,
Just wondering how close you are to the next release?
|
|
|
01-22-2013, 10:04 AM
|
#24
|
Human being with feelings
Join Date: Aug 2012
Location: Finland
Posts: 2,668
|
I haven't done much for it because I've been very busy, sorry. I'll continue when I have more time.
|
|
|
01-22-2013, 11:11 PM
|
#25
|
Human being with feelings
Join Date: Jun 2009
Location: Earth
Posts: 1,340
|
No hurry.., I was just eager to check out that editor function you added, but I can wait.
|
|
|
05-21-2013, 07:59 PM
|
#26
|
Human being with feelings
Join Date: Jan 2007
Location: Smokie Bay.
Posts: 796
|
Thanks , love this !
|
|
|
05-22-2013, 09:01 AM
|
#27
|
Human being with feelings
Join Date: Aug 2012
Location: Finland
Posts: 2,668
|
Quote:
Originally Posted by Arnar
Thanks , love this !
|
Thank you!
Quote:
Originally Posted by Anton9
No hurry.., I was just eager to check out that editor function you added, but I can wait.
|
Still in progress (I haven't forgotten it totally ). I have to rewrite a lot of code to make the editor (and many other things) work like they should. F.ex. the following things should be fixed/added:
- undo isn't working correctly
- save list/treeviews to a file
- get a pattern from the MIDI-editor etc.
Last edited by spk77; 07-12-2013 at 01:41 PM.
|
|
|
07-05-2013, 03:55 PM
|
#28
|
Human being with feelings
Join Date: Aug 2012
Location: Finland
Posts: 2,668
|
I'll post an update soon...ish....
Because it's not completely ready yet, I post these random audio/MIDI/RPP files:
Project file (ReaSynth):
https://stash.reaper.fm/17074/Tkinter...%20example.RPP
mp3 (TTS-1 synth):
https://stash.reaper.fm/17072/Tkinter...%20example.mp3
MIDI file:
https://stash.reaper.fm/17073/Tkinter...%20example.mid
There are 3 parts in the audio/MIDI files:
1. Part
A nerve-wracking melody (Eskimo Tetratonic scale). The scale is from zappadave's "ZD-complete.reascale" file - thanks zappadave).
2. Part
1.st part is reversed (using "Flip positions" - velocities "moves" with notes), the notes are lengthened (half tempo).
3. Part
Every n'th note is lengthened and every n'th note's velocity is changed. Here's a gif from part 3:
|
|
|
07-10-2013, 01:55 PM
|
#29
|
Human being with feelings
Join Date: Aug 2012
Location: Finland
Posts: 2,668
|
Finally a new version: (currently it's not possible to save treeviews to a file)
- added editor
- undo should work now
- added "select random notes"
- added "add (arpeggio) pattern to reaper MIDI editor"
- added undo button
https://stash.reaper.fm/17136/Arpeggiator.zip
Edit. Zip file updated - Fixed: add undo point for "Add (arpeggio) pattern to reaper MIDI editor"
Last edited by spk77; 07-10-2013 at 02:07 PM.
Reason: Zip file updated - Fixed: add undo point for "Add (arpeggio) pattern to reaper MIDI editor"
|
|
|
07-10-2013, 02:46 PM
|
#30
|
Human being with feelings
Join Date: Jun 2009
Location: Earth
Posts: 1,340
|
Awesome.., can't wait to try it out.
Thank you
|
|
|
07-12-2013, 10:07 AM
|
#31
|
Human being with feelings
Join Date: Apr 2013
Location: Spain
Posts: 284
|
Hi
Spk77 a lot of thanks to your awesome update,is fascinating!!!!!
Thanks to your effort
I love the new editor function
The Arpeggiator (Tkinter) in mac does not work
In my Pc works perfect but the new function Select notes: Random for me does not work,i press the random buttom and nothing change,it suppose to select the notes in the midi editor in random form but not select nothing.
Please can you show us with a gif how works it?
-I think I will be very demanding but I need to raise it by if possible to be more comfortable:
The root note field to choose the note root where you want to apply arpeggiator´s function is nice but i think it would be faster and more comfortable to choose it by play a note in our midi keyboard and arpeggiator detect the note or if i have imported o created a midi file,i select one of their notes,for example D5 and press a buttom in arpeggiator and the root magically become D5
Yes,i am dreaming.... i think those techniques are too difficult,miracles to add to arpeggiator
oh excuse me,forget them,,, with the actual root field is nice I´m very lazy
Arpeggiator is really Amazing THANKS
|
|
|
07-12-2013, 12:53 PM
|
#32
|
Human being with feelings
Join Date: Aug 2012
Location: Finland
Posts: 2,668
|
Quote:
Originally Posted by reapertribal
Hi
Spk77 a lot of thanks to your awesome update,is fascinating!!!!!
Thanks to your effort
I love the new editor function
The Arpeggiator (Tkinter) in mac does not work
In my Pc works perfect but the new function Select notes: Random for me does not work,i press the random buttom and nothing change,it suppose to select the notes in the midi editor in random form but not select nothing.
Please can you show us with a gif how works it?
|
Hi, here's a gif:
Quote:
Originally Posted by reapertribal
-I think I will be very demanding but I need to raise it by if possible to be more comfortable:
The root note field to choose the note root where you want to apply arpeggiator´s function is nice but i think it would be faster and more comfortable to choose it by play a note in our midi keyboard and arpeggiator detect the note or if i have imported o created a midi file,i select one of their notes,for example D5 and press a buttom in arpeggiator and the root magically become D5
Yes,i am dreaming.... i think those techniques are too difficult,miracles to add to arpeggiator
oh excuse me,forget them,,, with the actual root field is nice I´m very lazy
Arpeggiator is really Amazing THANKS
|
No, it's not possible to get/listen midi messages in real-time with ReaScript (and I don't even have a midi keyboard ), but it's possible with JS - there are nice JS arpeggiators. "Set root to selected note" is possible, though.
Here's a new update:
- added: save treeviews (right click menu)
- deleted treeview items are saved to files (as backups)
Download:
https://stash.reaper.fm/17153/Arpeggiator.zip
Next I'm going to do a reascale-file parser: select (zappadave's) reascale file -> get scales and chords -> use scales to harmonize the selected notes -> ??? -> crash tkinter and reaper
Last edited by spk77; 07-12-2013 at 01:00 PM.
|
|
|
07-12-2013, 01:43 PM
|
#33
|
Human being with feelings
Join Date: Apr 2013
Location: Spain
Posts: 284
|
Quote:
Originally Posted by spk77
Hi, here's a gif:
No, it's not possible to get/listen midi messages in real-time with ReaScript (and I don't even have a midi keyboard ), but it's possible with JS - there are nice JS arpeggiators. "Set root to selected note" is possible, though.
Here's a new update:
- added: save treeviews (right click menu)
- deleted treeview items are saved to files (as backups)
Download:
https://stash.reaper.fm/17153/Arpeggiator.zip
Next I'm going to do a reascale-file parser: select (zappadave's) reascale file -> get scales and chords -> use scales to harmonize the selected notes -> ??? -> crash tkinter and reaper
|
Hi
Oh my god,you are great,reaper´s revolutionary!!!
Now works all perfect,random ok
I don,t understand for that save view as a file? and where is saved this file?
*No, it's not possible to get/listen midi messages in real-time with ReaScript (and I don't even have a midi keyboard :
- Excuse me;I expressed bad.It was not my intention to hear a sound when i pressed one note of my keyboard,it was my intention,when i press a note in my keyboard the root note of the arpeggiator become the new root
For this goal the ideal it was your description:
"Set root to selected note" FANTASTIC in addition your actual field root choice add a new buttom to call that action list "Set root to selected note" i select a note in the midi editor and ok
*Next I'm going to do a reascale-file parser: select (zappadave's) reascale file -> get scales and chords -> use scales to harmonize the selected notes
-GUAUUUUUUUUU CAN,T WAIT!!!!!!! MAGICAL!!!!!!
THANKS SPK77
|
|
|
07-12-2013, 02:14 PM
|
#34
|
Human being with feelings
Join Date: Aug 2012
Location: Finland
Posts: 2,668
|
Quote:
Originally Posted by reapertribal
- Excuse me;I expressed bad.It was not my intention to hear a sound when i pressed one note of my keyboard,it was my intention,when i press a note in my keyboard the root note of the arpeggiator become the new root
|
Yes, I understood , but I think it's not possible with reascript. You can find "Save treeviews" from the right click menu. Saving treeviews overwrites the old files (patterns.txt, chords.txt and selections.txt). Every time when a treeview item is deleted, it is saved (appended) to a file. F.ex. if an item is deleted from the Chord-view, a new line is written to "Chords_removed items.txt" (they are saved to the Arpeggiator -folder). I should probably add "Load files into treeviews" to the right click menu.
|
|
|
07-12-2013, 02:24 PM
|
#35
|
Human being with feelings
Join Date: Apr 2013
Location: Spain
Posts: 284
|
Hi
Thanks;now i understand it perfectly
Arpeggiator is a powerful tool
Best Wishes
Mario
|
|
|
07-15-2013, 07:26 AM
|
#36
|
Human being with feelings
Join Date: Jul 2013
Location: Québec
Posts: 484
|
Hi spk77 your arpeggiator look awesome but no can do. The tkwindow load but only the play button works for me. I have installed the latest sws_python.py, arpeggiator scripts and python. Any clue why it doesn't work?
Windows XP 32
Reaper 4.402
|
|
|
07-15-2013, 07:29 AM
|
#37
|
Human being with feelings
Join Date: Aug 2012
Location: Finland
Posts: 2,668
|
New version:
- load (.txt) file into treeview / save treeview as...
- added: clear treeview
- added: ReaScale files can be opened in "Patterns" tab
- added: hideable settings widget - set new note/chords length, channel and velocity
note: "Snap to grid" in the MIDI editor should be turned off. Otherwise notes/chords may get a wrong starting position.
Download:
https://stash.reaper.fm/17171/Arpeggiator.zip
|
|
|
07-15-2013, 07:44 AM
|
#38
|
Human being with feelings
Join Date: Aug 2012
Location: Finland
Posts: 2,668
|
Quote:
Originally Posted by STOP
Hi spk77 your arpeggiator look awesome but no can do. The tkwindow load but only the play button works for me. I have installed the latest sws_python.py, arpeggiator scripts and python. Any clue why it doesn't work?
Windows XP 32
Reaper 4.402
|
Hi, do you have the latest beta version of SWS extensions? Maybe you have a wrong version. Play/stop -button uses Reaper's native action. Follow the link "Beta downloads" in this Jeffos' post:
http://forum.cockos.com/showpost.php...postcount=1298 (download "v2.3.0 #22 Win32" from there)
|
|
|
07-15-2013, 08:04 AM
|
#39
|
Human being with feelings
Join Date: Jul 2013
Location: Québec
Posts: 484
|
Quote:
Originally Posted by spk77
Hi, do you have the latest beta version of SWS extensions? Maybe you have a wrong version. Play/stop -button uses Reaper's native action. Follow the link "Beta downloads" in this Jeffos' post:
http://forum.cockos.com/showpost.php...postcount=1298 (download "v2.3.0 #22 Win32" from there)
|
Gotcha! Wow! Awesome reascript, thanks spk77 ;-)
|
|
|
07-15-2013, 08:18 AM
|
#40
|
Human being with feelings
Join Date: Aug 2012
Location: Finland
Posts: 2,668
|
Quote:
Originally Posted by STOP
Gotcha! Wow! Awesome reascript, thanks spk77 ;-)
|
Thanks. It's a pity that Reaper's shortcut -keys don't work while the tkinter window is open.
|
|
|
Thread Tools |
|
Display Modes |
Linear Mode
|
Posting Rules
|
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is Off
|
|
|
All times are GMT -7. The time now is 03:33 PM.
|