jimmy_jukebox 0.3.7 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
data/bin/load_jukebox CHANGED
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require File.dirname(__FILE__) + '/../lib/jimmy_jukebox/load_jukebox_code.rb'
3
+ require File.expand_path('../lib/jimmy_jukebox/load_jukebox_code.rb', File.dirname(__FILE__))
data/bin/play_jukebox CHANGED
@@ -1,15 +1,38 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- begin
4
- require 'readline'
5
- require 'posix/spawn'
6
- rescue LoadError => e
7
- raise unless e.message =~ /readline|posix|spawn/
8
- puts "*** You must install the 'rb-readline' and 'posix_spawn' gems to use JimmyJukebox in Ruby ***"
9
- exit
3
+ if RUBY_ENGINE =~ /jruby/
4
+ begin
5
+ require 'spoon'
6
+ require 'readline'
7
+ rescue LoadError => e
8
+ if e.message =~ /spoon/
9
+ p "*** You must install the 'spoon' gem to use JimmyJukebox on JRuby ***"
10
+ exit
11
+ elsif e.message =~ /readline/
12
+ p "*** You must install 'readline' to use JimmyJukebox on JRuby ***"
13
+ exit
14
+ else
15
+ raise
16
+ end
17
+ end
18
+ else
19
+ begin
20
+ require 'readline'
21
+ require 'posix/spawn'
22
+ rescue LoadError => e
23
+ if e.message =~ /readline/
24
+ p "*** You must install 'readline' or the 'rb-readline' gem to use JimmyJukebox in Ruby ***"
25
+ exit
26
+ elsif e.message =~ /posix/ || e.message =~ /spawn/
27
+ p "*** You must install the 'posix-spawn' gem to use JimmyJukebox in Ruby ***"
28
+ exit
29
+ else
30
+ raise
31
+ end
32
+ end
10
33
  end
11
34
 
12
- lib = File.expand_path(File.dirname(__FILE__) + '/../lib')
35
+ lib = File.expand_path('../lib', File.dirname(__FILE__))
13
36
  $LOAD_PATH.unshift(lib) if File.directory?(lib) && !$LOAD_PATH.include?(lib)
14
37
  require 'jimmy_jukebox'
15
38
  include JimmyJukebox
@@ -1,6 +1,7 @@
1
1
  module Artists
2
2
 
