Help - Search - Members - Calendar
Full Version: Set recorder / restream and downloadable sets.
Torrentech: electronic music torrent downloads > Our community > tT radio studio > tT radio mixes
Pages: 1, 2, 3, 4
ethex
Missed your favourite DJ? I always do since you guys play in the middle of the night.
So, I coded a little ripper and a neat little site so you can stream and download old sets.

EDIT: http://radiosets.torrentech.org

Feel free to use it as much as you like! I hope you'll enjoy it. wink.gif

olleman
Oh my god this is the absolute shit! The bee's knees!

Great job! smile.gif
Syne
QUOTE (ethex @ 01. Oct 2009, 18:39) *
Missed your favourite DJ? I always do since you guys play in the middle of the night.
So, I coded a little ripper and a neat little site so you can stream and download old sets.

http://mkeyd.net/tt/

Feel free to use it as much as you like! I hope you'll enjoy it. wink.gif

Very excellent indeed!! Cheers man!!
commondenom
QUOTE (ethex @ 02. Oct 2009, 00:39) *
Missed your favourite DJ? I always do since you guys play in the middle of the night.
So, I coded a little ripper and a neat little site so you can stream and download old sets.

http://mkeyd.net/tt/

Feel free to use it as much as you like! I hope you'll enjoy it. wink.gif



dude thats awesome work....

bleep
good job ... now I can just point to your site when I was too lazy to record a set - thx
DJCM
QUOTE (ethex @ 02. Oct 2009, 01:39) *
Missed your favourite DJ? I always do since you guys play in the middle of the night.
So, I coded a little ripper and a neat little site so you can stream and download old sets.

http://mkeyd.net/tt/

Feel free to use it as much as you like! I hope you'll enjoy it. wink.gif


Thank you very much for this - do you have space to keep this going for a while? or will you replace the older sets?


indica
Wow - nice one .....
pyc
hey ethex, thank you very much! smile.gif
Soultonic
Wow. Pure Excellency!
ethex
Aw, thanks guys. woot.gif

QUOTE (DJCM @ 02. Oct 2009, 08:15) *
QUOTE (ethex @ 02. Oct 2009, 01:39) *
Missed your favourite DJ? I always do since you guys play in the middle of the night.
So, I coded a little ripper and a neat little site so you can stream and download old sets.

http://mkeyd.net/tt/

Feel free to use it as much as you like! I hope you'll enjoy it. wink.gif


Thank you very much for this - do you have space to keep this going for a while? or will you replace the older sets?


I have about 3-400 GB of space I can use for this. So what's that in days? So far I've ripped ~1GB / day, so... ~350 days perhaps.
It's the least I can do for you, been enjoying your sets for a while now smile.gif

\o/
Canar
Any chance we could get the files to be auto-tagged after each set is complete? You're extracting artist name and set name already, and it'd be great to store that in the artist and title ID3 fields.

Furthermore, if you store more information about when track changes happen down to the millisecond or so, I could help you put that together into a .CUE-file generator. Specifically, .CUEs use 1/75s frame sizes.
constantG
This is why I love tT so much. This is the most awesome addition to an already superb site.

ttlove.gif
ethex
QUOTE (Canar @ 02. Oct 2009, 22:30) *
Any chance we could get the files to be auto-tagged after each set is complete? You're extracting artist name and set name already, and it'd be great to store that in the artist and title ID3 fields.

Furthermore, if you store more information about when track changes happen down to the millisecond or so, I could help you put that together into a .CUE-file generator. Specifically, .CUEs use 1/75s frame sizes.


Hm, the .cue-file idea is defenitely not a bad idea. I can take a look at it and see if it's easy to implement.
You cant really get exact right time from the ICY-server since they dont time that into the millisecond. But I sure can add it to the millisecond when I recieve it, but it's not to trust to 100%.
If you see on some sets the same tag gets repeated, and they even get wrongly sent to other djs sets. I've tried to come up with better solutions to better associate the tags with the right set, but it's really hard to get it fully right :/
Ray_Von
Man, that is awesome.

