Ver código fonte

new sounds, ui tweaks

woelper 4 anos atrás
pai
commit
945e7a078c

+ 2 - 2
Cargo.lock

@@ -1145,9 +1145,9 @@ dependencies = [
 
 [[package]]
 name = "regex-syntax"
-version = "0.6.14"
+version = "0.6.15"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b28dfe3fe9badec5dbf0a79a9cccad2cfc2ab5484bdb3e44cbd1ae8b3ba2be06"
+checksum = "7246cd0a0a6ec2239a5405b2b16e3f404fa0dcc6d28f5f5b877bf80e33e0f294"
 
 [[package]]
 name = "rodio"

BIN
media/c64sid-ch1.wav


BIN
media/c64sid-ch4.wav


BIN
media/c64sid-ch5.wav


BIN
media/c64sid-fooh.wav


BIN
media/c64sid-kick2.wav


BIN
media/c64sid-kick4.wav


BIN
media/c64sid-kick5.wav


BIN
media/c64sid-kick6.wav


BIN
media/c64sid-snare01.wav


BIN
media/c64sid-snare03.wav


BIN
media/c64sid-snare07.wav


BIN
media/c64sid-snare12.wav


BIN
media/cc0/hihat_lowfi.wav


BIN
media/cc0/hihat_lowfi2.wav


BIN
media/cc0/hihiat_closed.wav


BIN
media/cc0/hihiat_open.wav


BIN
media/cc0/hihiat_real.wav


BIN
media/cc0/hihiat_subtle.wav


BIN
media/cc0/kick_edm.wav


BIN
media/cc0/kick_hardstyle.wav


BIN
media/cc0/kick_insane.wav


BIN
media/cc0/kick_low.wav


BIN
media/cc0/kick_rough.wav


BIN
media/cc0/ride_bell.wav


BIN
media/cc0/ride_bell2.wav


BIN
media/cc0/ride_crisp.wav


BIN
media/cc0/ride_electronic1.wav


BIN
media/cc0/snare_deep.wav


BIN
media/cc0/snare_jungle.wav


BIN
media/cc0/snare_lite.wav


BIN
media/cc0/snare_lowfi.wav


BIN
media/cc0/snare_organic.wav


BIN
media/cc0/snare_punchy.wav


BIN
media/cc0/snare_sharp.wav


BIN
media/cc0/splash_electronic.wav


+ 5 - 5
sampler.ini

@@ -9,8 +9,8 @@ Size=300,100
 Collapsed=0
 
 [Window][sources]
-Pos=400,73
-Size=246,527
+Pos=749,45
+Size=246,549
 Collapsed=0
 
 [Window][ImGui Demo]
@@ -29,7 +29,7 @@ Size=328,168
 Collapsed=0
 
 [Window][sound]
-Pos=60,43
+Pos=38,33
 Size=290,168
 Collapsed=0
 
@@ -39,7 +39,7 @@ Size=300,100
 Collapsed=0
 
 [Window][pattern]
-Pos=39,237
-Size=523,173
+Pos=70,211
+Size=541,218
 Collapsed=0
 

+ 20 - 8
src/base.rs

@@ -1,4 +1,4 @@
-use std::path::PathBuf;
+use std::path::{Path, PathBuf};
 // use std::io::BufReader;
 use std::thread;
 use std::time::Duration;
@@ -38,12 +38,14 @@ impl AsRef<[u8]> for Sound {
 
 impl Sound {
     pub fn new(filename: &str) -> std::io::Result<Sound> {
+        let path = PathBuf::from(filename);
         let mut buf = Vec::new();
         let mut file = File::open(filename)?;
         file.read_to_end(&mut buf)?;
         Ok(Sound{
             data: Arc::new(buf),
-            name: filename.to_string(),
+            name: path.file_name().unwrap_or_default().to_string_lossy().to_string(),
+            location: path,
             volume: 1.0,
             speed: 1.0,
             ..Default::default()
@@ -73,7 +75,7 @@ impl Sound {
         // let s = self.decoder().convert_samples()
         rodio::play_raw(&device, self.decoder()
         .speed(self.speed)
-        .amplify(0.1)
+        .amplify(self.volume)
         .convert_samples());
         // self.active = true;
 
@@ -99,7 +101,6 @@ impl Default for Pattern {
     }
 }
 
-
 impl Pattern {
     pub fn play_mut(&mut self, device: &rodio::Device) {
         let delay = ((60.0 / self.bpm as f32)*1000.0) as u64;
@@ -131,10 +132,21 @@ impl Pattern {
         }
     }
 
-    pub fn load(file: &str) -> Pattern {
-        let reader = BufReader::new(File::open(file).unwrap());
-        let pattern: Pattern = serde_json::from_reader(reader).unwrap();
-        pattern
+    pub fn load(file: &Path) -> Result<Pattern, String> {
+        match File::open(file) {
+            Ok(f) => {
+                serde_json::from_reader(BufReader::new(f))
+                    .map_err(|e| e.to_string())
+            }
+            Err(e) => Err(e.to_string())
+        }
+    }
+
+    pub fn save(&self) {
+        let pattern_dir = Path::new("patterns");
+
+        let writer = BufWriter::new(File::create(pattern_dir.join(&self.name).with_extension("pat")).unwrap());
+        serde_json::to_writer_pretty(writer, &self).unwrap();
     }
 
     pub fn extend_length(&mut self, slots: usize) {

+ 38 - 11
src/main.rs

@@ -12,7 +12,7 @@ use walkdir::WalkDir;
 mod support_ogl;
 // mod support_glium;
 use env_logger;
-use log::*;
+// use log::*;
 
 fn collect_sounds (root: &str) -> Vec<Sound> {
     WalkDir::new(root)
@@ -25,6 +25,16 @@ fn collect_sounds (root: &str) -> Vec<Sound> {
 }
 
 
+fn collect_patterns (root: &str) -> Vec<Pattern> {
+    WalkDir::new(root)
+    .into_iter()
+    .filter_map(|e| e.ok())
+    .filter(|e| e.path().is_file())
+    .map(|f| Pattern::load(f.path()))
+    .filter_map(|e| e.ok())
+    .collect()
+}
+
 fn main() {
     env_logger::init();
     let dev = rodio::default_output_device().unwrap();
@@ -43,6 +53,7 @@ fn main() {
     // let mut active_bar = &mut timeline.patterns[0].bars[0];
     let mut active_pattern = Pattern::default();
     let mut active_sound: Option<Sound> = None;
+    let mut active_pattern_name = ImString::new("dsd");
     // let mut active_pattern = &mut timeline.patterns[0];
 
 
@@ -83,6 +94,9 @@ fn main() {
                 });
             });
 
+
+
+        // PATTERN WINDOW ====================================
         Window::new(im_str!("pattern"))
             .size([300.0, 100.0], Condition::FirstUseEver)
             .build(ui, || {
@@ -96,15 +110,32 @@ fn main() {
                     active_pattern.extend_row(1);
                 }
 
+                // if ui.input_text(&im_str!("name"), &mut active_pattern_name).build() {
+                //     dbg!(&active_pattern_name);
+                // }
+
+         
+
+                let mut imstr_name = ImString::from(active_pattern.name.clone());
+                if ui.input_text(&im_str!("yo"), &mut imstr_name)
+                    .resize_buffer(true)
+                    .build() {
+                    // dbg!(&active_pattern_name);
+                    active_pattern.name = imstr_name.to_string();
+                };
+
+                if ui.small_button(&im_str!("save")) {active_pattern.save();}
+                if ui.small_button(&im_str!("load")) {}
+
                 ui.same_line(0.0);
-                if ui.small_button(&im_str!("ply")) {
+                if ui.small_button(&im_str!("play")) {
                     active_pattern.play_mut(&dev);
                 }
 
                 ui.drag_int(im_str!("repeat"), &mut active_pattern.repeat)
-                .max(32)
-                .speed(0.05)
-                .build();
+                    .max(32)
+                    .speed(0.05)
+                    .build();
                 
                 ui.drag_int(im_str!("bpm"), &mut active_pattern.bpm).build();
 
@@ -141,10 +172,6 @@ fn main() {
                             println!("r{}c{}", row_idx, snd_idx);
                             active_pattern.sounds[row_idx][snd_idx] = active_sound.clone();
                         }
-
-                      
-                     
-
                     }
 
 
@@ -165,8 +192,8 @@ fn main() {
                     ui.text(im_str!("name   {}", s.name));
                     // let _ = DragFloat::new()
                     ui.drag_float(im_str!("volume"), &mut s.volume)
-                        .min(0.0)
-                        .max(1.0)
+                        .min(-1.0)
+                        .max(2.0)
                         .speed(0.01)
                         .build();
                     ui.drag_float(im_str!("speed"), &mut s.speed)