3
3
  JAZZ_ARTISTS = {
4
+ :acb => "archibald_camp_banjo",
4
5
  :at => "art_tatum",
5
6
  :as => "artie_shaw",
6
7
  :bg => "benny_goodman",
@@ -10,7 +11,9 @@ module Artists
10
11
  :cc => "charlie_christian",
11
12
  :cp => "charlie_parker",
12
13
  :ch => "coleman_hawkins",
14
+ :chjb => "clifford_hayes_jug_blowers",
13
15
  :cb => "count_basie",
16
+ :dx => "dixieland",
14
17
  :dg => "dizzy_gillespie",
15
18
  :dr => "django_reinhardt",
16
19
  :de => "duke_ellington",
@@ -37,7 +40,7 @@ module Artists
37
40
  end
38
41
 
39
42
  def value_to_yaml_file(value)
40
- return value.to_s.capitalize unless value.to_s.match(/_/)
43
+ return value.to_s.capitalize + '.yml' unless value.to_s.match(/_/)
41
44
  value.to_s.split("_").map! { |name_component| name_component.capitalize }.join("") + '.yml'
42
45
  end
43
46
 
@@ -1,81 +1,137 @@
1
+ require 'jimmy_jukebox/user_config'
2
+
1
3
  module JimmyJukebox
2
4
 
3
- module Jukebox
5
+ class Jukebox
4
6
 
5
- class << Jukebox
7
+ class NoNewSongException < Exception; end
8
+ class NoCurrentSongException < Exception; end
9
+ class NoPreviousSongException < Exception; end
6
10
 
7
- attr_accessor :current_song, :continuous_play
11
+ attr_accessor :current_song, :continuous_play
12
+ attr_writer :user_config, :previous_song, :next_song, :playing
8
13
 
14
+ def initialize(new_user_config = UserConfig.new, continuous_play = true)
15
+ self.user_config = new_user_config
16
+ self.continuous_play = continuous_play
9
17
  end
10
18
 
11
- def self.play_loop
12
- @continuous_play = true
13
- while @continuous_play do
14
- play_once
19
+ def play_loop
20
+ loop do
21
+ if continuous_play && !playing?
22
+ p "Playing random song"
23
+ play_next_song
24
+ else
25
+ sleep 0.1
26
+ end
15
27
  end
16
28
  end
17
29
 
18
- def self.play_once
19
- begin
20
- play_random_song
21
- rescue SystemExit, Interrupt => e
22
- terminate_current_song
23
- puts "\nMusic terminated by user"
24
- exit
25
- end
30
+ def next_song
31
+ @next_song ? @next_song : random_song
26
32
  end
27
33
 
28
- def self.quit
29
- stop_looping
34
+ def play_next_song
35
+ play_song(next_song)
36
+ end
37
+
38
+ def quit
39
+ disable_continuous_play
30
40
  terminate_current_song
31
41
  end
32
42
 
33
- def self.skip_song
34
- if @current_song
35
- puts "Terminating #{@current_song.music_file}"
36
- terminate_current_song
43
+ def playing?
44
+ @playing ||= false
45
+ end
46
+
47
+ def previous_song
48
+ @previous_song || nil
49
+ end
50
+
51
+ def replay_previous_song
52
+ if previous_song
53
+ p "Replaying #{previous_song.music_file}"
54
+ #terminate_current_song
55
+ play_song(previous_song)
37
56
  else
38
- raise "No @current_song"
57
+ raise NoPreviousSongException, "No previous song"
39
58
  end
40
59
  end
41
60
 
42
- def self.pause_current_song
43
- @current_song.pause
61
+ def skip_song
62
+ enable_continuous_play
63
+ if current_song
64
+ p "Skipping #{current_song.music_file}"
65
+ #play_random_song
66
+ self.previous_song = current_song
67
+ self.current_song = nil
68
+ previous_song.terminate
69
+ self.playing = false
70
+ else
71
+ raise NoCurrentSongException, "No current_song"
72
+ end
44
73
  end
45
74
 
46
- def self.unpause_current_song
47
- @current_song.unpause
75
+ def pause_current_song
76
+ current_song.pause
48
77
  end
49
78
 
50
- def self.stop_looping
51
- @continuous_play = false
79
+ def unpause_current_song
80
+ current_song.unpause
52
81
  end
53
82
 
54
- def self.songs
83
+ def songs
55
84
  user_config.songs
56
85
  end
57
86
 
58
- def self.play_random_song
59
- #terminate_current_song
60
- raise "JimmyJukebox has no songs to play!" if songs.length == 0
61
- @current_song = Song.new( songs[rand(songs.length)] )
62
- @current_song.play(user_config)
63
- @current_song = nil # ????
87
+ def random_song
88
+ raise NoNewSongException, "JimmyJukebox can't find any songs to play!" if songs.length == 0
89
+ Song.new( songs[rand(songs.length)] )
90
+ end
91
+
92
+ def play_random_song
93
+ p "Inside play_random_song"
94
+ play_song(random_song)
95
+ end
96
+
97
+ def enable_continuous_play
98
+ self.continuous_play = true
99
+ p "Enabled continuous_play"
100
+ end
101
+
102
+ def disable_continuous_play
103
+ self.continuous_play = false
104
+ p "Disabled continuous_play"
105
+ end
106
+
107
+ def play_song(song)
108
+ terminate_current_song if current_song
109
+ self.playing = true
110
+ p "Setting current_song = #{song.music_file}"
111
+ self.current_song = song
112
+ current_song.play(user_config, self)
113
+ p "Finished playing"
114
+ self.previous_song = current_song
115
+ self.current_song = nil
116
+ self.playing = false
117
+ rescue Song::SongTerminatedPrematurelyException
118
+ p "Song ended prematurely"
64
119
  end
65
120
 
66
- def self.terminate_current_song
67
- if @current_song
68
- puts "Terminating #{@current_song.music_file}"
69
- @current_song.terminate
70
- #@current_song = nil
121
+ def terminate_current_song
122
+ if current_song
123
+ p "Terminating #{current_song.music_file}"
124
+ current_song.terminate
125
+ self.previous_song = current_song
126
+ self.current_song = nil
127
+ self.playing = false
71
128
  else
72
- puts "No song is currently playing"
129
+ raise NoCurrentSongException, "No current_song"
73
130
  end
74
131
  end
75
132
 
76
- def self.user_config
77
- @user_config = UserConfig.new unless @user_config
78
- @user_config
133
+ def user_config
134
+ @user_config ||= UserConfig.new
79
135
  end
80
136
 
81
137
  end
@@ -2,105 +2,182 @@ module JimmyJukebox
2
2
 
3
3
  class Song
4
4
 
5
- attr_reader :paused, :music_file
5
+ class InvalidSongFormatException < Exception; end
6
+ class NoPlayingPidException < Exception; end
7
+ class UnsupportedSongFormatException < Exception; end
8
+ class CannotSpawnProcessException < Exception; end
9
+ class SongTerminatedPrematurelyException < Exception; end
10
+
11
+ attr_reader :music_file
12
+ attr_writer :paused
6
13
  attr_accessor :player, :playing_pid
7
14
 
8
- def initialize(music_file)
9
- set_music_file(music_file)
10
- @paused = false
11
- @playing_pid = nil
15
+ def initialize(in_music_file)
16
+ set_music_file(in_music_file)
17
+ self.paused = false
18
+ self.playing_pid = nil
19
+ end
20
+
21
+ def paused?
22
+ @paused
12
23
  end
13
24
 
14
- def set_music_file(music_file)
15
- if music_file =~ /\.mp3$/i || music_file =~ /\.ogg$/i
16
- @music_file = music_file
25
+ def set_music_file(in_music_file)
26
+ if in_music_file =~ /\.mp3$/i || in_music_file =~ /\.ogg$/i
27
+ @music_file = in_music_file
17
28
  else
18
- raise "You can create a song only with an .mp3 or .ogg file"
29
+ raise InvalidSongFormatException, "JimmyJukebox plays only .mp3/.ogg files. #{in_music_file} is not valid"
19
30
  end
20
31
  end
21
32
 
33
+ def grandchild_pid
34
+ # returns grandchild's pid if the child process spawns a grandchild
35
+ # if so, the child is probably "/bin/sh" and the grandchild is "mpg123" or similar
36
+ gpid = `ps h --ppid #{playing_pid} -o pid`.strip.to_i
37
+ gpid == 0 ? nil : gpid
38
+ end
39
+
22
40
  def pause
23
- @paused = true
41
+ self.paused = true
24
42
  # jruby doesn't seem to handle system() correctly
25
43
  # trying backticks
26
- # system("kill -s STOP #{@playing_pid}") if @playing_pid
27
- `kill -s STOP #{@playing_pid}` if @playing_pid
44
+ # system("kill -s STOP #{playing_pid}") if playing_pid
45
+ if grandchild_pid
46
+ p "Pausing"
47
+ `kill -s STOP #{grandchild_pid}`
48
+ elsif playing_pid
49
+ p "Pausing"
50
+ `kill -s STOP #{playing_pid}`
51
+ else
52
+ raise NoPlayingPidException, "*** Can't pause song because can't find playing_pid #{playing_pid} ***"
53
+ end
28
54
  end
29
55
 
30
56
  def unpause
31
- @paused = false
57
+ self.paused = false
32
58
  # jruby doesn't seem to handle system() correctly
33
59
  # trying backticks
34
- #system("kill -s CONT #{@playing_pid}") if @playing_pid
35
- `kill -s CONT #{@playing_pid}` if @playing_pid
60
+ #system("kill -s CONT #{playing_pid}") if playing_pid
61
+ if grandchild_pid
62
+ p "Unpausing"
63
+ `kill -s CONT #{grandchild_pid}`
64
+ elsif playing_pid
65
+ p "Unpausing"
66
+ `kill -s CONT #{playing_pid}`
67
+ else
68
+ raise NoPlayingPidException, "*** Can't unpause song because can't find playing_pid #{playing_pid} ***"
69
+ end
70
+ end
71
+
72
+ def kill_playing_pid_and_children
73
+ grandpid = grandchild_pid
74
+ playpid = playing_pid
75
+ if grandpid
76
+ `kill #{grandpid}`
77
+ p "killed #{grandpid}"
78
+ end
79
+ `kill #{playpid}`
80
+ p "killed #{playpid}"
36
81
  end
37
82
 
38
83
  def terminate
39
- @paused = false
40
- #`killall #{@player}`
41
- @player = nil
84
+ self.paused = false
85
+ #`killall #{player}`
86
+ self.player = nil
42
87
  # killing processes seems problematic in JRuby
43
88
  # I've tried several approaches, and nothing seems reliable
44
- #Process.kill("SIGKILL",@playing_pid) if @playing_pid
45
- #Process.kill("SIGTERM",@playing_pid) if @playing_pid
46
- `kill #{@playing_pid}` if @playing_pid
47
- @playing_pid = nil
89
+ #Process.kill("SIGKILL",playing_pid) if playing_pid
90
+ #Process.kill("SIGTERM",playing_pid) if playing_pid
91
+ if playing_pid
92
+ kill_playing_pid_and_children
93
+ self.playing_pid = nil
94
+ else
95
+ raise NoPlayingPidException, "*** Can't terminate song because can't find playing_pid #{playing_pid} ***"
96
+ end
48
97
  end
49
98
 
50
99
  def set_player(user_config)
51
- if @music_file =~ /\.mp3$/i
52
- @player = user_config.mp3_player
53
- elsif @music_file =~ /\.ogg$/i
54
- @player = user_config.ogg_player
100
+ if music_file =~ /\.mp3$/i
101
+ self.player = user_config.mp3_player
102
+ elsif music_file =~ /\.ogg$/i
103
+ self.player = user_config.ogg_player
104
+ else
105
+ raise UnsupportedSongFormatException, "Attempted to play a file format this program cannot play"
55
106
  end
56
- raise "Attempted to play a file format this program cannot play" unless @player
57
107
  end
58
108
 
59
- def play(user_config)
109
+ def play(user_config, jukebox)
60
110
  set_player(user_config)
61
111
  process_status = play_with_player
62
- process_status.exitstatus.to_i == 0 ? (@playing_pid = nil) : (raise "Experienced a problem playing a song")
112
+ process_status.exitstatus.to_i == 0 ? (self.playing_pid = nil) : (raise SongTerminatedPrematurelyException, "Experienced a problem playing a song")
63
113
  end
64
114
 
65
115
  def play_with_player
66
- puts "Press Ctrl-C to stop the music and exit this program"
67
- puts "Now playing '#{@music_file}'"
68
- command = @player
69
- arg = File.expand_path(@music_file)
70
- system_yield_pid(command,arg) do |pid|
71
- @playing_pid = pid
72
- end
116
+ p "Now playing '#{music_file}'"
117
+ p "Press Ctrl-C to stop the music and exit this program"
118
+ music_file_path = File.expand_path(music_file)
119
+ run_command(player, music_file_path)
120
+ p "playing_pid = " + playing_pid.to_s
121
+ #system_yield_pid(player, music_file_path) do |pid|
122
+ # self.playing_pid = pid
123
+ #end
124
+ #if running_jruby?
125
+ Process.waitpid(playing_pid) # Waits for a child process to exit, returns its process id, and sets $? to a Process::Status object
126
+ #else
127
+ # Process::waitpid(playing_pid)
128
+ #end
129
+ p "Stopped waiting"
130
+ $? # return Process::Status object with instance methods .stopped?, .exited?, .exitstatus
73
131
  end
74
132
 
75
133
  end
76
134
 
135
+ def running_jruby?
136
+ defined?(JRUBY_VERSION) || RUBY_ENGINE == 'jruby' || RUBY_PLATFORM == 'java'
137
+ end
138
+
139
+ def run_command(command, arg)
140
+ if running_jruby?
141
+ pid = Spoon.spawnp(command,arg)
142
+ else
143
+ begin
144
+ pid = POSIX::Spawn::spawn(command + ' ' + arg)
145
+ #pgid = Process.getpgid(pid)
146
+ #child = POSIX::Spawn::Child.new(command + ' ' + arg)
147
+ #pid = child.status.pid
148
+
149
+ # create and run block in subprocess (which will terminate with status 0), capture subprocess pid
150
+ #pid = Process.fork do
151
+ # exec(command + ' ' + arg) # replace new process with system call
152
+ # exit! 127 # exit process and return exit status 127; should never be reached
153
+ #end
154
+ rescue NotImplementedError
155
+ raise CannotSpawnProcessException, "*** Cannot play music because we found neither Spoon.spawnp (for JRuby) nor Process.fork (for MRI) ***"
156
+ end
157
+ end
158
+ self.playing_pid = pid
159
+ end
160
+
77
161
  # make system call and get pid so you can terminate process
78
162
  def system_yield_pid(command,arg)
79
163
  # would like to use Process.respond_to?(:fork) but JRuby mistakenly returns true
80
- if (defined?(JRUBY_VERSION) || RUBY_PLATFORM == 'java')
164
+ if running_jruby?
81
165
  pid = Spoon.spawnp(command,arg)
82
- Process.waitpid(pid) # Waits for a child process to exit, returns its process id, and sets $? to a Process::Status object
83
166
  else
84
167
  begin
85
- pid = POSIX::Spawn::spawn(command + ' ' + arg)
86
- stat = Process::waitpid(pid)
87
- #pid = fork do # creates and runs block in subprocess (which will terminate with status 0), capture subprocess pid
88
- # exec(command) # replaces current process with system call
89
- # exit! 127 # exit process and return exit status 127; should never be reached
90
- #end
168
+ #spawn(command + ' ' + arg)
169
+ #pid = POSIX::Spawn::spawn(command + ' ' + arg)
170
+
171
+ # create and run block in subprocess (which will terminate with status 0), capture subprocess pid
172
+ pid = Process.fork do
173
+ exec(command + ' ' + arg) # replace new process with system call
174
+ exit! 127 # exit process and return exit status 127; should never be reached
175
+ end
91
176
  rescue NotImplementedError
92
- raise "*** fork()...exec() not supported ***"
177
+ raise CannotSpawnProcessException, "*** Cannot play music because we found neither Spoon.spawnp (for JRuby) nor Process.fork (for MRI) ***"
93
178
  end
94
179
  end
95
180
  yield pid if block_given? # call block, passing in the subprocess pid
96
- #if pid
97
- # puts "pid: #{pid}"
98
- # puts "current_song: #{Jukebox.current_song.inspect}"
99
- #else
100
- # puts "No process id (pid)!"
101
- # raise "@current_song: #{Jukebox.current_song.inspect}"
102
- #end
103
- $? # return Process::Status object with instance methods .stopped?, .exited?, .exitstatus; see: http://www.ruby-doc.org/core/classes/Process/Status.html
104
181
  end
105
182
 
106
183
  end
@@ -94,6 +94,10 @@ module JimmyJukebox
94
94
  end
95
95
  end
96
96
  check_downloaded_song_size(song_pathname)
97
+ rescue OpenURI::HTTPError
98
+ p "Warning: Could not download #{song_url}"
99
+ File.delete(song_pathname) if File.exists?(song_pathname)
100
+ return nil
97
101
  end
98
102
 
99
103
  def self.check_downloaded_song_size(song_pathname)
@@ -0,0 +1,21 @@
1
+ ---
2
+ - http://archive.org/download/A.l.CampPlaysTheBanjo/BanjoSketch.mp3
3
+ - http://archive.org/download/A.l.CampPlaysTheBanjo/BeautifulDreamer.mp3
4
+ - http://archive.org/download/A.l.CampPlaysTheBanjo/Ciri-biri-binWaltz.mp3
5
+ - http://archive.org/download/A.l.CampPlaysTheBanjo/DanceOfTheFireflies.mp3
6
+ - http://archive.org/download/A.l.CampPlaysTheBanjo/DanceOfTheWoodenDolls.mp3
7
+ - http://archive.org/download/A.l.CampPlaysTheBanjo/DixieChickenReel.mp3
8
+ - http://archive.org/download/A.l.CampPlaysTheBanjo/GoldenBellPolka.mp3
9
+ - http://archive.org/download/A.l.CampPlaysTheBanjo/JumpingJacks.mp3
10
+ - http://archive.org/download/A.l.CampPlaysTheBanjo/JumpingJacks2.mp3
11
+ - http://archive.org/download/A.l.CampPlaysTheBanjo/LightGayPolka.mp3
12
+ - http://archive.org/download/A.l.CampPlaysTheBanjo/ListenToTheMockingbird.mp3
13
+ - http://archive.org/download/A.l.CampPlaysTheBanjo/LittleToyTrain.mp3
14
+ - http://archive.org/download/A.l.CampPlaysTheBanjo/MountGretnaMarch.mp3
15
+ - http://archive.org/download/A.l.CampPlaysTheBanjo/SerenadeOfTheMandolins.mp3
16
+ - http://archive.org/download/A.l.CampPlaysTheBanjo/SilverCrownScottische.mp3
17
+ - http://archive.org/download/A.l.CampPlaysTheBanjo/TheDarkiesAwakening.mp3
18
+ - http://archive.org/download/A.l.CampPlaysTheBanjo/TheDarktownCakewalk.mp3
19
+ - http://archive.org/download/A.l.CampPlaysTheBanjo/TheFrogvilleBand.mp3
20
+ - http://archive.org/download/A.l.CampPlaysTheBanjo/TheJerseyCarnivalMarch.mp3
21
+ - http://archive.org/download/A.l.CampPlaysTheBanjo/WatchHillMarch.mp3
@@ -1,9 +1,10 @@
1
1
  ---
2
- - http://www.archive.org/download/CharlieChristian-01-08/CharlieChristian-AirmailSpecial.mp3
3
- - http://www.archive.org/download/CharlieChristian-01-08/CharlieChristian-BluesInB.mp3
4
- - http://www.archive.org/download/CharlieChristian-01-08/CharlieChristian-HoneysuckleRose1939.mp3
5
- - http://www.archive.org/download/CharlieChristian-01-08/CharlieChristian-MyDaddyRocksMe1940.mp3
6
- - http://www.archive.org/download/CharlieChristian-01-08/CharlieChristian-SevenComeEleven.mp3
7
- - http://www.archive.org/download/CharlieChristian-01-08/CharlieChristian-StompinAtTheSavoy1941.mp3
8
- - http://www.archive.org/download/CharlieChristian-01-08/CharlieChristian-SwingToTheBop1941.mp3
9
- - http://www.archive.org/download/CharlieChristian-01-08/CharlieChristian-WhollyCats.mp3
2
+ - http://archive.org/download/CharlieChristian-SevenComeEleven/02.SevenComeEleven.mp3
3
+ #- http://www.archive.org/download/CharlieChristian-01-08/CharlieChristian-AirmailSpecial.mp3
4
+ #- http://www.archive.org/download/CharlieChristian-01-08/CharlieChristian-BluesInB.mp3
5
+ #- http://www.archive.org/download/CharlieChristian-01-08/CharlieChristian-HoneysuckleRose1939.mp3
6
+ #- http://www.archive.org/download/CharlieChristian-01-08/CharlieChristian-MyDaddyRocksMe1940.mp3
7
+ #- http://www.archive.org/download/CharlieChristian-01-08/CharlieChristian-SevenComeEleven.mp3
8
+ #- http://www.archive.org/download/CharlieChristian-01-08/CharlieChristian-StompinAtTheSavoy1941.mp3
9
+ #- http://www.archive.org/download/CharlieChristian-01-08/CharlieChristian-SwingToTheBop1941.mp3
10
+ #- http://www.archive.org/download/CharlieChristian-01-08/CharlieChristian-WhollyCats.mp3
@@ -1,4 +1,12 @@
1
1
  ---
2
+ - http://archive.org/download/CharlieParker-MyOldFlame/CharlieParker-MyOldFlame.mp3
3
+ - http://www.archive.org/download/CharlieParker-Laura/06-Laura.mp3
4
+ - http://www.archive.org/download/CharlieParker-AllTheThingsYouAre/CharlieParker-AllTheThingsYouAre.mp3
5
+ - http://www.archive.org/download/CharlieParker-BodyAndSoul1943/CharlieParker-BodyAndSoul1943.mp3
6
+ - http://www.archive.org/download/CharlieParker-MyOldFlame/CharlieParker-MyOldFlame.mp3
7
+ - http://www.archive.org/download/CharlieParkerHazelScott-EmbraceableYou1943/CharlieParkerHazelScott-EmbraceableYou1943.mp3
8
+ - http://archive.org/download/CharlieParker-LoverMantakeA/14.LoverMantakeA.mp3
9
+ - http://archive.org/download/JazzBeBop/02Pista022.mp3
2
10
  - http://www.archive.org/download/CharlieParker-01-25/CharlieParker-ANightInTunisia.mp3
3
11
  - http://www.archive.org/download/CharlieParker-01-25/CharlieParker-Bebop.mp3
4
12
  - http://www.archive.org/download/CharlieParker-01-25/CharlieParker-BilliesBounce.mp3
@@ -25,9 +33,3 @@
25
33
  - http://www.archive.org/download/CharlieParker-01-25/CharlieParker-TheHymn1947.mp3
26
34
  - http://www.archive.org/download/CharlieParker-01-25/CharlieParker-WhiteChristmas.mp3
27
35
  - http://www.archive.org/download/CharlieParker-01-25/CharlieParker-YardbirdSuite.mp3
28
- - http://www.archive.org/download/CharlieParker-Laura/06-Laura.mp3
29
- - http://www.archive.org/download/CharlieParker-LoverMantakeA/14.LoverMantakeA.mp3
30
- - http://www.archive.org/download/CharlieParker-AllTheThingsYouAre/CharlieParker-AllTheThingsYouAre.mp3
31
- - http://www.archive.org/download/CharlieParker-BodyAndSoul1943/CharlieParker-BodyAndSoul1943.mp3
32
- - http://www.archive.org/download/CharlieParker-MyOldFlame/CharlieParker-MyOldFlame.mp3
33
- - http://www.archive.org/download/CharlieParkerHazelScott-EmbraceableYou1943/CharlieParkerHazelScott-EmbraceableYou1943.mp3
@@ -0,0 +1,16 @@
1
+ ---
2
+ - http://archive.org/download/CliffordHayesDixielandJugBlowers-01-14/CliffordHayesDixielandJugBlowers-BarefootStomp.mp3
3
+ - http://archive.org/download/CliffordHayesDixielandJugBlowers-01-14/CliffordHayesDixielandJugBlowers-BlueGuitarStomp.mp3
4
+ - http://archive.org/download/CliffordHayesDixielandJugBlowers-01-14/CliffordHayesDixielandJugBlowers-ByeByeBlues.mp3
5
+ - http://archive.org/download/CliffordHayesDixielandJugBlowers-01-14/CliffordHayesDixielandJugBlowers-ClefClubStomp.mp3
6
+ - http://archive.org/download/CliffordHayesDixielandJugBlowers-01-14/CliffordHayesDixielandJugBlowers-DanceHallShuffle.mp3
7
+ - http://archive.org/download/CliffordHayesDixielandJugBlowers-01-14/CliffordHayesDixielandJugBlowers-EverybodyWantsMyTootelum.mp3
8
+ - http://archive.org/download/CliffordHayesDixielandJugBlowers-01-14/CliffordHayesDixielandJugBlowers-HeyIAmBlue.mp3
9
+ - http://archive.org/download/CliffordHayesDixielandJugBlowers-01-14/CliffordHayesDixielandJugBlowers-IfYouCantMakeItEasySweetMama.mp3
10
+ - http://archive.org/download/CliffordHayesDixielandJugBlowers-01-14/CliffordHayesDixielandJugBlowers-LoveBlues.mp3
11
+ - http://archive.org/download/CliffordHayesDixielandJugBlowers-01-14/CliffordHayesDixielandJugBlowers-NationalBlues.mp3
12
+ - http://archive.org/download/CliffordHayesDixielandJugBlowers-01-14/CliffordHayesDixielandJugBlowers-PleaseDontHollerMama.mp3
13
+ - http://archive.org/download/CliffordHayesDixielandJugBlowers-01-14/CliffordHayesDixielandJugBlowers-TryAndTreatHerRight.mp3
14
+ - http://archive.org/download/CliffordHayesDixielandJugBlowers-01-14/CliffordHayesDixielandJugBlowers-YoudBetterLeaveMeAloneSweetPapa.mp3
15
+ - http://archive.org/download/CliffordHayesDixielandJugBlowers-01-14/CliffordHayesDixielandJugBlowers-YoureTicklinMe.mp3
16
+ - http://archive.org/download/DixielandJugBlowersVcliffordHayes-MemphisShake1926/DixielandJugBlowersVcliffordHayes-MemphisShake1926.mp3
@@ -0,0 +1,9 @@
1
+ ---
2
+ - http://archive.org/download/JackSheedysDixielandJazzBand-TigerRag/JackSheedysDixielandJazzBand-TigerRag.mp3
3
+ - http://archive.org/download/SamLaninsIpanaTroubadores-Dixieland/SamLaninsIpanaTroubadores-Dixieland.mp3
4
+ - http://archive.org/download/OlleSundhsDixielandBand-Panama/OlleSundhsDixielandBand-Panama.mp3
5
+ - http://archive.org/download/JudyGarland-DixielandBand1944/JudyGarland-DixielandBand1944.mp3
6
+ - http://archive.org/download/OriginalDixielandJazzBand-Medley/OriginalDixielandJazzBand-Medley.mp3
7
+ - http://archive.org/download/MamieSmith-GoinToDixieland/MamieSmith-GoinToDixieland.mp3
8
+ - http://archive.org/download/BobCrosbyBobcats-DixielandShuffle1936/BobCrosbyBobcats-DixielandShuffle1936.mp3
9
+ - http://archive.org/download/DickieValentine-KingOfDixieland1958/DickieValentine-KingOfDixieland1958.mp3
@@ -1,4 +1,9 @@
1
1
  ---
2
+ - http://archive.org/download/LouisArmstrong-comeBackSweetPapa/louisarmstrong-ComeBackSweetPapa.mp3
3
+ - http://archive.org/download/LouisArmstrongOrch-BlueAgain1931/LouisArmstrongOrch-BlueAgain1931.mp3
4
+ - http://archive.org/download/LouisArmstrongOrch-SweetheartsOnParade1931/LouisArmstrongOrch-SweetheartsOnParade1931.mp3
5
+ - http://archive.org/download/LouisArmstrong-WhatAWonderfulWorld_39/LouisArmstrong-WhatAWonderfulWorld.mp3
6
+ - http://archive.org/download/LouisArmstrongAllHisStars-struttinWithSomeBarbecue/LouisArmstrongAllHisStars-StruttinWithSomeBarbecue.mp3
2
7
  - http://www.archive.org/download/LouisArmstrong-AccentuateThePositive1945/LouisArmstrong-AccentuateThePositive1945.mp3
3
8
  - http://www.archive.org/download/LouisArmstrong-AdiosMuchachos1959/LouisArmstrong-AdiosMuchachos1959.mp3
4
9
  - http://www.archive.org/download/LouisArmstrong-CestSiBon1962/LouisArmstrong-CestSiBon1962.mp3
@@ -1,4 +1,35 @@
1
1
  ---
2
+ - http://archive.org/download/MilesDavisPortia/MilesDavis-Tutu-03.Portia.mp3
3
+ - http://archive.org/download/MilesDavisAtCarnegieHall/01-SoWhat.mp3
4
+ - http://archive.org/download/MilesDavisAtCarnegieHall/01-SomedayMyPrinceWillCome.mp3
5
+ - http://archive.org/download/MilesDavisAtCarnegieHall/02-Oleo.mp3
6
+ - http://archive.org/download/MilesDavisAtCarnegieHall/02-SpringIsHere.mp3
7
+ - http://archive.org/download/MilesDavisAtCarnegieHall/03-NoBlues.mp3
8
+ - http://archive.org/download/MilesDavisAtCarnegieHall/03-Teo.mp3
9
+ - http://archive.org/download/MilesDavisAtCarnegieHall/04-IThoughtAboutYou.mp3
10
+ - http://archive.org/download/MilesDavisAtCarnegieHall/04-Walkin.mp3
11
+ - http://archive.org/download/MilesDavisAtCarnegieHall/05-EnAranjuezConTuAmoradagioFrom-conciertoDeAranjuez-.mp3
12
+ - http://archive.org/download/MilesDavisAtCarnegieHall/05-TheMeaningOfTheBlues-lament.mp3
13
+ - http://archive.org/download/MilesDavisAtCarnegieHall/06-NewRhumba.mp3
14
+ - http://archive.org/download/CookinWithTheMilesDavisQuintet/01MyFunnyValentine.mp3
15
+ - http://archive.org/download/CookinWithTheMilesDavisQuintet/03BluesByFive.mp3
16
+ - http://archive.org/download/CookinWithTheMilesDavisQuintet/04Airegin.mp3
17
+ - http://archive.org/download/CookinWithTheMilesDavisQuintet/05TuneUp_whenLightsAreLow.mp3
18
+ - http://archive.org/download/WorkinWithTheMilesDavisQuintet1959/01ItNeverEnteredMyMind.mp3
19
+ - http://archive.org/download/WorkinWithTheMilesDavisQuintet1959/02Four.mp3
20
+ - http://archive.org/download/WorkinWithTheMilesDavisQuintet1959/03InYourOwnSweetWay.mp3
21
+ - http://archive.org/download/WorkinWithTheMilesDavisQuintet1959/04TheThemetake1.mp3
22
+ - http://archive.org/download/WorkinWithTheMilesDavisQuintet1959/05TranesBlues.mp3
23
+ - http://archive.org/download/WorkinWithTheMilesDavisQuintet1959/06AhmadsBlues.mp3
24
+ - http://archive.org/download/WorkinWithTheMilesDavisQuintet1959/07HalfNelson.mp3
25
+ - http://archive.org/download/WorkinWithTheMilesDavisQuintet1959/08TheThemetake2.mp3
26
+ - http://archive.org/download/SteaminWithTheMilesDavisQuintet/01SurreyWithTheFringeOnTop.mp3
27
+ - http://archive.org/download/SteaminWithTheMilesDavisQuintet/02SaltPeanuts.mp3
28
+ - http://archive.org/download/SteaminWithTheMilesDavisQuintet/03SomethingIDreamedLastNight.mp3
29
+ - http://archive.org/download/SteaminWithTheMilesDavisQuintet/04Diane.mp3
30
+ - http://archive.org/download/SteaminWithTheMilesDavisQuintet/05WellYouNeednt.mp3
31
+ - http://archive.org/download/SteaminWithTheMilesDavisQuintet/06WhenIFallInLove.mp3
32
+ - http://archive.org/download/MilesDavis-SpanishKey1/MilesDavis-SpanishKey1.mp3
2
33
  - http://www.archive.org/download/MilesDavis-InASilentWayitsAboutThatTime/MilesDavis-InASilentWayitsAboutThatTime.mp3
3
34
  - http://www.archive.org/download/MilesDavis-IFallInLoveTooEasily/03.IFallInLoveTooEasily.mp3
4
35
  - http://www.archive.org/download/MilesDavis-AllBlues/04-AllBlues.mp3