Thank you!
Canar
QUOTE (ethex @ 02. Oct 2009, 19:03) *
Hm, the .cue-file idea is defenitely not a bad idea. I can take a look at it and see if it's easy to implement.
Shouldn't be too much of an issue. Even if the timing's off, close enough is fine. If it's automated, people don't expect too much anyhow. Even to-the-second would be fine. If you can get sub-second timing, even better. The closer the better, obviously, but I doubt many pieces of streaming software will even give you that data with frame-exact timing anyhow.

QUOTE (ethex @ 02. Oct 2009, 19:03) *
If you see on some sets the same tag gets repeated, and they even get wrongly sent to other djs sets. I've tried to come up with better solutions to better associate the tags with the right set, but it's really hard to get it fully right :/
IMO the logic here isn't hard. If the track data is the same as the last DJ, ignore it and replace it with the Set Name. When it changes, add a new cue-sheet entry. If it doesn't change for the whole set, ignore the cue sheet.
ethex
QUOTE (Canar @ 03. Oct 2009, 02:43) *
QUOTE (ethex @ 02. Oct 2009, 19:03) *
Hm, the .cue-file idea is defenitely not a bad idea. I can take a look at it and see if it's easy to implement.
Shouldn't be too much of an issue. Even if the timing's off, close enough is fine. If it's automated, people don't expect too much anyhow. Even to-the-second would be fine. If you can get sub-second timing, even better. The closer the better, obviously, but I doubt many pieces of streaming software will even give you that data with frame-exact timing anyhow.


I save info about in what exact byte the tag is receieved from now on, so this is pretty much as accurate as you can be with these kind of services.
It's live in the ripper but I have to implement something useful on the web. I dont have much time this weekend, but I'll propably code a little anyway smile.gif. I'll see what I can squeeze out!

QUOTE (Canar @ 03. Oct 2009, 02:43) *
QUOTE (ethex @ 02. Oct 2009, 19:03) *
If you see on some sets the same tag gets repeated, and they even get wrongly sent to other djs sets. I've tried to come up with better solutions to better associate the tags with the right set, but it's really hard to get it fully right :/
IMO the logic here isn't hard. If the track data is the same as the last DJ, ignore it and replace it with the Set Name. When it changes, add a new cue-sheet entry. If it doesn't change for the whole set, ignore the cue sheet.


Yeah, the problem is that if the client gets disconnected and reconnect, the last tag is sent, even though the current dj never set it. But as long as I dont restart the client and it does not disconnect (which never happened yet, but one can never be too sure with streams) it wont be wrong from now on.

But you're right, the rest is pretty simple logic.

If you've got any more ideas like the CUE-file, please share! The programming side of me haven't had this fun for a loooong time biggrin.gif
tthrob
Briliant ideea thumbsup.gif. As said before, a great adition to an allready great site. yes.gif
noxmad
... Nice. smile.gif

I assume you are using streamripper command line for this, I think I remember talking to you about it on irc.

I have to use the "Fix VBR MP3 Header" Util in foobar to sort out the correct track length and also the fact that it will always show up as 128kb in the quality because of good ol stream ripper bumming the jingle.
So just a heads-up for people using foobar. Right click that badboy, utils , 'Fix VBR MP3 Header' before you up it to wherever. smile.gif
I guess other apps fix the header too but i'm ignorant of them. I'm sure someone (*cough* canar *cough*) will come along and tell you about them.


QUOTE
IMO the logic here isn't hard. If the track data is the same as the last DJ, ignore it and replace it with the Set Name. When it changes, add a new cue-sheet entry. If it doesn't change for the whole set, ignore the cue sheet.

You'll be wanting to check throughout the set for track changes , not just the start of the set because it is possible for track info to get stuck (i've seen it alot especially with sets where the crossfader is kept at neutral).
Given the admins would rather you not update track info due to shoutcast's racism towards certain characters I think adding cue-sheet options is kind of giving people the incentive to try and update track info and we could end up with more radio problems.
Canar
QUOTE (noxmad @ 04. Oct 2009, 23:41) *
I'm sure someone (*cough* canar *cough*) will come along and tell you about them.
There are utils out there that work with MP3 that aren't foobar2000? ohmy.gif Learn something new every day.

Joking aside, foobar2000 is the only util I know of with this feature, but the reason I don't know any others is because I have no need of any others. :B
ethex
QUOTE (noxmad @ 05. Oct 2009, 05:41) *
... Nice. smile.gif

I assume you are using streamripper command line for this, I think I remember talking to you about it on irc.

Oh, no, not really. I've developed my own ripper which does every thing pretty much better than those rippers since I have the full control over every single byte read from the stream. And no, I dont remember talking to you about any rippers, sorry :/

QUOTE (noxmad @ 05. Oct 2009, 05:41) *
I have to use the "Fix VBR MP3 Header" Util in foobar to sort out the correct track length and also the fact that it will always show up as 128kb in the quality because of good ol stream ripper bumming the jingle.
So just a heads-up for people using foobar. Right click that badboy, utils , 'Fix VBR MP3 Header' before you up it to wherever. smile.gif
I guess other apps fix the header too but i'm ignorant of them. I'm sure someone (*cough* canar *cough*) will come along and tell you about them.


Foobar2k cant do things automatically. At least not in the environment I'm working with.

QUOTE (noxmad @ 05. Oct 2009, 05:41) *
QUOTE
IMO the logic here isn't hard. If the track data is the same as the last DJ, ignore it and replace it with the Set Name. When it changes, add a new cue-sheet entry. If it doesn't change for the whole set, ignore the cue sheet.

You'll be wanting to check throughout the set for track changes , not just the start of the set because it is possible for track info to get stuck (i've seen it alot especially with sets where the crossfader is kept at neutral).
Given the admins would rather you not update track info due to shoutcast's racism towards certain characters I think adding cue-sheet options is kind of giving people the incentive to try and update track info and we could end up with more radio problems.


Oh, didn't know that was much of a problem for the admins. I guess I won't add CUE-files then. But I will try to correct the broken headers in the saved streams, and try to come up with an idea to determen if it's VBR or CBR.
darkinvader
Well the fuck done....very very very very helpful tool!!!!!
jimmytruelove
Absolutely superb, thanks smile.gif
jimmytruelove
QUOTE (jimmytruelove @ 06. Oct 2009, 13:40) *
Absolutely superb, thanks smile.gif



May I suggest perhaps, if at all possible, for a DJ to be able to input a tracklist next to their set?

Just an idea smile.gif
ethex
QUOTE (jimmytruelove @ 06. Oct 2009, 14:44) *
QUOTE (jimmytruelove @ 06. Oct 2009, 13:40) *
Absolutely superb, thanks smile.gif



May I suggest perhaps, if at all possible, for a DJ to be able to input a tracklist next to their set?

Just an idea smile.gif


I'm currently rebuilding behind the scenes, and it will be a couple of days before you start noticing changes on the actual page. But I think you'll find all the ideas given to me by you in the near future smile.gif
Just give me some time, and please, keep the ideas flowing, it's really helping me!

EDIT: I'm not going to add the rating, dj accounts and comments to each set. These features feels a bit redundant, and they feel out of place on the radiosets site. I'm not trying to make a community around it, just trying to provide an easy to use service for listening to old sets.
Ray_Von
Man, if this is going to be up for a while it should be sticky!

Great work, i know I said this before but really!

Beatzoo
Very good idea you have come up with Ethex - round of applause!

I have one question, can the DJ's like myself that broadcast on Apple Mac's & Nicecast use metadata?
sick
thanks a lot for that! great work, *thumbsup*
banana.gif
ethex
QUOTE (Beatzoo @ 08. Oct 2009, 02:12) *
Very good idea you have come up with Ethex - round of applause!

I have one question, can the DJ's like myself that broadcast on Apple Mac's & Nicecast use metadata?


Thank you <3
And I'm not exactly sure what you mean. But I fetch all the ID3-tags sent through the stream and I save them along with the set. If you sent any metadata it should most certainly be listed under "ID3-TAGS".

QUOTE (sick @ 08. Oct 2009, 18:44) *
thanks a lot for that! great work, *thumbsup*
banana.gif


Thanks biggrin.gif <3
Beatzoo
Well Ethex, the problem us Mac OS X DJ's face with using Nicecast is the fact we cannot automatically send metadata with this application, as far as I know. I'd be interested to know if anyone can tell me differently.
bleep
QUOTE (Beatzoo @ 09. Oct 2009, 19:09) *
Well Ethex, the problem us Mac OS X DJ's face with using Nicecast is the fact we cannot automatically send metadata with this application, as far as I know. I'd be interested to know if anyone can tell me differently.


http://www.native-instruments.com/forum/sh...ead.php?t=91934
Beatzoo
QUOTE (bleep @ 09. Oct 2009, 18:31) *
QUOTE (Beatzoo @ 09. Oct 2009, 19:09) *
Well Ethex, the problem us Mac OS X DJ's face with using Nicecast is the fact we cannot automatically send metadata with this application, as far as I know. I'd be interested to know if anyone can tell me differently.


http://www.native-instruments.com/forum/sh...ead.php?t=91934


Thanks for this link bleep, but I think this tutorial is only applicable for PC users with Traktor Pro & Icecast. My setup is Macbook Pro, Traktor Scratch 1.3 & Nicecast broadcast app.
susu
.:EPIC:.

joint.gif bunny.gif joint.gif
constantG
All good so far Ethex. But the ID3 tags are sometimes not being read by the script. Will this be refined in time?

ttlove.gif thumbsup.gif
DjSoul
wow!! need i say more?!
ethex
QUOTE (susu @ 09. Oct 2009, 20:40) *
.:EPIC:.

joint.gif bunny.gif joint.gif


<3 joint.gif

QUOTE (constantG @ 09. Oct 2009, 21:46) *
All good so far Ethex. But the ID3 tags are sometimes not being read by the script. Will this be refined in time?

ttlove.gif thumbsup.gif


Yeah, it got a bit messy yesterday. The program went koko and crashed all the time, resulting in the loss of ID3-tags. But from now on it should fetch them all.

\o/
freak
ethex, is there any way to be removed from the list? i actually rather like to upload my sets by myself because i record them as wav file and convert it to a higher bitrate than the actual stream. + on my divshare page i can keep track how much ppl downloaded it etc.
Bluntastic
This is the best thing ever. <3 to those responsible. Mad Props!
Beatzoo
How about having the http://radiosets.torrentech.org link on the home page. Near the TT radio panel.
ethex
QUOTE (freak @ 11. Oct 2009, 20:53) *
ethex, is there any way to be removed from the list? i actually rather like to upload my sets by myself because i record them as wav file and convert it to a higher bitrate than the actual stream. + on my divshare page i can keep track how much ppl downloaded it etc.


Of course. Just to let you know, I'm logging everything downloaded down to the last bit, and I'm soon going to display the stats on the page, it's just a matter of time.

Future plans even point at allowing DJs uploading sets with better quality and own sets of ID3-tags.

QUOTE (Bluntastic @ 11. Oct 2009, 21:04) *
This is the best thing ever. <3 to those responsible. Mad Props!


Thanks! *blushes*
noxmad
Is the multi-part set addition split based on disconnections ?
Because your script is gonna get pissed when someone's spinning and has mad buffer
ethex
QUOTE (noxmad @ 12. Oct 2009, 08:44) *
Is the multi-part set addition split based on disconnections ?
Because your script is gonna get pissed when someone's spinning and has mad buffer


That's exactly what happens :/ But as you can see I've come up with a way to kind of, group them together. And I will soon add support for streaming and downloading a whole set concatenated.
But I can't just ignore the disconnections because sometimes some music get lost between the streams, and that would sound awkward if I just put them together wouthout saying anything to the listener.
encinoman
QUOTE (ethex @ 06. Oct 2009, 20:06) *
EDIT: I'm not going to add the rating, dj accounts and comments to each set. These features feels a bit redundant, and they feel out of place on the radiosets site. I'm not trying to make a community around it, just trying to provide an easy to use service for listening to old sets.


Excellent job! And I agree that keeping it simple makes it more functional.

Keep coding mate! drinks.gif
Arti
just wondering what language did you write the script in? biggrin.gif
PHP/Java etc.. biggrin.gif
noxmad
QUOTE (Arti @ 24. Oct 2009, 02:42) *
just wondering what language did you write the script in? biggrin.gif
PHP/Java etc.. biggrin.gif

looks like python
ethex
QUOTE (Arti @ 24. Oct 2009, 03:42) *
just wondering what language did you write the script in? biggrin.gif
PHP/Java etc.. biggrin.gif


Everything is coded in python, including the web page.
Redwretch
I'm so bloody impressed with this auto archiver. Fucking brilliant man. You are the KING!!!

Mad respect. MAD!!!

eyetea
This is some really top shit right here biggrin.gif well done!!
commondenom
im getting an error today...


A problem occurred in a Python script. Here is the sequence of function calls leading up to the error, in the order they occurred.
/usr/lib/python2.6/site-packages/flup/server/fcgi_base.py in run(self=<flup.server.fcgi_base.Request object at 0x9115d8c>)
556 """Runs the handler, flushes the streams, and ends the request."""
557 try:
558 protocolStatus, appStatus = self.server.handler(self)
559 except:
560 traceback.print_exc(file=self.stderr)
protocolStatus undefined, appStatus undefined, self = <flup.server.fcgi_base.Request object at 0x9115d8c>, self.server = <flup.server.fcgi.WSGIServer object at 0x8e1a7ac>, self.server.handler = <bound method WSGIServer.handler of <flup.server.fcgi.WSGIServer object at 0x8e1a7ac>>
/usr/lib/python2.6/site-packages/flup/server/fcgi_base.py in handler(self=<flup.server.fcgi.WSGIServer object at 0x8e1a7ac>, req=<flup.server.fcgi_base.Request object at 0x9115d8c>)
1118 for data in result:
1119 if data:
1120 write(data)
1121 if not headers_sent:
1122 write('') # in case body was empty
write = <function write at 0x90ee5a4>, data = <itertools.imap object at 0x918e14c>
/usr/lib/python2.6/site-packages/flup/server/fcgi_base.py in write(data=<itertools.imap object at 0x918e14c>)
1060
1061 def write(data):
1062 assert type(data) is str, 'write() argument must be string'
1063 assert headers_set, 'write() before start_response()'
1064
builtin type = <type 'type'>, data = <itertools.imap object at 0x918e14c>, builtin str = <type 'str'>

<type 'exceptions.AssertionError'>: write() argument must be string
args = ('write() argument must be string',)
message = 'write() argument must be string'


is it just me???
ethex
QUOTE (commondenom @ 21. Nov 2009, 12:10) *
im getting an error today...


A problem occurred in a Python script. Here is the sequence of function calls leading up to the error, in the order they occurred.
/usr/lib/python2.6/site-packages/flup/server/fcgi_base.py in run(self=<flup.server.fcgi_base.Request object at 0x9115d8c>)
556 """Runs the handler, flushes the streams, and ends the request."""
557 try:
558 protocolStatus, appStatus = self.server.handler(self)
559 except:
560 traceback.print_exc(file=self.stderr)
protocolStatus undefined, appStatus undefined, self = <flup.server.fcgi_base.Request object at 0x9115d8c>, self.server = <flup.server.fcgi.WSGIServer object at 0x8e1a7ac>, self.server.handler = <bound method WSGIServer.handler of <flup.server.fcgi.WSGIServer object at 0x8e1a7ac>>
/usr/lib/python2.6/site-packages/flup/server/fcgi_base.py in handler(self=<flup.server.fcgi.WSGIServer object at 0x8e1a7ac>, req=<flup.server.fcgi_base.Request object at 0x9115d8c>)
1118 for data in result:
1119 if data:
1120 write(data)
1121 if not headers_sent:
1122 write('') # in case body was empty
write = <function write at 0x90ee5a4>, data = <itertools.imap object at 0x918e14c>
/usr/lib/python2.6/site-packages/flup/server/fcgi_base.py in write(data=<itertools.imap object at 0x918e14c>)
1060
1061 def write(data):
1062 assert type(data) is str, 'write() argument must be string'
1063 assert headers_set, 'write() before start_response()'
1064
builtin type = <type 'type'>, data = <itertools.imap object at 0x918e14c>, builtin str = <type 'str'>

<type 'exceptions.AssertionError'>: write() argument must be string
args = ('write() argument must be string',)
message = 'write() argument must be string'


is it just me???



Yeah, sorry about that. It's part of a "solution" where I tried to find another issue. So... the "fix" created another problem. But it should be fixed now.
Thanks for telling me.
commondenom
thumbsup.gif yup...its working again....cheers!!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Invision Power Board © 2001-2010 Invision Power Services, Inc.