jimmy_jukebox 0.4.3 → 0.4.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -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