jimmy_jukebox 0.4.3 → 0.4.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -8,6 +8,7 @@ module Artists
8
8
  bh: { genre: 'JAZZ', name: "billie_holiday"},
9
9
  bb: { genre: 'JAZZ', name: "bix_beiderbecke"},
10
10
  bm: { genre: 'JAZZ', name: "bennie_moten"},
11
+ c: { genre: 'CLASSICAL', name: "chopin"},
11
12
  cc: { genre: 'JAZZ', name: "charlie_christian"},
12
13
  cp: { genre: 'JAZZ', name: "charlie_parker"},
13
14
  ch: { genre: 'JAZZ', name: "coleman_hawkins"},
@@ -19,17 +20,23 @@ module Artists
19
20
  de: { genre: 'JAZZ', name: "duke_ellington"},
20
21
  eh: { genre: 'JAZZ', name: "earl_hines"},
21
22
  fh: { genre: 'JAZZ', name: "fletcher_henderson"},
23
+ h: { genre: 'CLASSICAL', name: 'haydn'},
22
24
  jj: { genre: 'JAZZ', name: "james_p_johnson"},
23
25
  jrm: { genre: 'JAZZ', name: "jelly_roll_morton"},
26
+ jsb: { genre: 'CLASSICAL', name: "bach"},
24
27
  ko: { genre: 'JAZZ', name: "king_oliver"},
25
28
  la: { genre: 'JAZZ', name: "louis_armstrong"},
26
29
  lh: { genre: 'JAZZ', name: "lionel_hampton"},
27
30
  lvb: { genre: 'CLASSICAL', name: "beethoven"},
31
+ m: { genre: 'CLASSICAL', name: "mendelssohn"},
28
32
  md: { genre: 'JAZZ', name: "miles_davis"},
29
33
  odjb: { genre: 'JAZZ', name: "original_dixieland_jazz_band"},
30
34
  rt: { genre: 'JAZZ', name: "ragtime"},
31
35
  rn: { genre: 'JAZZ', name: "red_norvo"},
32
- sb: { genre: 'JAZZ', name: "sidney_bechet"}
36
+ fs: { genre: 'CLASSICAL', name: "franz_schubert"},
37
+ sb: { genre: 'JAZZ', name: "sidney_bechet"},
38
+ v: { genre: 'CLASSICAL', name: "vivaldi"},
39
+ wam: { genre: 'CLASSICAL', name: "mozart"}
33
40
  }
34
41
 
35
42
  def artist_genre(key)
@@ -41,9 +48,7 @@ module Artists
41
48
  end
42
49
 
43
50
  def artist_name_to_genre(name)
44
- p "looking for #{name}"
45
51
  artists = ARTISTS.select { |k,v| v[:name] == name }
46
- p artists
47
52
  key, value = artists.first
48
53
  value[:genre]
49
54
  end
@@ -74,11 +74,22 @@ module JimmyJukebox
74
74
  end
75
75
  end
76
76
 
77
+ def erase_song
78
+ if current_song
79
+ song_to_erase = current_song
80
+ skip_song
81
+ File.delete(song_to_erase.music_file)
82
+ p "Erased #{song_to_erase.music_file}"
83
+ user_config.generate_song_list
84
+ else
85
+ raise NoCurrentSongException, "No current_song"
86
+ end
87
+ end
88
+
77
89
  def skip_song
78
90
  if current_song
79
91
  enable_continuous_play
80
92
  p "Skipping #{current_song.music_file}"
81
- #play_random_song
82
93
  current_song.terminate
83
94
  self.current_song = nil
84
95
  self.playing = false
@@ -1,7 +1,6 @@
1
1
  lib = File.expand_path(File.dirname(__FILE__) + '/..')
2
2
  $LOAD_PATH.unshift(lib) if File.directory?(lib) && !$LOAD_PATH.include?(lib)
3
3
  require 'jimmy_jukebox/song_loader'
4
- include SongLoader
5
4
 
6
5
  require 'jimmy_jukebox/artists'
7
6
  include Artists
@@ -21,10 +20,24 @@ def invalid_artist
21
20
  exit
22
21
  end
23
22
 
23
+ def valid_artist?(arg)
24
+ ARTISTS.has_key?(arg.to_sym)
25
+ end
26
+
27
+ def artist_name(arg)
28
+ ARTISTS[arg.to_sym][:name]
29
+ end
30
+
31
+ def valid_integer?(arg)
32
+ arg && arg.to_i.is_a?(Integer)
33
+ end
34
+
24
35
  no_argv0 unless ARGV[0]
