MIDI Rules

MIDI Rules is a Rule-Based MIDI Processing Environment that can process (translate, map, convert, filter, trigger, route) MIDI messages. It supports multiple MIDI inputs/outputs, variables (enables state-based processing) and timed/delayed messages.

MIDI processing instructions are defined as set of rules, written in the MIDI Rule Language. MIDI Rules is a Java(tm) application and runs on almost any Java(tm) enabled platform with midi support. MIDI Rules uses JBoss Rules (a.k.a. Drools) as its Rule Engine.
The inital purpose of MIDI Rules is to build “Software MIDI adapters”, achieving full compatibility between MIDI controllers and MIDI-enabled software. In general MIDI Rules can be used for every MIDI message processing task.

MIDI Rules is currently available as a functional prototype without a graphical user interface, exception handling and rule file editor. The prototype is evaluated by the example of adapting Behringer’s B-CONTROL DEEJAY BCD2000 hardware MIDI controller and Native Instrument’s Traktor DJ software on Windows. You can join the discussion:

MIDI Rules is free and Open Source under GPL license. You can download the prototype and BCD2000/Traktor mappings.

162 Responses to “MIDI Rules”

  1. Koen Says:

    Hi, I’m a BCD-2000 owner too. I’m very impressed with what you did with jboss rules🙂. And how little code your midi-rules program actually is. It’s very creative what you did🙂. You must have used jboss rules for other things too I guess.

  2. cycokraut Says:

    Hi Koen,

    actually this is the first time I use JBoss Rules. I covered JBoss Rules only theoretically before.
    The code for the MIDI Rules prototype is little, but the rule file for the mapping is big😉 (currently 80kb with 180 rules!)

  3. Sergey Says:

    Dear friend! Thank you for your work!
    Please, help me. I wish to use BCD2000+Mixvibes. I know, that it is necessary to configure and write a file. I read syntax of parameters mixvibes. BUT how it to connect with commands BCD2000? Somebody uses BCD2000, what file at you? Help me, please

  4. cycokraut Says:

    Take a look at the BCD2000 manual (http://www.behringer.com/BCD2000/index.cfm?lang=ENG -> Downloads)

  5. Frank Says:

    Hi, this is great work, but i have one problem. if i move the crossfader to the right the a-deck is not muted… please help me

  6. The Sydrome Says:

    @ Frank, you need to assign your decks to left and right.

  7. The Sydrome Says:

    Cycokraut, could youplease build aruleif possible, to assign the master output toamidi message, also, thephones volumeto a midimessage. This is particularly helpful for those users that want to usesound cards other than the BCD internal sound device, ie Indigo dj, while still using the BCD as a controller.

  8. cycokraut Says:

    @Syndrome: The master and phones volume knobs aren’t midi controllers. BCD doesn’t send midi messages for this controls.

  9. rej Says:

    Is there any step-by-step instructions for the installation anywhere on this site? I want my BCD to work together with traktor but it seem quite hard. When i start midi-rule.bat I have to choose Midi-in and midi out, (BCD2000?) But it just goes on and counting choose midi out 2,3,4 and so on … Im stuck… Zzzz

  10. cycokraut Says:

    @rej: there’s a link ‘documentation’ on the download page.

  11. DJ Hypahh Says:

    Hey the program works fine but you cant listen to a deck anymore with headphones😦 how can i fix that ? if anyone know please tell me i would be happy then😛

  12. rej Says:

    Thank you… I suppose I got blind for a sec😛 Works Great…

    DJ Hypahh – You have to use the “Analog Input A & B” ..

  13. DJ Hypahh Says:

    how precisly then because if i press them (when i use it with tractor) i can’t pre listen with the headphones :S

  14. d-jazzy Says:

    Hi! I’m from Russia…i bought BCD this week and..you know…i collided with all those trobbles other guys used to. So I would like to say much thanks to you for solution of Traktor work using BCD-controller. Great respect

  15. Ibai Says:


    Sorry, i’m no programmer, and all this settings are driving me crazy! I feel a deep respect for you as well🙂

    I just received my BCD yesterday, and been trying to fix it for the traktor 3 since. I have searched in the phorums, installed and updated everything, carefully followed your instructions… but I have a problem when running the batch file, after setting the in&outputs:

    “Starting MIDI Rules…Exception in thread “main” java.lang.NullPointerException
    at java.io.Reader.(Unknown Source)
    at java.io.InputStreamReader.(Unknown Source)
    at com.cycosolutions.midirules.MidiAdapter.main(MidiAdapter.java:253)”

    Could this problem be solved easily, or shall i wait for the next version?

    Thanks for your work

  16. Kylie dj Says:

    Hi I am not able to speak with the microphone the signal don’t exit from the master (hower my vocal signal enter to BCD because Clip switch on when I speak). What could be the problem?
    Switch talkover on or off don’t change the situation.

  17. japr99 Says:

    I configured mi BCD2000 in B-DJ mode, in Traktor Preferences SOUNDCARD only 2 chanels and don’t work my heardphones,what is the problem, sorry for my english, Thanks

    pd, in Traktor Preferences SOUNDCARD select BCD2000 or BCD2000 ASIO ?.

  18. cycokraut Says:

    @Quadrispro: the link is dead.

  19. cycokraut Says:

    @Kylie: Sorry, I don’t have a mic. Do you get the mic working with Traktor but without MIDI Rules?

  20. frazzbass Says:


    I work on ableton with more channels. I try to assigned the headphone to listen a channel before playing (like traktor, but on ableton) and I can’t. In the setup of bcd I can only choose 1-2 rca out and 3-4 headphones out. I can’t listen on my headphone the track come before so I can’t mix on ableton. somebody know the answer for this problem?

    Thank you for your help.

  21. p0d Says:

    Installed with latest MIDI Rules self exe.
    Running latest Java Runtime Platform 5 10
    Am receiving this error after inputting ins and outs.

    “Starting MIDI Rules…Exception in thread “main” java.lang.NoClassDefFoundError:
    at org.drools.semantics.java.RuleBuilder.(Unknown Source)
    at org.drools.compiler.PackageBuilder.addRule(Unknown Source)
    at org.drools.compiler.PackageBuilder.addPackage(Unknown Source)
    at org.drools.compiler.PackageBuilder.addPackageFromDrl(Unknown Source)
    at com.cycosolutions.midirules.MidiAdapter.main(MidiAdapter.java:338)”

  22. cycokraut Says:

    1. Try to start MIDI-Rules.exe directly out of the MIDI Rules installation folder (not from the shortcut in the program group)
    2. Make sure that the following files exist in the midi rules installation folder:
    – lib\antlr-2.7.6.jar
    – lib\antlr-3.0ea8.jar
    – lib\stringtemplate-2.3b6.jar

  23. p0d Says:

    Sorry no improvement. Checked the above all were correct.
    Thanks for your quick response.
    I recall something similar happened in previous release.
    Error with MIDI-Rules-Prototype_20060826

    “Starting MIDI Rules…Exception in thread “main” java.lang.ArrayIndexOutOfBounds
    Exception: 0
    at com.cycosolutions.midirules.MidiAdapter.main(MidiAdapter.java:253)”

  24. cycokraut Says:

    1. download the file http://www.cycosolutions.com/midi-rules/MIDI-Rules_Prototype_2006-12-25/MIDI-Rules.bat and put it in the MIDI Rules installation folder
    2. execute MIDI-Rules.bat in the installation folder

    edit: use right click -> save as… on the link

  25. wbskates Says:

    I’m using BCD2000 with Traktor. Thanks for your wonderful app.! I edited your (first) .tks file but can’t get the scratch to work to my liking. I would prefer more sensitivity. I tried messing with the midi settings within the traktor app., but even with both settings at 100%, I’ve maxed out on the speed. Is there another way to get more movement while scratching with the jog wheel? Also, can I adjust the time increment to release midi control of the deck and the acceleration back to correct speed? I’ve tried the trial version of Virtual DJ 4.1r2, And like the native mapping with the Ccd2000 as far as the scratch feature is concerned. By the way, I’m not much of a scratch DJ, just an old school DJ who uses the scratch feature to cue.

  26. cycokraut Says:

    @wbskates: It’s possible to send 2 midi messages to traktor for every midi message received from BCD2000’s jog wheels. You can easily change this in the .drl (using a text editor) on your own: just search for the 4 rules with keywords “jog wheel scratch” and duplicate the “send short message … command : 176 …”:
    For instance, change

    rule "Left jog wheel back (Scratch)"
    Receive short message with channel : 1, command : 176, data1 : 19, data2 : 64
    Variable "Scratch left" is equal to 1
    Send short message to midi out 1 with channel : 1, command : 144, data1 : 49, data2 : 127 # scratch on
    Send short message to midi out 1 with channel : 1, command : 176, data1 : 26, data2 : 1
    Send short message "Scratch left off" in 25ms to midi out 1 with channel : 1, command : 144, data1 : 49, data2 : 0
    Consume received message


    rule "Left jog wheel back (Scratch)"
    Receive short message with channel : 1, command : 176, data1 : 19, data2 : 64
    Variable "Scratch left" is equal to 1
    Send short message to midi out 1 with channel : 1, command : 144, data1 : 49, data2 : 127 # scratch on
    Send short message to midi out 1 with channel : 1, command : 176, data1 : 26, data2 : 1
    Send short message to midi out 1 with channel : 1, command : 176, data1 : 26, data2 : 1
    Send short message "Scratch left off" in 25ms to midi out 1 with channel : 1, command : 144, data1 : 49, data2 : 0
    Consume received message

    I remember that I already test this out. (I think the result was a high delay in while scratching)

  27. wbskates Says:

    Thanks, I will try it out.

  28. ManuDj Says:

    Where can i find a translator or instructions to make my own rules? i think this is very easy editing the .drl file but i don´t know the commands and actions ej: command 144 is analog input? or is pitch bend? etc… Thanks.

  29. cycokraut Says:

    @ManuDj: information about the midi messages send by the BCD can be found in the manual which is available at http://www.behringer.com/BCD2000/index.cfm?lang=ENG
    (btw: command 144 stands for Note messages and command 176 for Control Change messages).
    Regarding the MIDI Rules language: I have to write the the language reference and a tutorial.

  30. ManuDj Says:

    Thanks for your fast response to my ask but i don´t find any information about midi messages in the bcd2000 manual. Perhaps behringer update the web and quit this information. In all cases thank you for all and for the very best solution for work with bcd2000.

  31. cycokraut Says:

    @ManuDj: see chapter 6. MIDI CONTROL (page 13 ff)

  32. ManuDj Says:

    Thankyou very much. i didn´t find this information because my manual was the spanish manual and this information not appears, but i look in the english manual as you sayed me and i foun in the exactly page 13. thank you. when i have a new map with analog input function i post this in this page. thanks a lot another time. thannks, thanks.

  33. ManuDj Says:

    i´m another time here. i don´t have any method to analog input A operate. I tried the command “Send short message to midi out 2 with channel : 1 , command : 144 , data1 : 35 , data2 : 127 # on” and all that i think can operate but not. i put the led on with the button but no sound on output of bcd2000. i have the last driver and the last mid rules prototipe. i make all other functions on and off and leds perfect, but no sound on turntable. I probe with the b-dj software and no problem, but with traktor 2.5 there is no possible. i agree a orientation for this problem. Thanks a lot.

  34. cycokraut Says:

    @ManuDj: T
    he anlog input LEDs are just plain LEDs that have nothing to do with the functionality behind “switch deck control to analog input”. You have to provide this functionality. For Traktor I think this means that you have to switch to another deck which does not play a file but is rather configured to take the audio signal from on of the BCD audio inputs. You can configure deck C and D in Traktor to use the 2 analog inputs of the BCD2000, if I’m right.

    The next thing is that you need 4 decks support that let you switch between your “file decks” and your “analog input decks” in Traktor.

  35. ManuDJ Says:

    Thanks a lot. in Traktor 2.5 seems is not possible because only support two decks. I have now already installed traktor 3 (or 3.2) and it have a switch upper the volume in the main decks that lets swith between mp3 and analog input. This is the solution for me, install two softwares. Traktor 2.5 for all functions and 3.2 for analog inputs. thanks another time for the great work you make.

  36. Arno Says:

    Anyone has the same problem as me??
    Can’t install Midi Yoke in Vista; what to do??

  37. cycokraut Says:

    @Arno: Try Maple Virtual Midi Cable

  38. Arno Says:

    thanks cycokraut , this works excellent!

  39. Hannibal Says:

    Your stuff works fine so far, but still one problem left: When pushing the Crossfader to DECK B, DECK A is not muted at all…the other way round (CF to DECK A -> DECK B is mute) works fine…any ideas ?

    BTW: Why do I only have to channels in audio setup when I use for example your AM Jogwheel fix ?

  40. cycokraut Says:

    @Hannibal: this has nothing to do with MIDI Rules. You have to configure your crossfader right: look in Traktor for the control with [A|B|C|D], there you can configure your crossfader (A-B).

  41. Sonam Says:

    Question: I run mac g4 laptop with reaktor, live etc.. If I buy a bcd2000 (which i would like) , can i relatively easily use as midi controller with or without your app in these programs?

    i figure if its gonna be a head ache, might as well buy a diff midi controller.

    many thanks.

  42. ManuDJ Says:

    There is no place to post files, but i make a rules for me that i can submit who need.
    The modifications are for traktor 2.6 and are:
    Basic functions the same of cycokraut (play,cue,cuts,tones,etc)
    functions assigned with back to top pressed i delete. Back to top button for me is assignet to mute.
    Button FX A assigned to aux monitor for speakerphone listen aux input.
    Talkover button have two function, first focus A deck because if not, talk doesn´t work.
    Second function (at same toggle) is Talk On, and a variable for slider button on.
    This variable changes the state of the Deck A pitch control and converts to a aux volume (only when talk on is set to 1).
    This operation is to make the sound of a Phono is set as another input of the bcd2000, and let me play phonos and make scratch with vinyl record.
    If Talk toggles off then the pitch button returns to pitch slider state.
    Its for traktor 2.6, because traktor 2.5 doesn´t have analog input (or record input), and 2.6 yes. Thanks a lot to cycokraut for instructions to make this rules. bye.

  43. DJ SMAN Says:

    Hey.. has there been any further update with regards to mic. I’m having the same problem as Kylie dj

  44. repton Says:

    Choose Midi Out 3: 0
    Starting MIDI Rules…Exception in thread “main” java.io.FileNotFoundException
    C:\Programmi\Midi Rules\script\run\BCD2000-Traktor3 – Cycokrauts Extended Flav
    A.drl (The system cannot find the path specified)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.(Unknown Source)
    at java.io.FileInputStream.(Unknown Source)
    at com.cycosolutions.midirules.MidiAdapter.main(MidiAdapter.java:253)

    and not working bcd2000 with traktor3?please help me?

  45. cycokraut Says:

    @repton: which MIDI Rules version do you use? It seems that you are not using the latest version from my download page.

  46. repton Says: if this version old one where i can find new version,thanks

  47. cycokraut Says:

    I don’t know a version called Go the the download page on this site and install the listed software.
    I can’t give any support for software from other parties. (There are some repackaged version of MIDI Rules out there.)

  48. Vagabound Says:

    Hi ! Thanx for this excellent Programm !
    I just wonder if there are any command line parameter I don´t know of in order to speed up the set up. So I won´t have to type all those numbers…I´m just too lazy I guess..

    Thanx a Lot !!

  49. Vagabound Says:

    ah ! c´mon …there must be some sorta cheat code…….right ??

  50. Lee Says:

    I’m having major headaches running midi rules with bcd2000. Everytime I start I get this error: http://i14.photobucket.com/albums/a320/methylene/screen.jpg

    any help would be much appreciated.

  51. cycokraut Says:

    @Lee: As written in the documentation, you have to choose the BCD-2000 for midi out 2 and for midi out 3.
    Btw.: This exception is handled in the next release.

  52. Lee Says:

    Thanks mate. Need to read properly methinks :p

  53. Lee Says:

    Nice one working a treat, will teach me to read in future :p good job was giving up hope on this controller :p

  54. vic242 Says:

    Thanks for all your hard work, this works great !!

  55. gpanos Says:

    Hey Cycokraut,
    I’d like to ask you some questions:

    1) Is there any possibility to make jog wheels while in seek mode to display sounds when I move them? Just like CDJs or Vinyls?
    I saw a video in youtube for Hercules MP3 MK2 which has this function.

    2) If I buy another controller (XP10) can I use them simultaneously with BCD2000? I want 2 x XP10 as Deck controllers and BCD2000 as a mixer controller. In this case is it possible to load the tks file that will be provided by XP10 or configure my XP10 while BCD2000 (with midi rules) is active?
    I thought to merge your tks file with the XP10 tks file using wordpad.
    Will this work?

  56. richj Says:

    This is fantastic – thank you! Just got my BCD this morning and was very unimpressed with the bundled software – installed MidiRules and the Traktor 3.0 template and was up and running very quickly!

    Thanks again – I’ve bookmarked you so I can keep up to date!


  57. Johnny Says:

    Cycokraut, please help!

    Sorry, my english not too good, because i will try write you a problem as well as i can. I followed your instructions and i can synchronized trator 3 and BCD2000. I used Midiyoke, MapleVMCv356, i was try a lot BCD2000/traktor3 mapping file and every time i had a same problem: EQ Mid don’t do anything and all kill bottoms too. Low, High and Gain working well, but the Mid don’t working. (in virtual dj 4 every bottom and EQ working well) If i spinning a jog very-very fast, the music speed a litle bit changed only. I dont know where can i change the jog sensitive. The other bottoms and EQ-s and FX-control are work fine. I was try a lot of variation, but i can’t find the problem, please help me. Thank!🙂

  58. Johnny Says:


    I found the problem…. Only the jog wheels don’t work good. I think my laptop don’t enough for tratkor. (1,6 Ghz celeron, 512 ram)

  59. Steve_LSP Says:

    Hello Master!
    Thanks a lot for your work.
    I have one question.
    I use BCD2000 with your flavours and Original Traktor DJ studio 2.6
    On Native forum there are a lot of topics regarding the use of the MICROPHONE during the use of BCD as controller AND ASIO audio interface with TRAKTOR3.
    But i have not seen any topics about traktor 2.6 and MIC
    Does it mean that There is no use of the MIC even if the internal hardware works (LED clip is on)?

    Have you ever experienced a horrible 5seconds stop of the music in a aleatoric way during the use of traktor and BCD2000?
    I have player during a wedding and there was every 5 mins
    a whole freeze of all the PGM and then the things returnes normally.

    I have used several PC three and seen that the problem was present in anyone of them (no antivirus, no wlan, no eMule,,,)

    It would br very appreciate if you could help me a little.

    Best regards and keep on doing this GREAT thing.


  60. Joe Says:

    Hey, i dont know if im just being stupid here, but what/where is this “top to back” button?

  61. Joe Says:

    correction, “back to top” button =/

  62. Joe Says:

    I have the BCD3000, what button replaces it?

  63. DJ Caloy Says:

    Dear Cycokraut,

    I already have a BCD3000 and a traktor studio DJ pro. 4 decks. can the BCD3000 control all decks at the same time? if yes how?

    DJ Carl

  64. JonasDj Says:

    Hi Cyco, i´ve been using Midi Rules 100% on my desktop. But i´ve already tried to install it in two diferente laptops, and it gives always the same error, The error that was already reported by other users here in the forum related to java… but for it always ends with the messege: …processor.java:358) Can u help me with this one, i dont know what else to do, i´ve already tried all the solutions u posted here… The only main diference between the desktop and the laptops, is that in the desktop, i´ve Java(TM) and also Java SE Runtime Enviroment, but i dont think this can be the reason…

    Thanks in advanced
    and congrats for this wonderfulll software…

  65. JonasDj Says:

    Ohh, and i also loosed my installetion cd, so in the laptops i´m only installing the new drvers from behringer… can this be the problem?

  66. JonasDj Says:

    I found the instalation cd, but after install the old driver, and the the last one, i get the same result😦
    “Choose midi out 3: 0
    Starting MIDI Rules…Exception in thread “main” java.lang.NoClassDefFoundError:
    at org.apache.commons.jci.compilers.EclipseJavaCompiler.compile(EclipseJ
    at org.drools.compiler.PackageBuilder.compileAll(Unknown Source)
    at org.drools.compiler.PackageBuilder.addPackage(Unknown Source)
    at org.drools.compiler.PackageBuilder.addPackageFromDrl(Unknown Source)
    at com.cycosolutions.midirules.Processor.main(Processor.java:384)”

  67. cycokraut Says:

    @JonasDJ: There’s something wrong with your MIDI Rules installation. Please reinstall MIDI Rules. If you have still problems, please tell me if you’ve downloaded the MIDI Rules installer or zip package + OS version + Java Runtime Version.

  68. JonasDj Says:

    i´ve donwload the Midi Rules Installer… in rar format, but it was the same i have on my desktop, but has i had problems with the notebooks, i´ve donwload it again from your site, with the same results…😦
    By the way, thanks for your fast reply…

  69. JonasDj Says:

    Uaauu, problem solved, i tried now with the zip packaged and it worked…, maybe theres som problem with the installer…
    Thank you very much again

  70. cycokraut Says:

    @JonasDJ: Good to here that the issue is solved.
    Where did you get the MIDI Rules Installer in .rar format? There’s only an installer .exe and .zip package available on sourceforge….

  71. JonasDj Says:

    It was not in rar format, my mistake sorry… by the way is the issue of the installer alredy solved?


  72. cycokraut Says:

    @Jonas: The installer has been download over 2000 times. I think you are the first one who reported problems with it. Is anyone else out there who has the same problem?

  73. DJ GourmanD Says:

    Thanks for your child its really great ! It took a while to set up but it working great . I`d like to know how can i switch the sensitive of jog wheels , i need to increase speed for correcting the track while it playing, think it possible . Thanks for your trouble !

  74. cycokraut Says:

    @DJ GourmanD: You can adjust the sensitivity in Traktor’s Midi Setup. Look for “pitch bend” and make sure that you change the settings for the jog wheels and not for the pitch bend buttons.

  75. Martin Says:

    Hi, this is a really great tool. It would be perfect to connect the new Denon DN-HC 4500 with Traktor but it will need a second Midi Input. Will MDI rules get in near future a second MIDI in?


  76. cycokraut Says:

    @Martin: MIDI Rules will support multiple midi inputs, but I cannot tell you when. In the meanwhile you can run 2 instances of MIDI Rules and select different MIDI inputs for each instance.
    Do you plan to write a MIDI Rules mapping for your DN-HC 4500?

  77. Shenbu Says:

    HEllo People,
    Those of you looking for the perfect tweak between Traktor 3 & BCD3000 with almost no flaws contact me on my email . There is a different combination of Cycokraut process with another file custom edited which works perfect!.. Cycokraut I will soon put up the procedure for ya and keep up the good work

  78. Shenbu Says:

    think it solves the pitch problems and irregular LEDs too!

  79. Martin Says:

    Hi, I´ve already started to write a mapping for the DN-HD 4500, but I have problems with only the one input. I tried to fix it with the multiple Input of Midi Yoke Device but the system crashed. (I think the cause is a Midi Feedback)

    It looked like this

    ——- ————
    |DN-HC Out|—-| | | |—-|Traktor In|
    |Traktor Out|—| | | |—-|DN-HC In|
    ——– ————-

    I also dislike to work with two virtual Midi Cables for this solution.

    With to Inputs in Midi Rules I would connect the Traktor In and Out with Midi Yoke 1 and 2 and would open these both with Midi Rules and also the DN-HC 4500 devices. This will be the simplest solution in my opinion.

    I only need one instance of Midi Rules.


  80. cycokraut Says:

    @Martin: I just notice that Traktor 3.3 can send midi out, that’s fantastic! This feature definitely raises the need for multi MIDI inputs in MIDI Rules, even for just one controller.

  81. cycokraut Says:

    @Shenbu: That sounds great. I’m thinking about to ask Behringer if I can get a developer sample BCD 3000 device. Since I only own a BCD2000 I cannot follow all the BCD3000 issues reported on this site.

  82. Martin Says:

    @cycokraut: Yes please, fast… 8-))

  83. Shenbu Says:


    -Ye Cycokraut …. i know it must be difficult to imagine mapping for bcd 3000… But cyco kraut just take the xml file and tks file from the links


    i posted it matches perfectly for our bcd 3000with almost every single button… i tested specifically for my bcd3000

    So it should be a blue print for you… giving you an idea about the value range and routing . The only problem is the search buttons are way too fast [ i mean in a track u go to a different part pressing search button right?] i mean its not like in your cycokraut files where the search is smooth without actually skipping hte tracks…i think that is the only thing that needs to be fixed… let me know if u can do it by again editing the files🙂 thanks a lot bud

  84. Martin Says:

    Hi Cyco!
    I´m on the way to get Midirules to work with Traktor and the HC4500. I´m bulding a multilayer thing, but I have problems with this expression:

    rule “Fader Mode Deck 1 – 1”
    Receive short message with channel : 1 , command : 224 , data1 : received_message_data1 , data2 : received_message_data2
    Variable “Jog Mode Deck 1” is equal to 1
    Send short message to midi out 1 with channel : 1 , command : 176 , data1 : received_message_data1 , data2 : received_message_data2
    Consume received message

    I think it´s only a small mistake I´ve made. Please help me.

  85. cycokraut Says:

    You don’t need to specify the received_message_*variables, they exist implicit when you use the “Receive short message” expression like this:

    Receive short message # now the received_message_* are visible
    channel is equal to 1
    command is equal to 176
    Send short message to midi out 1 with channel : 1 , command : 176 , data1 : received_message_data1 , data2 : received_message_data2
    Consume received message

    Make sure that you have 3 lines in the when clause.

  86. cycokraut Says:

    MIDI Rules Prototype with support for multi MIDI inputs is now available.

  87. Martin Says:

    I´m about to release my rule set. I´ve finished allready a little bit complicated Version with aditional Midi Cabel an Midi Yoke Ports with disabled feedback detection but with the dedicated In´s in Midi Rules it will be more professionel.
    I modified my old rule set but get only errors. I would like to send you the rule set, so you could give me a hint to fix it. Please contact me by mail.

    The rule set might be interesting. The Jogs and the Faders are able to do different things. You can switch them with the button´s Jog Mode and Range and get also an optical feedback by different lights. Also the Traktor Midi feddback is used. There is a normal Shift Mode for almost every button and also a Shift Mode for the Loop section.

  88. Endy Says:

    Hi Cyco,

    Just wondering about the time/timer based part of midi-rules, are there any practical examples?

  89. Cyco Says:


    I have developed something similar, but different.
    My project takes a controller and translates the input to emulate a mackie control universal.
    I used synthedit to make it, however, that is not platform independent.
    Please email me, I am very interested in porting to java.

  90. Kip Says:

    sorry i got the name wrong there in the last post…

  91. Witorio Says:

    Hi mate, I´ve just bought a new BCD3000 using virtual dj on vista notebook…I have too many problems…probably like most of the people here😉 …I can call my self a beginner in this midi rules configuration and staf. I dont even know how to install some midi rule or where to put that downloaded file, then I have problem with a big delay, phones mix knob is just increasing volume and I just dont know what to do… I would be really happy if you could help me…thank you very much🙂

  92. StevoFFM Says:

    I am wondering why the lights of the bcd don’t sync when triggering an action in traktor. Is that a technical restriction of midi rules ? Why do I map the BCD as second Midi-Out device then? Isn’t this the back channel from traktor to bcd, to make the lights work?

    I’d be thankfull for more information.

    Cheers Stevo

  93. cycokraut Says:

    Traktor’s MIDI feedback is a relative new feature and I will use it in the near future. Therefore I will total rewrite the mapping and also introduce some new features in MIDI Rules (message tagging/labeling, template messages).
    The back channel to the BCD is only between MIDI Rules and the BCD.

  94. StevoFFM Says:

    Ah thanks for the information. Good to know that you’re working on it. Good look to you to get the whole thing refactored. I can imagine that this is not just trivial programming, hope NI provides you at least with documentation😉

    Cheers Stevo

    Ps. I don’t understand why neither NI nor Behringer are able to get this thing to work. Or may be they don’t want to to it. Behringer should release a new driver… Well thats the way it is.

    PPs. Good that there are people like you that are comitted and make other users happy, by spending freetime with creating such a tool. Behringer an NI owe you big! They are supposed to do it. They should pay you!

  95. angelnar87 Says:

    DUDE!!! this application rocks.
    You deserve a lot of credit my friend. can’t imagine what does it feel to be you..

    you did an awesome job. Everything works perfect.
    Many thanks…

  96. oquela Says:

    Hi….New here and so far this place has some useful tools! Thanks for all the hard work.

    I just rec’d my BCD3000 (it came w/traktor 3 LE) plus I’ve purchased the upgrade to full Traktor 3, but can’t install on either of my computers because they’re too slow/old.

    I still own traktor 2.6 (and use it on my Mac and PC). Are there any known tks files for the bcd3000 and traktor 2? would definitely like to use this combo on my mac and pc.

    Thanks again!

  97. Lawrence Says:

    Hey Cyco
    I owned a bcd and your help made it work well but I couldn’t get over the plastic feel and have swithced (I hope up) to the vestax vci 100. You seem to have your pulse on the midi world do you or do you know of anyone working on some mappings? thanks

  98. cycokraut Says:

    @Lawrence: Good choice. Vestax VCI 100 seems to be one best professional Midi DJ controllers. I don’t know who’s working on mappings, maybe you want to…😉

  99. salsarik Says:

    hi cycokraut

    i have a question
    i use traktor 3 with bcd 3000 and BCD3000 – Traktor3 cycokrauts-mb4guns flavor (Niek rmx).drl

    i have audiophile 2496 as sound card.
    please explain how to setup my 2496 as master out and bcd 3000 as the monitor.
    cause when i listen throu my 2496 i dont have the option to choose the bcd 3000 as the monitor (for my headphones).

  100. cycokraut Says:

    @salsarik: You can only choose one audio device in Traktor. You can join a couple of audio device to one virtual device with the software “asiox”. Unfortunatelly, the asiox is rare available, maybe you should try to find it via e.g. emule.

  101. salsarik Says:

    Thank you very much

  102. dani Says:

    thanks for sharing cycokraut. theres just one thing i wanted to ask you,i just wanted to change the rule for when i press the “on air” button (BCD2000) i can only use the left jog wheel because it has the same “message” has the right(CC96), how could i fix this? I want to use this button for the “loops”,like the “phones split” is for the “browser”….
    ex:”on air” pressed;
    left jog wheel: back-”loop:2″ ; forward-”loopx2″;
    right jog wheel:back-”loop”
    HELP me please….
    thank you

  103. cycokraut Says:

    @dani: first, you should download the manual of your controller (BCD ?0000). It contains a section where all midi messages that the controller can send out are defined. With these message definitions it is easy to find corresponding rule the .drl midi rules file using a smart text editor.
    To introduce a stateful behaviour to the jog wheels to use it for loop functions (which, I think, is a good idea), you should map the state the same variable that I used for the navigation mode. Why? Of course you can introduce a new variable “loop mode” and use this variable in your new rules’ when clause. But what if you have activate the navigation mode as well as the “loop mode”? Both rules will fire each time you spin the jog wheel. Just introduce a new encoding value for your loop mode e.g. “2″ or “loop mode” (I ‘ve forgotten if it was a number or text variable…).

  104. DJ_NC Says:


    Thanks for making N sharing a great tool, i’ve got some questions too if u don’t mind helping me out,
    when i start installing midirule it’s asking for more than 1 midi input port numbers, maybe im soo stupid i can’t get wot u’ve said, or this isn’t working on my laptop but per your setup guide it should ask the port number for ones then goes in to output list when u enter midi input #1: 5 ?
    what do u think is making this problem ?

  105. cycokraut Says:

    @DJ_NC: the installation instruction is based on an older version of midi rules without support for multiple midi inputs. Just do not select any addtional midi inputs.

  106. DJ_NC Says:


    It’s all working now, Thanks a lot ….

  107. Jogito Says:


    can i use midirules with virtual dj 5?

    i own a bcd3000 and want to build my own “midi rules” file for it to use with vdj5, is this possible ?

    also, when i use the “native” support of vdj5 with my bcd3000, the “sync” led’s light up on every beat – this is a cool feature!!! how can i do that with midirules ?

    thanks!!! midi rules the world!!!!! (-!

  108. vyt Says:

    hey there,

    Which button goes instead of “back to top” in BCD 3000?

  109. YoraY Says:

    hello cycokraut, actually i don’t realy understand the meaning of all the midi rules im feeling a bit dumb.. i know that native instrument giving a great setup for tracktor 3.3 and it works nicely – and some stuff i wanted to change for myself was pretty easy to set.

    my question is: is there a possibility to guide the bcd 3000 do the known feature “regret” of pioneer – when i push “cue” and play the song then instead of living it and the song back to the start point i can regret it by pressing “play” like here:


    and please if you can demonstrate by pictures, videos the magic! of midi rules – the hole language thing… it will be wonderfull cause right now i can’t understand the benefit of it.

  110. djcool Says:

    hello cycokraut, im working to make working M-audio xponent with traktor dj 2.6 (led support) .Has been blinking led support added on latest midi rules? Which is the command to do it so?

  111. Rodrigo Says:

    Hello from Portugal Cyco!
    Great job you have been done, mate.

    I just toke a BCD2000 from ebay but coming from Germany very bad packed arrived with the top upper knobs pushed in. I opened the device and repair that but Master Output Volume knob it’s really injuried and needs to be all open to don’t give interfrences.
    I am working with Traktor 3.2 and your Midirules. Everything seems to work well but i only have Master Output on channel right.
    Please, can you tell me if it is from any posible bad configuration or have nothing related with that and the problem seems to be from the knob injured that doesn’t give the left output?

    thanks a lot

  112. Massimo Says:

    Hi Cyco, I’m Max, Ive a problem with the configuration of BCD2000-TRAKTOR 3.
    When i choose in midi rules the parameter of midi out 3 “none”, there is the follow problem :
    Starting midi rules….exception in thread “main” java.lang.nullpointerexception
    at org.drools.compiler.packagebuilder.validate package name (Unknown source)
    at org.drools.compiler.packagebuilder.addpackage (Unknown source)
    at org.drools.compiler.packagebuilder.addpackagefromDrl (Unknown source)
    at com.cycosolutions.midirules.processor.main(Processor.Java:384)

    Cuold you help me ?
    Best regards Massimo

  113. cycokraut Says:

    @Massimo: Your drl file seems to be invalid. Please report the bug to the author of the drl file.

  114. andre moram Says:

    HI ! i have a gemini ps02-usb mixer that is not working as i would like it to be because the mixer is working only in one channel with traktor dj ( and that mixer has 3 channels!!)
    …do you have a solutiion ? will the midi rules help me ?

    thanks for the attention !
    best regards,

  115. nosoygringo Says:

    Hi, and respect for your spending time making midirules!

    I now can use my bcd3000 with traktor 3.3 (it works perfect!) – yet I would like to add my other mixer to my setup too, a faderfox dj1… Is this possible when using midirules? I cant figure out how, since I only get to choose 1 midi input during the dialogue in midirules.

  116. kofm Says:

    First of all, many thanks for your work!

    I want to use a BCD2000 and a BCD3000 in the same setup. How can i change one of the .drl files to send all MIDI signals to channel 2 instead of channel 1?
    Thanks in advance for your help!

  117. cycokraut Says:

    There are some ways how you can do that:

    1. Open the DRL file in a text editor (e.g. Notepad++) and search for all messsage sending actions. For instance you find “Send short message in 1000ms to midi out 2 with channel : 1 , command : 176 , data1 : 24 , data2 : 127”. Then you replace “channel : 1” with “channel : 2”.

    2. Same as in 1., but instead of hard-coding the outgoing channel to 2, you can introduce a variable, e.g. “ch_out” in the “Initaliziation” rule and use this variable in every sending action. Advantage: Easy to change/configure (maybe you want to use a third device same days…)

    3. Options 1. and 2. are little bit time-consuming. There’s the option to chain another MIDI Rules instance between the one you want to use with your second device and traktor. This instance need just one rule, that transform the channel of any message from 1 to 2. Very little work.
    The rule is:

    rule “transform channel from 1 to 2”
    Receive short message
    channel is equal to 1
    Send short message to midi out 1 with channel : 2 , command : received_message_command , data1 : received_message_data1 , data2 : received_message_data2

    (todo: link to download the complete file)

    The configuration is a little bit confusion: you have to use a additional virtual midi port…

    Edit: WARING: For option 1 and 2: you must only change sending actions to midi out 1 (that’s the one that goes to traktor). The example above is wrong: You should not change message to midi out 2 (that’ the bcd feedback)

  118. Behringer BCD2000 - Seite 19 - DJ - Deejayforum.de Says:

    […] AW: Behringer BCD2000 Schau dich mal auf dieser Seite hier um… […]

  119. Roman Says:


    I think this is the same question as the previous ones but since i dont really understand the answers i’ll ask again.

    I have a hercules dj console RMX and an oxygen 8 keyboard and i would like to use both of them in traktor 3. but the numbers of some of the contollers on the oxygen correspond to the numbers on the controllers of tne herc. RMX. so when i get unwanted duplicate controls. i tried switching to channel 2 in the traktor menu for the controllers i want to control with oxygen. but that doesnt seem to work. which leads to believe im not doing something right.

    can u please tell me how to achieve what im trying to do, but in simple terms cause my midi knowledge is not up to par. thanx in advance.


  120. Jon Says:

    Question: Followed the documentation for BCD2000 and Traktor 3 and MIDI rules… when I go through the MIDI rules setup it tells me that there is an exception in thread “main” and that the device is already in use.

    Any help is appreciated.

  121. Jon Says:

    Nevermind I’m stupid…still working on it…looks promising.

  122. Dj Alvarez Says:

    bien…tengo todo el software instalado con mi bcd2000 y midi rules + traktor 3.3 .,todo funciona bien …pero pasado el tiempo se congela el systema y ya nada funciona .peor aun si muevo los faders de volumen rapido se congela inmediatamente . Aveces solo me quedo sin audio o simplemente me quedo sin midi . Hace 1 año que tengo la bcd 2000 y aun no puedo hacerla andar sin problemas ., pense que el midi rules era la solucion ..en realidad creo que lo malo de todo esto es la misma bcd 2000

  123. stocki Says:


    Its possible to see midirules debug ?

    i loosing my connection between the bcd and traktor when i change the position of the faders very fast.

    exists a debug version of midirules or something like that ?
    or have anybody an idea why i loosing my connection ?

    thx !

  124. cybalive Says:

    Hi Cycokraut
    First up .. a big Thankyou for your excellent work.
    I have been running Traktor 3,2,2 with a BCD 2000 using your old midi rules and Maple. No Problems at all …
    However I have just bought a new laptop that runs Vista 64bit … Real Pain!! I can’t dual boot XP as the drivers are not available for the hardware.
    The problem is:
    Maple does not support Vista 64
    BCD2000 drivers do not support Vista 64

    Is there a way round this problem??
    Would Virtual Audio Cable v409 be a good replacement for Maple?
    Is there any chance that some one out there would write the Vista driver for the BCD2000


  125. Rockum Says:

    I think the MIDI RULES software is very powerful and having only the BCD2000 rules set available is not really showcasing it’s potential. I would love to write some useful rule sets but I can’t find any documentation and the two rules sets I could find online were pretty advanced to serve as starting points in learning how they work.

    Could you post some simpler examples here? I would love to see/know…

    How would I merge two incoming inputs and pass them to a single output?

    Are there any wildcards? For example, could I have all incoming channels set to a single channel?

    Is there a way to set the midi channels and have them saved rather than selected each run?

    Thanks so much. I look forward to seeing this tool grow in usefulness and popularity.

  126. seloni Says:

    Is it possible, and do you know of any way to get 2 BCD2000s working simultaneously to utilize the 4 decks of Traktor? And HOW?

    The way I see it if you don’t know, nobody will, but the demand and market here is MASSIVE if you could make it work. This again is a milestone in the progressive movement of DJism, and whoever bridges this for the masses, directly facilitates change to the music output over the whole world. This is milestone in history, because of the entry level costs.

    Someone said it WAS possible :


    But nobody has pioneered it yet.

    thanks for all you help,


    • cycokraut Says:

      @seloni: It is possible to use two BCDs simultaneously. To distinguish the BCDs in Traktor, one BCD has to use a different midi channel (as fare as I know Traktor doesn’t care on which midi interface it receives a midi message so this is not an discrimination option. Maybe this has changed it Traktor Pro).
      A good starting point is to connect one bcd directly to Traktor. For the other interface you first transform all midi message from channel 1 (the default channel the bcd sends) to e.g. channel 2. You can use MIDI Rules to do this. Just download this simple midi rules file http://www.cycosolutions.com/midi-rules/tranform-channel-1-to-2.drl and load it in Midi Rules. As the one-and-only midi input you choose your second BCD and a virtual midi port #X as the one-and-only midi output (you have to install maple virtual midi caple on windows, see the midi rules docu for virtual midi ports). Then you select this virtual midi port #X in Traktor as a midi interface input. You should now have your first BCD and the virtual midi port #X (which is your channel-transformed second BCD) selected as midi inputs in Traktor, each sending on a different channel (1 and 2). You can know use the midi learn functionality of Traktor (make sure you specify the midi channel !) to assign different functions for each BCDs.
      Let me know if it works for you.

      • kofm Says:

        Yeah, this definitely works. (Thanks!!)

        But.. what i’m not able to do is using cycokraut-mb4guns drl settings sending all messages on channel (eg.) 3 … I tried to use your rule to transform channels and it works for faders and knobs, but some buttons and rotary controls don’t! Why? I also tried to change “to midi out 2 with channel : 1” to “to midi out 2 with channel : 2” with text editor but it doesn’t work, too.

        Thanks again for you awesome work and support🙂

  127. Braulio Says:

    Hello To All!
    Thank you cycokraut for this so big contribution. I have a problem with traktor 3 and my bcd 2000. When I open the traktor and go to midi interface, there does not appear Maple Midi In: Port 1, and I cannot select it, only appears me the bcd2000. What can i do? Help me please!! For 4 months I cannot use my bcd!! Thank you!

  128. cycokraut Says:

    @Braulio: Did you install “Maple Virtual Midi Cable'”? (If yes, re-install it). Can you select a Virtual Midi port in Midi Rules?

  129. Braulio Says:

    Helllo Again!
    Yes Cycokraut, i forget it!! But i already did it. Everything works except the jog wheel, when I make them turn they go backward very rapidly and I cannot do anything more. help me please!! I dont know another page where i could find a solution to this problem!!
    Thanks! From Perú!

  130. Braulio Says:

    PLEASE!!!! Someone help me!! Everything works except the $#$%& Jog wheel!

  131. cycokraut Says:

    @Braulio: I cannot determine your issue in detail. What I would do: 1. Do a complete reinstall from scratch of all midi rules, BCD, Traktor related things. Make sure you follow the install instructions step-by-step. 2. If this does’t work out, reset the midi setup in Traktor and do a setup with the “learn” feature of Traktor. Start with the Jog Wheels.

  132. Dave Salonia Says:

    Hi Cycokraut,

    What’s the latest mapper for Traktor/Mac/Denon HC4500? Has anyone figured out how to see the display on the Denon when playing from PC? I want a 4 deck setup: 2 PC; 2 CD. Also would like to hookup my Technics1200 turntables with Traktor Scratch for fun and performance.

  133. Nick Raw Says:

    Hi Cyco,

    I’m trying to run the latest midi rules in Vista 32bit (but in compatability mode for XPsp2)

    i’m getting the following message in the dos popup:

    MIDI Rules | Prototype 2007-12-09. Copyright(C) 2006-2007 Christoph Gerkens.
    Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 3184
    at sun.awt.shell.Win32ShellFolder2.getFileChooserIcon(Unknown Source)
    at sun.awt.shell.Win32ShellFolderManager2.get(Unknown Source)
    at sun.awt.shell.ShellFolder.get(Unknown Source)
    at com.sun.java.swing.plaf.windows.WindowsLookAndFeel$LazyWindowsIcon.cr
    eateValue(Unknown Source)
    at javax.swing.UIDefaults.getFromHashtable(Unknown Source)
    at javax.swing.UIDefaults.get(Unknown Source)
    at javax.swing.MultiUIDefaults.get(Unknown Source)
    at javax.swing.UIDefaults.getIcon(Unknown Source)
    at javax.swing.UIManager.getIcon(Unknown Source)
    at javax.swing.plaf.basic.BasicFileChooserUI.installIcons(Unknown Source
    at javax.swing.plaf.basic.BasicFileChooserUI.installDefaults(Unknown Sou
    at javax.swing.plaf.basic.BasicFileChooserUI.installUI(Unknown Source)
    at com.sun.java.swing.plaf.windows.WindowsFileChooserUI.installUI(Unknow
    n Source)
    at javax.swing.JComponent.setUI(Unknown Source)
    at javax.swing.JFileChooser.updateUI(Unknown Source)
    at javax.swing.JFileChooser.setup(Unknown Source)
    at javax.swing.JFileChooser.(Unknown Source)
    at javax.swing.JFileChooser.(Unknown Source)
    at com.cycosolutions.midirules.Processor.main(Processor.java:292)
    Press any key to continue . . .

    Is there anything i can do to get midi rules running?
    I’m getting knowhere with the BCD2000 and i’m gutted,

    Any help would really be appreciated,


  134. branko Says:

    hello, i have a problem and i hope that you can hel me fix it.
    first of all i’m no programer so i dont speak java code or stuff like that.
    your mapping worked great untill yesterday. when i start the midi rules when i want to close the midi in section i get this notice:
    exception in thread ‘main’ javax,sound. midi unavailable exception: the specific device is already in use. wait untill its free and then try again. and then it says a bunch of stuff similar to this
    at com.sun.media.sound.MidiInDevice.nOpen(native method)

    please help

  135. branko Says:

    o yes and I use bcd 3000

  136. phobik Says:

    Hi, any experience with BCD 2000 and linux, in particular for use with Mixxx (www.mixxx.org)

    Thanks in advance!

  137. fox Says:

    Hi, great work, but i have one problem with the timers:
    1. Trigger timer “T1” in 1000ms gives me a java exeption
    2. Example:
    Set variable “test” to 1

    rule “xyz”
    Timer “T1” triggered
    Variable “test” is equal to 1
    the rule “xyz” is never activated !

    Thanks in advance

  138. leith Says:

    1. Start Traktor
    2. (*)Traktor Preference | MIDI Interfaces: Choose Maple Midi In: Port 1 as the only MIDI interface
    3. (*)Traktor Preference | MIDI Setup: Load ‘BCD2000-Traktor3 – mb4guns-cycokrauts Flavor.tks’ or ‘BCD2000-Traktor3.2 – mb4guns-cycokrauts Flavor.tks’ file
    4. (*)Set BCD-2000 to B-DJ mode.
    5. Start MIDI Rules Prototype 12/25/2006
    6. Choose the ‘BCD2000-Traktor3 – mb4guns-cycokrauts Flavor.drl’ in the “Open rule file” dialog
    7. Choose midi in: BCD-2000 (Type the number that you see in front of “BCD-2000”) in the console window
    8. Choose midi out 1: Maple Midi In: Port 1 in the console window

    when i get to here there is no option for choosing :maple midi in port 1 just maple midi out.

    am i missing something ………help

    9. Choose midi out 2: BCD-2000 in the console window
    10. Choose midi out 3: for no more midi outputs (type 0) in the console window
    11. Wait until MIDI Rules is started. All BCD2000 LEDs flash for 2 seconds and Traktor gets synchronized (this is the reason why you should allow start Traktor at first)
    12. Start DJing and have fun!

  139. tim lanham Says:

    Hi there cyco
    well I have had the infamous bcd2000 for many years now and have spent countless hours fiddling around mainly with getting it to run stable. Now I would like to get it to run with tracktor. besides midi rules and tracktor do I just need the latest version of bcd2000 driver?

  140. kleber Says:

    cycokraut hello! I’m here in Brazil and I have a doubt that as far as possible be clarified.
    First I want to congratulate you for the gorgeous contribution to the midi rules. I am owner of a bcd-2000 and I use virtual dj 6.0, but can not make them work in sync and saw only that the rules work with midi Tracktor, but also work with virtual dj? I await your response … bye

  141. mtregael Says:


    I’m new in using midi rules for mapping an APC20 onto light show software: sunlite (nicolaudie).

    My mapping is nearly ready and i want to launch with single icon “midi rules” without to select input, output and rule file.

    I see that there is no more activity here, but i hope the software is still used maybe on another name ? elsewhere ?


    g . r a m b a u d (at) g m a i l . c o m

  142. crisis killer review Says:

    I enjoy, result in I found just what I used to
    be looking for. You have ended my 4 day long hunt! God Bless you man.

    Have a nice day. Bye

  143. mcm japan Says:


  144. mcm 値段 Says:


  145. リュック mcm Says:


  146. mcm ハンドバッグ Says:


  147. mcm さいふ Says:


  148. リュック mcm Says:


  149. mcm リュック Says:


  150. 財布 mcm Says:


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: