Traktor track name / time to LCD via MIDI! ...using Denon LCD support & Arduino - Page 2
Page 2 of 7 FirstFirst 123456 ... LastLast
Results 11 to 20 of 69
  1. #11
    Tech Guru MiL0's Avatar
    Join Date
    May 2009
    Location
    Brighton / Bangkok
    Posts
    1,386

    Default

    Quote Originally Posted by Siytek View Post
    Cheers!



    Yep totally agree about the scrolling, im giving all my attention to my live set at the mo as I have a gig in two weeks but I was going to return to the Traktor LCD code pretty soon to refine things.

    I have wondered about stopping the constant MIDI processing to keep this info on the screen, it is processor hungry for what it achieves! I figured you could identify the end of the track name or artist by the fact that there are two spaces at the end, this would allow the whole track name or artist to be loaded into the Arduino at the speed Traktor scrolls it (the info could scroll on the screen and stop, when it stopped so would reading the MIDI). The problem I think is once you have this info, you can ignore the MIDI data relative to the track name and artist, the difficult bit is getting the Arduino to know when the track is changed. Hmmmm..... im thinking as I type.... maybe some connection with the mm:ss:ff might do it? ie Arduino checks to see if the track name has changed when the timer is put back to 0:00:00, ie when you load in a new track!



    I certainly have! I stumbled upon your thread while searching for info about Traktor LCD MIDI before I created an account here. Defiantly liking the idea of saving the outputs. Having a display button would be cool too but I could defiantly picture a blue 16x4 line display with it all on! ...even better a twin 16x4 for each deck with channel VU on each screen!! Now im just getting silly!
    Regarding the double space - could be a problem for tracks that have double spaces in the wrong place (badly tagged mp3s etc). Perhaps something could be coded whereby it detects a double space and then checks the next letter after the spaces. If the next two letters are the same as the first two letters then we know (or are pretty certain) that the text has repeated.

    Regarding checking when a new track loads so that the text updates - there must be some midi that gets triggered or outputted when a new track starts playing or is loaded. Having the Arduino listen out for that would trigger it to display the new text. Otherwise, waiting for 00:00 might be a problem as some people use Load beat markers which mean the track gets loaded into a deck at a different time from 00:00.

    Finally, regarding using more than one LCD screen - totally agree! My controller is built around two x 16x2 LCD screens. I truely believe that this is one of the last major obstacles in building a professional DIY Traktor midi controller. I'm really excited by what you and djnecro have managed to achieve so far - can't wait to see how this pans out

    Speaking of which, I'd happily pay ~£100 for that Arduino board you're designing. If it was fully populated, soldered with headers and pre-programmed then I think you'd get quite a lot of business from this forum, at least. £100 is quite a bit more than a normal Arduino but you're taking out all the tedious parts of putting it altogether and working with mux's. If it supports LCD's then you've got a hit! It's just a shame that Arduino's are so poor at supporting large numbers of encoders (from my research).

    edit: the more I think about it actually... this controller you're designing perfectly suits my controllers requirements. I'm trying to think of that site that does very cheap pcb manufacturing at low quantities. You could get these boards knocked up pretty quickly!

  2. #12
    Tech Wizard Siytek's Avatar
    Join Date
    Apr 2011
    Location
    UK
    Posts
    36

    Default

    Quote Originally Posted by DjNecro View Post
    Regarding the pdf you are using... I highly recommend changing the code to work with the pdf I posted (attached to this post)... Traktor specifically supports the hc4500 (with its 12 segment display), I'm not sure if using the 3700's midi-spec will cause a problem in the future (or with certain charcters since the 3700's font table is slightly different than the hc4500's).
    Yeh I agree probs best to refer to the HC4500 sheet simply because Traktor supports this product... The reason I used the DNS3700 sheet is because my mate has a pair which I set up for him, this is how I knew the Traktor --> LCD was possible. EDIT: I have updated the link on the first post to the HC4500

    With regards to the font table, dont forget we are not using the HC4500s 'actual' LCD module nor are we using the DNS3700s 'actual' LCD module, the font table to look at is not in the Denon MIDI sheets but in the datasheet for the LCD display being used. Any problems with incorrect characters will be due to the LCD module connected to Arduino.

    12 / 16 characters should not pose too much of a problem either. If you wrote code to try and receive on all CC numbers for segment 1 - 16 (from DNS3700 sheet) you would only see track and artist being displayed on segs 1 - 12. If you used a smaller display than 12 segs then you get my 8x2 display above!

    Quote Originally Posted by DjNecro View Post
    I was doing some thinking about how to stop the scrolling (which is about twice as fast in TP2 )... Your idea about the double spaces intrigues me... I will have to play... combining that with the track time (which I havent stripped out of the midi data yet) may be the trick we need to make it work...
    Keen to see what ya come up with, ill prob have a crack at it too, just got a live set to finish at the mo tho coz got a gig coming up

    Quote Originally Posted by DjNecro View Post
    The first thing I think should be left out of the code would be the frame (?) number... processing and displaying the frames (of which there are many many per second) will add a crap-ton of extra processing time... If I were to have two in my controller I would be thinking of dedicating a board and chip to drive the displays due to the processing required... the last thing we want is latency on the midi out (which is the only thing that really matters).
    Agreed, my VU meter doesnt really like the LCD being run at the same time and thats with a single track. I have yet to refine my code though but your right, either a solution needs to be found to stop the constant reading of the track data, or a dedicated chip for the LCD would be required I think.

    ...I have however been stroking my chin and been looking into modifying the FTDI driver to possibly pipe MIDI over USB a little quicker than normal! Im sure modifying the driver to work as a MIDI driver is possible and the standard MIDI baud rate can be achieved, im not sure about running it quicker than normal though, another project for another time I think!
    ...dreams in binary

  3. #13
    Tech Mentor
    Join Date
    Feb 2011
    Location
    Southern Ontario, Canada
    Posts
    244

    Default

    Well guys... I don't think that this can be done reliably

    1. Traktor only sends time data when the deck is playing
    2. There is no specific 'track change' message that gets sent
    3. When changing tracks, Traktor doesn't start from the beginning of the track name


    Reasoning:
    1) If we use time=0 type of logic, the display won't update until you start playing the track
    1) As per Mil0, not everyone starts at the beginning of the track
    1) I thought detecting a large variance between values of the track position value (percentage from 0-100), but that won't work if the starting position is within the threshold; it won't update..
    2) This would have been a great help
    3) Detecting where the track name starts and ends would be near impossible, we have double spaces, but some tracks may have spaces at the end of the tags, and I'm not sure how reliable that would be.

    Initially I was thinking to store the track name by filling in an array based on the character and segment, but each time the data gets received the letter will be different and the segment the same (since it's scrolling), the only way I can see it working is if we have a CONCRETE way of telling when a track has been changed... Deducing a change from track names would be nearly impossible.. As far as my programming ability at least

    Using combinations of techniques may increase the reliability, but at that point, I'd say that dedicating a microcontroller for the displays would be easier and more efficient... I'd likely use it to control the leds on the controller as well, so it wouldn't be a total waste.

    Please, I beg you guys... prove me wrong!

  4. #14
    Tech Guru MiL0's Avatar
    Join Date
    May 2009
    Location
    Brighton / Bangkok
    Posts
    1,386

    Default

    We could approach this in a slightly different way. Traktor doesn't output midi when a track changes but there's nothing to stop us from creating some midi data output ourselves upon track change. For example, there could be 4 midi buttons on the controller that are used to load the currently selected track in the browser into one of the 4 decks. When this buttons is pressed the following happens:


    - The Arduino listens out for this particular midi CC and uses this as a trigger to start listening for title/track text.
    - The currently selected track is loaded into the corresponding deck.
    - The Arduino stops listening for the title/track text after a certain period of time, it detects double spaces and/or a text loop is detected.
    - The Arduino continues to display this text on the LCD screen until it detects this same midi command again.

    Using this method we don't need to use the 00:00 time detect method so it won't matter if Traktor doesn't output this all the time. The only problem is the text looping issue. Here are some of my (slightly hacky) solutions:

    1) Use something like Tag&Rename to add a special symbol to the end of the track title and artist name on every mp3 file on your computer. The Arduino then listens out for this symbol (or combination of symbols/characters) and then uses this to detect where the end of the text is. You could also set the Arduino not to display these symbols/characters.

    2) If we now have a 'concrete' way of telling when a new track has loaded (by using the midi button method above) then we could look at the array solution again perhaps? It's a little bit beyond my coding abilities but I grasp the concept. Thoughts?

  5. #15
    Tech Mentor
    Join Date
    Feb 2011
    Location
    Southern Ontario, Canada
    Posts
    244

    Default

    The ideal solution wouldn't require any further config, but I don't see any other way around it.. Great idea..

    I'm headed to bed, but I'll take a look and see what midi outputs for track loading are available, I'm sure there is something...

    Once I know a new track is loaded, I think I can figure out a way to assemble the string... but I am certainly open to suggestions

  6. #16
    Tech Wizard Siytek's Avatar
    Join Date
    Apr 2011
    Location
    UK
    Posts
    36

    Default

    Wow, some serious brain power being applied to this at the mo by you guys I think im getting addicted to this forum!

    We could approach this in a slightly different way. Traktor doesn't output midi when a track changes but there's nothing to stop us from creating some midi data output ourselves upon track change
    Defo a great idea there. I found a TSI on the NI forum for an Akai APC that flashes the play button green when a track is loaded in and flashes it red when the track is nearing the end so im guessing its possible to send a CC when loading a new track...

    http://www.native-instruments.com/fo...ad.php?t=97987

    The ideal solution wouldn't require any further config, but I don't see any other way around it.. Great idea..
    Agreed, it would be great to have minimal config. I was thinking though that from the end users point of view, to get the LCD working they would need to create a new blank DN4500 TSI anyway to start transmitting the track data. Could we not just create a Denon DN4500 TSI and then create an 'add out' to output a CC when a track is loaded, then provide this 'MIDI LCD' TSI (in Denon HC4500 format) to the end user to download and import in order to get the LCD working?

    I know Denon TSI has the Denon function names instead of CC numbers but we could always just assign the 'load track midi out' to say for example 'Deck A > Cue' and then look in the Denon MIDI sheet to find out the MIDI CC of this Denon function to use in the Arduino code.

    I would have also thought that it would be more straight forward for an end user to just import a downloaded TSI because if you try and explain that they have to create a HC4500 TSI and leave it blank there is always going to be someone who cant get it to work because they have created a Generic MIDI one instead or someone else who will be confused because they have to leave the TSI blank... it confused me for a while as to why the LCD was working with no MIDI out listings in the TSI!!
    ...dreams in binary

  7. #17
    Tech Mentor
    Join Date
    Feb 2011
    Location
    Southern Ontario, Canada
    Posts
    244

    Default

    Scratch pad of my findings:

    Midi out -> Transport -> Play/pause: will output upon play/pause (duh..) will output pause state if you change tracks while the deck is playing (deck b playing, load new track in deck b while deck b is still playing..), will NOT output if track is loaded while deck is paused.

    Midi Out -> Load -> Unload: Cannot seem to get it to output anything... ever....

    Midi Out -> Transport -> Cue: Out puts when cue is pressed, nothing during track load

    Midi Out -> Load -> Load Selected: So far this one seems to be the winner with one exception and one quirk. For some reason it sometimes sends multiple note-on messages, but as far as I can tell, it only sends a single note-off per load. However, it WILL NOT output when you drag and drop a track, only when you right click and select 'load track in deck x'. I tested it with a controller and it works the same way...

    Conclusions... I'm going to further investigate this using the Load Selected output... so far it seems to be the only stable way to know when a track as been loaded. The downside is that it wont work if you drag and drop a track into a deck...

  8. #18
    Tech Mentor
    Join Date
    Feb 2011
    Location
    Southern Ontario, Canada
    Posts
    244

    Default

    Well I can't seem to get a complete track name.. The major issue at hand right now is that the 'window' is only 12 characters long, so if a track name is longer than 12 characters, I really have no way to figure out where the 13th character should go (since the character will be different, yet the segment would be the same)...

    I think that if I were to use something like this in a controller, a dedicated processor would likely be the best way to handle it... especially because in TP2, the midi is streamed twice as fast, taking even more processing away from more important things.


  9. #19
    Tech Guru MiL0's Avatar
    Join Date
    May 2009
    Location
    Brighton / Bangkok
    Posts
    1,386

    Default

    in that case, any custom arduino hardware being designed for commercialisation should perhaps take this into consideration. It's worth the added cost imo.

    I personally don't think Arduino-based scrolling in a 12 segment window is much of a problem as the remaining 4 segments could be used for other things (like time or a deck indicator). It's just the scrolling via midi which I'm not such a fan of - why on earth did NI design it this way?!

  10. #20
    Tech Mentor
    Join Date
    Feb 2011
    Location
    Southern Ontario, Canada
    Posts
    244

    Default

    Yeah man I have no idea who to even blame... Did Denon set their controllers up so that they can only deal with the data like this? Which is how it seems to be since they have commands for specific VFD segments... All it would have taken would be to send one command to indicate the start of the string, then send each character in order one by one, and one more command to indicate the end of the string... SIMPLE!!!

    But yeah... with the available room in most larger controllers, and the cost of the extra atmega hardware (my custom 'arduino' cost less than $10 CDN (~£6)) it would be absolutely trivial to just throw another one in... Just be sure to either use dedicated usb-midi converters for each arduino and a usb hub, or (better yet) use midi thru code and daisy chain them inside the case..

    I'm off to play with clonething

Page 2 of 7 FirstFirst 123456 ... LastLast

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •