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.
- data/lib/jimmy_jukebox/artists.rb +8 -3
- data/lib/jimmy_jukebox/jukebox.rb +12 -1
- data/lib/jimmy_jukebox/load_jukebox_code.rb +17 -4
- data/lib/jimmy_jukebox/song.rb +6 -3
- data/lib/jimmy_jukebox/song_loader.rb +78 -40
- data/lib/jimmy_jukebox/songs/Bach.yml +154 -0
- data/lib/jimmy_jukebox/songs/Beethoven.yml +0 -1
- data/lib/jimmy_jukebox/songs/Chopin.yml +48 -0
- data/lib/jimmy_jukebox/songs/FranzSchubert.yml +39 -0
- data/lib/jimmy_jukebox/songs/Haydn.yml +48 -0
- data/lib/jimmy_jukebox/songs/Mendelssohn.yml +58 -0
- data/lib/jimmy_jukebox/songs/Mozart.yml +142 -0
- data/lib/jimmy_jukebox/songs/Vivaldi.yml +53 -0
- data/lib/jimmy_jukebox/user_interface.rb +4 -1
- data/lib/jimmy_jukebox/version.rb +2 -2
- data/spec/song_loader_spec.rb +124 -47
- data/spec/song_spec.rb +14 -0
- metadata +13 -6
@@ -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
|
-
|
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
|
-
|
27
|
-
|
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
|
-
|
42
|
+
JimmyJukebox::SongLoader.new.send(artist_name(ARGV[0]))
|
30
43
|
end
|
data/lib/jimmy_jukebox/song.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
20
|
+
class SongLoader
|
20
21
|
|
21
|
-
|
22
|
+
MUSIC_TYPES = /\.mp3$|\.ogg$/i
|
22
23
|
|
23
|
-
|
24
|
+
attr_reader :user_config
|
24
25
|
|
25
|
-
|
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
|
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
|
-
|
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
|
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
|
45
|
-
|
46
|
-
|
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
|
51
|
-
existing_files = Dir.
|
52
|
-
|
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(
|
56
|
-
existing_files.map
|
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
|
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
|
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
|
-
|
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
|
127
|
+
def song_savename(song_url)
|
84
128
|
File.basename(song_url)
|
85
129
|
end
|
86
130
|
|
87
|
-
def
|
88
|
-
if
|
89
|
-
|
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
|
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
|
-
|
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
|
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
|