25
36
 
26
- if ARTISTS.has_key?(ARGV[0].to_sym)
27
- JimmyJukebox::SongLoader.send(ARTISTS[ARGV[0].to_sym][:name])
37
+ invalid_artist unless valid_artist?(ARGV[0])
38
+
39
+ if valid_integer?(ARGV[1])
40
+ JimmyJukebox::SongLoader.new.send(artist_name(ARGV[0]), ARGV[1].to_i)
28
41
  else
29
- invalid_artist
42
+ JimmyJukebox::SongLoader.new.send(artist_name(ARGV[0]))
30
43
  end
@@ -22,9 +22,13 @@ module JimmyJukebox
22
22
  @paused
23
23
  end
24
24
 
25
+ def <=>(other)
26
+ music_file <=> other.music_file
27
+ end
28
+
25
29
  def set_music_file(in_music_file)
26
30
  if in_music_file =~ /\.mp3$/i || in_music_file =~ /\.ogg$/i
27
- @music_file = in_music_file
31
+ @music_file = File.expand_path(in_music_file)
28
32
  else
29
33
  raise InvalidSongFormatException, "JimmyJukebox plays only .mp3/.ogg files. #{in_music_file} is not valid"
30
34
  end
@@ -120,8 +124,7 @@ module JimmyJukebox
120
124
  def play_with_player
121
125
  p "Now playing '#{music_file}'"
122
126
  p "Press Ctrl-C to stop the music and exit this program"
123
- music_file_path = File.expand_path(music_file)
124
- run_command(player, music_file_path)
127
+ run_command(player, music_file)
125
128
  p "playing_pid = " + playing_pid.to_s
126
129
  Process.waitpid(playing_pid) # Waits for a child process to exit, returns its process id, and sets $? to a Process::Status object
127
130
  $? # return Process::Status object with instance methods .stopped?, .exited?, .exitstatus
@@ -1,6 +1,7 @@
1
1
  require 'open-uri'
2
2
  require 'fileutils'
3
3
  require 'yaml'
4
+ require 'uri'
4
5
 
5
6
  require 'jimmy_jukebox/artists'
6
7
  include Artists
@@ -16,50 +17,63 @@ include JimmyJukebox
16
17
 
17
18
  module JimmyJukebox
18
19
 
19
- module SongLoader
20
+ class SongLoader
20
21
 
21
- SUPPORTED_MUSIC_TYPES = /\.mp3$|\.ogg$/i
22
+ MUSIC_TYPES = /\.mp3$|\.ogg$/i
22
23
 
23
- @last_top_dir = nil # enables returning previous result if @last_top_dir == top_dir
24
+ attr_reader :user_config
24
25
 
25
- @user_config = UserConfig.new
26
+ def initialize
27
+ @user_config = UserConfig.new
28
+ ARTISTS.values.each { |artist| define_artist artist[:name].to_sym }
29
+ end
26
30
 
27
- def self.define_artist(name,user_config)
31
+ def define_artist(name)
28
32
  metaclass.instance_eval do
29
- define_method(name) do
33
+ define_method(name) do |max_num = nil|
30
34
  save_dir = user_config.default_music_dir + artist_name_to_subdir_name(name.to_s)
31
35
  songs = YAML::load_file(File.dirname(__FILE__) + "/songs/#{artist_name_to_yaml_file(name.to_s)}")
32
- download_songs(songs, save_dir)
36
+ download_num_songs(songs, save_dir, max_num)
33
37
  end
34
38
  end
35
39
  end
36
40
 
37
- ARTISTS.values.each { |artist| define_artist artist[:name].to_sym, @user_config }
38
41
 
39
- def self.sample(num_songs)
42
+ def sample_jazz(num_songs)
40
43
  # create array of all possible songs
41
44
  # loop through array and download num_songs new songs (or until end of array reached)
45
+ raise "not yet implemented"
46
+ end
47
+
48
+ def sample_classical(num_songs)
49
+ raise "not yet implemented"
42
50
  end
43
51
 
44
- def self.version_of_song_in_any_dir?(song_filename, save_dir)
45
- top_dir = UserConfig.top_music_dir(save_dir)
46
- @existing_files = calculate_existing_files(top_dir) if top_dir != @last_top_dir # recalculate existing files only if different top music directory
47
- @existing_files.include?(song_filename.gsub(SUPPORTED_MUSIC_TYPES,"")) # does extensionless song_filename exist in directory?
52
+ def version_of_song_in_dir_or_subdir?(song_filename, save_dir)
53
+ existing_files = all_subdir_music_files_extensionless(save_dir)
54
+ existing_files.include?(song_filename.gsub(SongLoader::MUSIC_TYPES,"")) # does extensionless song_filename exist in directory?
48
55
  end
49
56
 
50
- def self.calculate_existing_files(top_dir)
51
- existing_files = Dir.glob(File.join(top_dir, '**', '*' )) # all files in all subdirs
52
- if "".respond_to?(:force_encoding) # Ruby 1.8 doesn't have string encoding or String#force_encoding
57
+ def version_of_song_under_specific_dir?(song_filename, save_dir)
58
+ existing_files = Dir.entries(".").delete_if { |f| !f.match(SongLoader::MUSIC_TYPES) } # delete unless .mp3 or .ogg
59
+ existing_files.map! { |f| f.gsub(SongLoader::MUSIC_TYPES,"") } # strip extensions
60
+ existing_files.include?(song_filename.gsub(SongLoader::MUSIC_TYPES,"")) ? true : false # does extensionless song_filename exist in directory?
61
+ end
62
+
63
+ def all_subdir_music_files(dir)
64
+ existing_files = Dir.glob(File.join(dir, '**', '*' )) # all files in all subdirs
65
+ if "".respond_to?(:force_encoding) # Ruby 1.8 doesn't have string encoding or String#force_encoding
53
66
  existing_files.delete_if { |f| !f.force_encoding("UTF-8").valid_encoding? } # avoid "invalid byte sequence in UTF-8 (ArgumentError)"
54
67
  end
55
- existing_files.delete_if { |f| !f.match(SUPPORTED_MUSIC_TYPES) } # delete unless .mp3, .MP3, .ogg or .OGG
56
- existing_files.map! { |f| File.basename(f) } # strip any path info preceding the filename
57
- existing_files.map! { |f| f.gsub(SUPPORTED_MUSIC_TYPES,"") } # strip extensions
58
- @last_top_dir = top_dir
59
- @existing_files = existing_files
68
+ existing_files.delete_if { |f| !f.match(SongLoader::MUSIC_TYPES) } # delete unless .mp3, .MP3, .ogg or .OGG
69
+ existing_files.map { |f| File.basename(f) } # strip any path info preceding the filename
60
70
  end
61
71
 
62
- def self.create_save_dir(save_dir)
72
+ def all_subdir_music_files_extensionless(dir)
73
+ all_subdir_music_files(dir).map! { |f| f.gsub(SongLoader::MUSIC_TYPES,"") } # strip extensions
74
+ end
75
+
76
+ def create_save_dir(save_dir)
63
77
  return if File.directory?(save_dir)
64
78
  begin
65
79
  FileUtils.mkdir_p(save_dir)
@@ -69,34 +83,64 @@ module JimmyJukebox
69
83
  end
70
84
  end
71
85
 
86
+ def songs_to_filenames(songs)
87
+ songs.map { |song| File.basename(song.music_file) }
88
+ end
89
+
90
+ def downloadable(song_urls, current_songs)
91
+ # song_urls are URLs; current_songs are filenames
92
+ song_urls.delete_if { |url| current_songs.include?(File.basename(URI.parse(url).path)) }
93
+ end
94
+
72
95
  private
73
96
 
74
- def self.download_songs(songs, save_dir)
97
+ def n_random_songs(songs, num)
98
+ if num && num.kind_of?(Integer)
99
+ songs.shuffle.take(num)
100
+ else
101
+ songs
102
+ end
103
+ end
104
+
105
+ def download_num_songs(song_urls, save_dir, max_num = nil)
106
+ current_songs = all_subdir_music_files(save_dir)
107
+ do_not_have = downloadable(song_urls, current_songs)
108
+ p "You already have all songs for this artist" if do_not_have.empty?
109
+ if max_num
110
+ more_songs = max_num - current_songs.length
111
+ if more_songs > 0
112
+ do_not_have = n_random_songs(do_not_have, more_songs)
113
+ else
114
+ p "You already have #{current_songs.length} songs by this artist and are requesting a maximum of #{max_num} songs"
115
+ do_not_have = []
116
+ end
117
+ end
118
+ download_songs(do_not_have, save_dir)
119
+ end
120
+
121
+ def download_songs(song_urls, save_dir)
75
122
  save_dir = File.expand_path(save_dir)
76
123
  create_save_dir(save_dir) unless File.directory?(save_dir)
77
- #Dir.chdir(save_dir)
78
- songs.each do |song_url|
79
- download_song(song_url, save_dir)
80
- end
124
+ song_urls.each { |song_url| download_song(song_url, save_dir) }
81
125
  end
82
126
 
83
- def self.song_savename(song_url)
127
+ def song_savename(song_url)
84
128
  File.basename(song_url)
85
129
  end
86
130
 
87
- def self.song_already_exists?(savename, save_dir)
88
- if version_of_song_in_any_dir?(savename, save_dir)
89
- puts "#{savename} already exists in #{save_dir}"
131
+ def song_already_exists?(savename, save_dir)
132
+ if version_of_song_in_dir_or_subdir?(savename, save_dir)
133
+ p "#{savename} already exists in #{save_dir}"
90
134
  true
91
135
  else
92
136
  false
93
137
  end
94
138
  end
95
139
 
96
- def self.download_song(song_url, save_dir)
140
+ def download_song(song_url, save_dir)
97
141
  savename = song_savename(song_url)
98
142
  return if song_already_exists?(savename, save_dir)
99
- puts "Downloading #{savename}"
143
+ p "Downloading #{savename} to #{save_dir}"
100
144
  song_pathname = File.join(save_dir, savename)
101
145
  open(song_pathname, 'wb') do |dst|
102
146
  open(song_url) do |src|
@@ -110,7 +154,7 @@ module JimmyJukebox
110
154
  nil
111
155
  end
112
156
 
113
- def self.check_downloaded_song_size(song_pathname)
157
+ def check_downloaded_song_size(song_pathname)
114
158
  if !File.exists?(song_pathname)
115
159
  puts "Expected to see #{song_pathname} but do not see it!"
116
160
  return
@@ -122,12 +166,6 @@ module JimmyJukebox
122
166
  end
123
167
  end
124
168
 
125
- def self.version_of_song_in_current_dir?(song_filename)
126
- existing_files = Dir.entries(".").delete_if { |f| !f.match(SUPPORTED_MUSIC_TYPES) } # delete unless .mp3, .MP3, .ogg or .OGG
127
- existing_files.map! { |f| f.gsub(SUPPORTED_MUSIC_TYPES,"") } # strip extensions
128
- existing_files.include?(song_filename.gsub(SUPPORTED_MUSIC_TYPES,"")) ? true : false # does extensionless song_filename exist in directory?
129
- end
130
-
131
169
  end
132
170
 
133
171
  end
@@ -0,0 +1,154 @@
1
+ ---
2
+ - http://archive.org/download/BachGoldbergVariations/GoldbergVariations.mp3
3
+ - http://archive.org/download/Bach_Organ_Works_Concerti-10826/James_Kibbie_-_01_-_BWV_592_Concerto_in_G_-_1_Allegro.mp3
4
+ - http://archive.org/download/Bach_Organ_Works_Concerti-10826/James_Kibbie_-_02_-_BWV_592_Concerto_in_G_-_2_Grave.mp3
5
+ - http://archive.org/download/Bach_Organ_Works_Concerti-10826/James_Kibbie_-_03_-_BWV_592_Concerto_in_G_-_3_Presto.mp3
6
+ - http://archive.org/download/Bach_Organ_Works_Concerti-10826/James_Kibbie_-_04_-_BWV_593_Concerto_in_a_-_1_Allegro.mp3
7
+ - http://archive.org/download/Bach_Organ_Works_Concerti-10826/James_Kibbie_-_05_-_BWV_593_Concerto_in_a_-_2_Adagio.mp3
8
+ - http://archive.org/download/Bach_Organ_Works_Concerti-10826/James_Kibbie_-_06_-_BWV_593_Concerto_in_a_-_3_Allegro.mp3
9
+ - http://archive.org/download/Bach_Organ_Works_Concerti-10826/James_Kibbie_-_07_-_BWV_594_Concerto_in_C_-_1_Allegro.mp3
10
+ - http://archive.org/download/Bach_Organ_Works_Concerti-10826/James_Kibbie_-_08_-_BWV_594_Concerto_in_C_-_2_Recitativo_Adagio.mp3
11
+ - http://archive.org/download/Bach_Organ_Works_Concerti-10826/James_Kibbie_-_09_-_BWV_594_Concerto_in_C_-_3_Allegro.mp3
12
+ - http://archive.org/download/Bach_Organ_Works_Concerti-10826/James_Kibbie_-_10_-_BWV_595_Concerto_in_C.mp3
13
+ - http://archive.org/download/Bach_Organ_Works_Concerti-10826/James_Kibbie_-_11_-_BWV_596_Concerto_in_d_-_1_Allegro.mp3
14
+ - http://archive.org/download/Bach_Organ_Works_Concerti-10826/James_Kibbie_-_12_-_BWV_596_Concerto_in_d_-_2__3_Grave_Fuga.mp3
15
+ - http://archive.org/download/Bach_Organ_Works_Concerti-10826/James_Kibbie_-_13_-_BWV_596_Concerto_in_d_-_4_Largo_e_spiccato.mp3
16
+ - http://archive.org/download/Bach_Organ_Works_Concerti-10826/James_Kibbie_-_14_-_BWV_596_Concerto_in_d_-_5_Allegro.mp3
17
+ - http://archive.org/download/Bach_Organ_Works_Concerti-10826/James_Kibbie_-_BWV_592_Concerto_in_G_-_1_Allegro.mp3
18
+ - http://archive.org/download/Bach_Organ_Works_Concerti-10826/James_Kibbie_-_BWV_592_Concerto_in_G_-_2_Grave.mp3
19
+ - http://archive.org/download/Bach_Organ_Works_Concerti-10826/James_Kibbie_-_BWV_592_Concerto_in_G_-_3_Presto.mp3
20
+ - http://archive.org/download/Bach_Organ_Works_Concerti-10826/James_Kibbie_-_BWV_593_Concerto_in_a_-_1_Allegro.mp3
21
+ - http://archive.org/download/Bach_Organ_Works_Concerti-10826/James_Kibbie_-_BWV_593_Concerto_in_a_-_2_Adagio.mp3
22
+ - http://archive.org/download/Bach_Organ_Works_Concerti-10826/James_Kibbie_-_BWV_593_Concerto_in_a_-_3_Allegro.mp3
23
+ - http://archive.org/download/Bach_Organ_Works_Concerti-10826/James_Kibbie_-_BWV_594_Concerto_in_C_-_1_Allegro.mp3
24
+ - http://archive.org/download/Bach_Organ_Works_Concerti-10826/James_Kibbie_-_BWV_594_Concerto_in_C_-_2_Recitativo_Adagio.mp3
25
+ - http://archive.org/download/Bach_Organ_Works_Concerti-10826/James_Kibbie_-_BWV_594_Concerto_in_C_-_3_Allegro.mp3
26
+ - http://archive.org/download/Bach_Organ_Works_Concerti-10826/James_Kibbie_-_BWV_595_Concerto_in_C.mp3
27
+ - http://archive.org/download/Bach_Organ_Works_Concerti-10826/James_Kibbie_-_BWV_596_Concerto_in_d_-_1_Allegro.mp3
28
+ - http://archive.org/download/Bach_Organ_Works_Concerti-10826/James_Kibbie_-_BWV_596_Concerto_in_d_-_2__3_Grave_Fuga.mp3
29
+ - http://archive.org/download/Bach_Organ_Works_Concerti-10826/James_Kibbie_-_BWV_596_Concerto_in_d_-_4_Largo_e_spiccato.mp3
30
+ - http://archive.org/download/Bach_Organ_Works_Concerti-10826/James_Kibbie_-_BWV_596_Concerto_in_d_-_5_Allegro.mp3
31
+ - http://archive.org/download/Bach-stokowskiChaconne/Bach-stokowski-Chaconne.mp3
32
+ - http://archive.org/download/J.S.BachAir/Bach-Air.mp3
33
+ - http://archive.org/download/J.S.BachSarabande/SarabandefromPartitaNo.1InBMinor.mp3
34
+ - http://archive.org/download/JohanSebastianBach-PreludeCello/cello.mp3
35
+ - http://archive.org/download/J.S.BachGoldbergVariations/1Bach-GoldbergVariations-SarabandVar.1-15.mp3
36
+ - http://archive.org/download/J.S.BachGoldbergVariations/2Bach-GoldbergVariations-Var.16-30SarabandDaCapo.mp3
37
+ - http://archive.org/download/EllizarAbalosBachSonataEMajorMvt.II/BachEMajorSonataMvt.II.mp3
38
+ - http://archive.org/download/J.S.BachBrandenburgConcertoNo.6/I.Allegro.mp3
39
+ - http://archive.org/download/J.S.BachBrandenburgConcertoNo.6/Ii.Andante.mp3
40
+ - http://archive.org/download/J.S.BachBrandenburgConcertoNo.6/Iii.AllegroAssai.mp3
41
+ - http://archive.org/download/J.S.BachDoubleViolinConcerto/I.Vivace.mp3
42
+ - http://archive.org/download/J.S.BachDoubleViolinConcerto/Ii.LargoMaNonTroppo.mp3
43
+ - http://archive.org/download/J.S.BachDoubleViolinConcerto/Iii.Allegro.mp3
44
+ - http://archive.org/download/J.S.BachOrganWorksVol.1/1PreludeAndFugueInCMajorBwv545.mp3
45
+ - http://archive.org/download/J.S.BachOrganWorksVol.1/2FantasiaAndFugueInGMinorBwv542.mp3
46
+ - http://archive.org/download/J.S.BachOrganWorksVol.1/3FugueInGMinortheLittleBwv578.mp3
47
+ - http://archive.org/download/J.S.BachOrganWorksVol.1/4PreludeAndFugueInGMajorBwv541.mp3
48
+ - http://archive.org/download/J.S.BachOrganWorksVol.1/5PreludeAndFugueInFMinorBwv534.mp3
49
+ - http://archive.org/download/J.S.BachOrganWorksVol.1/6ToccataAndFugueInDMinorBwv565.mp3
50
+ - http://archive.org/download/J.S.BachBrandenburgConcertoNo.3/I.Allegro.mp3
51
+ - http://archive.org/download/J.S.BachBrandenburgConcertoNo.3/Ii.Allegro.mp3
52
+ - http://archive.org/download/J.S.BachBrandenburgConcertoNo.1/I.Allegro.mp3
53
+ - http://archive.org/download/J.S.BachBrandenburgConcertoNo.1/Ii.Adagio.mp3
54
+ - http://archive.org/download/J.S.BachBrandenburgConcertoNo.1/Iii.Allegro.mp3
55
+ - http://archive.org/download/J.S.BachBrandenburgConcertoNo.1/Iv.MenuettoTrio1MenuettoPolaccaMenuettoAndTrio.mp3
56
+ - http://archive.org/download/J.S.BachBrandenburgConcertoNo2/I.Allegro.mp3
57
+ - http://archive.org/download/J.S.BachBrandenburgConcertoNo2/Ii.Andante.mp3
58
+ - http://archive.org/download/J.S.BachBrandenburgConcertoNo2/Iii.AllegroAssai.mp3
59
+ - http://archive.org/download/J.S.BachBrandenburgConcertoNo.4/I.Allegro.mp3
60
+ - http://archive.org/download/J.S.BachBrandenburgConcertoNo.4/Ii.Andante.mp3
61
+ - http://archive.org/download/J.S.BachBrandenburgConcertoNo.4/Iii.Presto.mp3
62
+ - http://archive.org/download/ISGM_Podcast-The_Concert-7/theconcert7.mp3
63
+ - http://archive.org/download/J.S.BachBrandenburgConcertoNo.5/I.Allegro.mp3
64
+ - http://archive.org/download/J.S.BachBrandenburgConcertoNo.5/Ii.Affettuoso.mp3
65
+ - http://archive.org/download/J.S.BachBrandenburgConcertoNo.5/Iii.Allegro.mp3
66
+ - http://archive.org/download/J.S.BachViolinSonatas-VolumeIi/04aI.Sicilianalargo.mp3
67
+ - http://archive.org/download/J.S.BachViolinSonatas-VolumeIi/04bIi.Allegro.mp3
68
+ - http://archive.org/download/J.S.BachViolinSonatas-VolumeIi/04cIii.Adagio.mp3
69
+ - http://archive.org/download/J.S.BachViolinSonatas-VolumeIi/04dIv.Allegro.mp3
70
+ - http://archive.org/download/J.S.BachViolinSonatas-VolumeIi/05aI.Largo.mp3
71
+ - http://archive.org/download/J.S.BachViolinSonatas-VolumeIi/05bIi.Allegro.mp3
72
+ - http://archive.org/download/J.S.BachViolinSonatas-VolumeIi/05cIii.Adagio.mp3
73
+ - http://archive.org/download/J.S.BachViolinSonatas-VolumeIi/05cIv.Vivace.mp3
74
+ - http://archive.org/download/J.S.BachViolinSonatas-VolumeIi/06aI.Allegro.mp3
75
+ - http://archive.org/download/J.S.BachViolinSonatas-VolumeIi/06bIi.Largo.mp3
76
+ - http://archive.org/download/J.S.BachViolinSonatas-VolumeIi/06cIii.Allegro.mp3
77
+ - http://archive.org/download/J.S.BachViolinSonatas-VolumeIi/06dIv.Adagio.mp3
78
+ - http://archive.org/download/J.S.BachViolinSonatas-VolumeIi/06eV.Allegro.mp3
79
+ - http://archive.org/download/J.S.BachViolinSonatas-Volume1/01aI.Adagio.mp3
80
+ - http://archive.org/download/J.S.BachViolinSonatas-Volume1/01bIi.Allegro.mp3
81
+ - http://archive.org/download/J.S.BachViolinSonatas-Volume1/01cIii.Andante.mp3
82
+ - http://archive.org/download/J.S.BachViolinSonatas-Volume1/01dIv.Allegro.mp3
83
+ - http://archive.org/download/J.S.BachViolinSonatas-Volume1/02aI.Andante.mp3
84
+ - http://archive.org/download/J.S.BachViolinSonatas-Volume1/02bIi.AllegroAssai.mp3
85
+ - http://archive.org/download/J.S.BachViolinSonatas-Volume1/02cIii.AndanteUnPoco.mp3
86
+ - http://archive.org/download/J.S.BachViolinSonatas-Volume1/02dIv.Presto.mp3
87
+ - http://archive.org/download/J.S.BachViolinSonatas-Volume1/03aI.Adagio.mp3
88
+ - http://archive.org/download/J.S.BachViolinSonatas-Volume1/03bIi.Allegro.mp3
89
+ - http://archive.org/download/J.S.BachViolinSonatas-Volume1/03cIii.AdagioMaNonTanto.mp3
90
+ - http://archive.org/download/J.S.BachViolinSonatas-Volume1/03dIv.Allegro.mp3
91
+ - http://archive.org/download/J.S.BachTheSixFrenchSuites/01Allemande.mp3
92
+ - http://archive.org/download/J.S.BachTheSixFrenchSuites/02Courante.mp3
93
+ - http://archive.org/download/J.S.BachTheSixFrenchSuites/03Sarabande.mp3
94
+ - http://archive.org/download/J.S.BachTheSixFrenchSuites/04MenuetI.mp3
95
+ - http://archive.org/download/J.S.BachTheSixFrenchSuites/05MenuetIi.mp3
96
+ - http://archive.org/download/J.S.BachTheSixFrenchSuites/06Gigue.mp3
97
+ - http://archive.org/download/J.S.BachTheSixFrenchSuites/07Allemande.mp3
98
+ - http://archive.org/download/J.S.BachTheSixFrenchSuites/08Courante.mp3
99
+ - http://archive.org/download/J.S.BachTheSixFrenchSuites/09Sarabande.mp3
100
+ - http://archive.org/download/J.S.BachTheSixFrenchSuites/10Air.mp3
101
+ - http://archive.org/download/J.S.BachTheSixFrenchSuites/11Menuet.mp3
102
+ - http://archive.org/download/J.S.BachTheSixFrenchSuites/12Gigue.mp3
103
+ - http://archive.org/download/J.S.BachTheSixFrenchSuites/13Allemande.mp3
104
+ - http://archive.org/download/J.S.BachTheSixFrenchSuites/14Courante.mp3
105
+ - http://archive.org/download/J.S.BachTheSixFrenchSuites/15Sarabande.mp3
106
+ - http://archive.org/download/J.S.BachTheSixFrenchSuites/16Anglaise.mp3
107
+ - http://archive.org/download/J.S.BachTheSixFrenchSuites/17MenuetAndTrio.mp3
108
+ - http://archive.org/download/J.S.BachTheSixFrenchSuites/18Gigue.mp3
109
+ - http://archive.org/download/J.S.BachTheSixFrenchSuites/19Allemande.mp3
110
+ - http://archive.org/download/J.S.BachTheSixFrenchSuites/20Courante.mp3
111
+ - http://archive.org/download/J.S.BachTheSixFrenchSuites/21Sarabande.mp3
112
+ - http://archive.org/download/J.S.BachTheSixFrenchSuites/22Gavotte.mp3
113
+ - http://archive.org/download/J.S.BachTheSixFrenchSuites/23Menuet.mp3
114
+ - http://archive.org/download/J.S.BachTheSixFrenchSuites/24Air.mp3
115
+ - http://archive.org/download/J.S.BachTheSixFrenchSuites/25Gigue.mp3
116
+ - http://archive.org/download/J.S.BachTheSixFrenchSuites/26Allemande.mp3
117
+ - http://archive.org/download/J.S.BachTheSixFrenchSuites/27Courante.mp3
118
+ - http://archive.org/download/J.S.BachTheSixFrenchSuites/28Sarabande.mp3
119
+ - http://archive.org/download/J.S.BachTheSixFrenchSuites/29Gavotte.mp3
120
+ - http://archive.org/download/J.S.BachTheSixFrenchSuites/30Boure.mp3
121
+ - http://archive.org/download/J.S.BachTheSixFrenchSuites/31Loure.mp3
122
+ - http://archive.org/download/J.S.BachTheSixFrenchSuites/32Gigue.mp3
123
+ - http://archive.org/download/J.S.BachTheSixFrenchSuites/33Allemande.mp3
124
+ - http://archive.org/download/J.S.BachTheSixFrenchSuites/34Courante.mp3
125
+ - http://archive.org/download/J.S.BachTheSixFrenchSuites/35Sarabande.mp3
126
+ - http://archive.org/download/J.S.BachTheSixFrenchSuites/36Gavotte.mp3
127
+ - http://archive.org/download/J.S.BachTheSixFrenchSuites/37Polonaise.mp3
128
+ - http://archive.org/download/J.S.BachTheSixFrenchSuites/38Boure.mp3
129
+ - http://archive.org/download/J.S.BachTheSixFrenchSuites/39Menuet.mp3
130
+ - http://archive.org/download/J.S.BachTheSixFrenchSuites/40Gigue.mp3
131
+ - http://archive.org/download/ISGM_Podcast-The_Concert-22/theconcert22.mp3
132
+ - http://archive.org/download/J.S.BachViolinConcertoInEMajor-busch/01I.Allegro.mp3
133
+ - http://archive.org/download/J.S.BachViolinConcertoInEMajor-busch/02Ii.Adagio.mp3
134
+ - http://archive.org/download/J.S.BachViolinConcertoInEMajor-busch/03Iii.AllegroAssai.mp3
135
+ - http://archive.org/download/J.S.BachOrchestralSuiteNo.3InDMajor/01I.Overture.mp3
136
+ - http://archive.org/download/J.S.BachOrchestralSuiteNo.3InDMajor/02Ii.Air.mp3
137
+ - http://archive.org/download/J.S.BachOrchestralSuiteNo.3InDMajor/03Iii.Gavotte.mp3
138
+ - http://archive.org/download/J.S.BachOrchestralSuiteNo.3InDMajor/04Iv.Boure.mp3
139
+ - http://archive.org/download/J.S.BachOrchestralSuiteNo.3InDMajor/05V.Gigue.mp3
140
+ - http://archive.org/download/J.S.BachOrchestralSuiteNo.2InBMinor/01I.Overture.mp3
141
+ - http://archive.org/download/J.S.BachOrchestralSuiteNo.2InBMinor/02Ii.Rondeau.mp3
142
+ - http://archive.org/download/J.S.BachOrchestralSuiteNo.2InBMinor/03Iii.Sarabande.mp3
143
+ - http://archive.org/download/J.S.BachOrchestralSuiteNo.2InBMinor/04Iv.BoureIBoureIi.mp3
144
+ - http://archive.org/download/J.S.BachOrchestralSuiteNo.2InBMinor/05V.Polonaise.mp3
145
+ - http://archive.org/download/J.S.BachOrchestralSuiteNo.2InBMinor/06Vi.Menuet.mp3
146
+ - http://archive.org/download/J.S.BachOrchestralSuiteNo.2InBMinor/07Vii.Badinerie.mp3
147
+ - http://archive.org/download/ISGM_Podcast-The_Concert-12/theconcert12.mp3
148
+ - http://archive.org/download/BachViolinConcertoInEoistrakh-dg/1-04Bach_ViolinConcerto2InEBwv1042-1.Allegro.mp3
149
+ - http://archive.org/download/BachViolinConcertoInEoistrakh-dg/1-05Bach_ViolinConcerto2InEBwv1042-2.Adagio.mp3
150
+ - http://archive.org/download/BachViolinConcertoInEoistrakh-dg/1-06Bach_ViolinConcerto2InEBwv1042-3.AllegroAssai.mp3
151
+ - http://archive.org/download/J.s.bachConcertoForPianoAndOrchestraNo.5InFMinorBwv1056_Ii/J.s.bachConcertoForPianoAndOrchestraNo.5InFMinorBwv1056_Ii.LargoGlennGould.mp3
152
+ - http://archive.org/download/Bach2-violinConcertod.I.OistrakhGoosens/1-07Bach_ConcertoInDMinorFor2ViolinsBwv1043_double_-1.Vivace.mp3
153
+ - http://archive.org/download/Bach2-violinConcertod.I.OistrakhGoosens/1-08Bach_ConcertoInDMinorFor2ViolinsBwv1043_double_-2.LargoMaNonTanto.mp3
154
+ - http://archive.org/download/Bach2-violinConcertod.I.OistrakhGoosens/1-09Bach_ConcertoInDMinorFor2ViolinsBwv1043_double_-3.Allegro.mp3