Re: [LAU] howto: making drums

From: Atte André Jensen <atte.jensen@email-addr-hidden>
Date: Sun Apr 06 2008 - 17:30:46 EEST

schoappied wrote:

> Do you use hydrogen or midi to make drum parts for your songs?

midi (muse) and samples (specimen)

> Are there nice drum hydrogen files available? where?
> Are there nice drum midi files available? Where?

Ok, this made me download hydrogen and indeed it has some nice kits
(each within it's own directory, most of them wav). I also had a few
collections of samples of old drummachines laying around, which made me
play around with specimen.

So I wrote the attached python-script, that simply makes a .beef
(specimen file) from all .wav-files in a directory. It'll assign every
sample on a new note chromatically from a given note (default is 36), so
it's mostly useful for drums.

I think it's gonna allow me to make noise more easily :-) I post it here
in the hope others might find it useful too...

-- 
peace, love & harmony
Atte
http://atte.dk       | http://myspace.com/attejensen
http://anagrammer.dk | http://modlys.dk

#!/usr/bin/env python
# -*- coding: latin-1 -*-
import os, optparse, sys, os.path, wave

parser = optparse.OptionParser()

if '-?' in sys.argv:
    sys.argv.remove('-?')
    sys.argv.append('-h')

parser.add_option('-d','--directory-containing-wavs', dest="wavDir", default='.')
parser.add_option('-l','--lowest-note-of-mapping', dest="startNote", default='36')
parser.add_option('-f','--force-overwrite', action="store_true", dest="forceOverwrite", default=False)
parser.add_option('-s','--stdout', action="store_true", dest="stdOut", default=False)
parser.add_option('-o','--outfile', dest="outFile")
(options, args) = parser.parse_args()

def getDir(dir):
    result = []
    import os.path
    path = os.path.abspath(dir) + '/'
    list = os.listdir(dir)
    for file in list:
        (root, ext) = os.path.splitext(file)
        if os.path.isfile(path + file) and ext in ['.wav','.WAV']:
            result.append(path + file)
    return result

header = """<?xml version="1.0"?>
<beef>"""
patch = """ <patch>
    <name>%s</name>
    <file>%s</file>
    <channel>0</channel>
    <note>%s</note>
    <volume>1,000000</volume>
    <pan>0,000000</pan>
    <play_mode>5</play_mode>
    <cut>0</cut>
    <cut_by>0</cut_by>
    <range>0</range>
    <lower_note>%s</lower_note>
    <upper_note>%s</upper_note>
    <sample_start>0</sample_start>
    <sample_stop>%s</sample_stop>
    <loop_start>0</loop_start>
    <loop_stop>%s</loop_stop>
    <cutoff>1,000000</cutoff>
    <resonance>0,000000</resonance>
    <pitch>0,000000</pitch>
    <pitch_steps>2</pitch_steps>
    <portamento>no</portamento>
    <portamento_time>0,050000</portamento_time>
    <monophonic>no</monophonic>
    <legato>no</legato>
    <volume_a>0,000000</volume_a>
    <volume_env_on>no</volume_env_on>
    <volume_amt>0,000000</volume_amt>
    <volume_d>0,000000</volume_d>
    <volume_s>1,000000</volume_s>
    <volume_r>0,000000</volume_r>
    <volume_delay>0,000000</volume_delay>
    <volume_hold>0,000000</volume_hold>
    <volume_lfo_amt>0,000000</volume_lfo_amt>
    <volume_lfo_on>no</volume_lfo_on>
    <volume_vel_amt>1,000000</volume_vel_amt>
    <volume_lfo_a>0,000000</volume_lfo_a>
    <volume_lfo_delay>0,000000</volume_lfo_delay>
    <volume_lfo_beats>1,000000</volume_lfo_beats>
    <volume_lfo_freq>1,000000</volume_lfo_freq>
    <volume_lfo_global>no</volume_lfo_global>
    <volume_lfo_sync>no</volume_lfo_sync>
    <volume_lfo_positive>no</volume_lfo_positive>
    <volume_lfo_shape>sine</volume_lfo_shape>
    <panning_a>0,000000</panning_a>
    <panning_env_on>no</panning_env_on>
    <panning_amt>0,000000</panning_amt>
    <panning_d>0,000000</panning_d>
    <panning_s>1,000000</panning_s>
    <panning_r>0,000000</panning_r>
    <panning_delay>0,000000</panning_delay>
    <panning_hold>0,000000</panning_hold>
    <panning_lfo_amt>0,000000</panning_lfo_amt>
    <panning_lfo_on>no</panning_lfo_on>
    <panning_vel_amt>0,000000</panning_vel_amt>
    <panning_lfo_a>0,000000</panning_lfo_a>
    <panning_lfo_delay>0,000000</panning_lfo_delay>
    <panning_lfo_beats>1,000000</panning_lfo_beats>
    <panning_lfo_freq>1,000000</panning_lfo_freq>
    <panning_lfo_global>no</panning_lfo_global>
    <panning_lfo_sync>no</panning_lfo_sync>
    <panning_lfo_positive>no</panning_lfo_positive>
    <panning_lfo_shape>sine</panning_lfo_shape>
    <cutoff_a>0,000000</cutoff_a>
    <cutoff_env_on>no</cutoff_env_on>
    <cutoff_amt>0,000000</cutoff_amt>
    <cutoff_d>0,000000</cutoff_d>
    <cutoff_s>1,000000</cutoff_s>
    <cutoff_r>0,000000</cutoff_r>
    <cutoff_delay>0,000000</cutoff_delay>
    <cutoff_hold>0,000000</cutoff_hold>
    <cutoff_lfo_amt>0,000000</cutoff_lfo_amt>
    <cutoff_lfo_on>no</cutoff_lfo_on>
    <cutoff_vel_amt>0,000000</cutoff_vel_amt>
    <cutoff_lfo_a>0,000000</cutoff_lfo_a>
    <cutoff_lfo_delay>0,000000</cutoff_lfo_delay>
    <cutoff_lfo_beats>1,000000</cutoff_lfo_beats>
    <cutoff_lfo_freq>1,000000</cutoff_lfo_freq>
    <cutoff_lfo_global>no</cutoff_lfo_global>
    <cutoff_lfo_sync>no</cutoff_lfo_sync>
    <cutoff_lfo_positive>no</cutoff_lfo_positive>
    <cutoff_lfo_shape>sine</cutoff_lfo_shape>
    <resonance_a>0,000000</resonance_a>
    <resonance_env_on>no</resonance_env_on>
    <resonance_amt>0,000000</resonance_amt>
    <resonance_d>0,000000</resonance_d>
    <resonance_s>1,000000</resonance_s>
    <resonance_r>0,000000</resonance_r>
    <resonance_delay>0,000000</resonance_delay>
    <resonance_hold>0,000000</resonance_hold>
    <resonance_lfo_amt>0,000000</resonance_lfo_amt>
    <resonance_lfo_on>no</resonance_lfo_on>
    <resonance_vel_amt>0,000000</resonance_vel_amt>
    <resonance_lfo_a>0,000000</resonance_lfo_a>
    <resonance_lfo_delay>0,000000</resonance_lfo_delay>
    <resonance_lfo_beats>1,000000</resonance_lfo_beats>
    <resonance_lfo_freq>1,000000</resonance_lfo_freq>
    <resonance_lfo_global>no</resonance_lfo_global>
    <resonance_lfo_sync>no</resonance_lfo_sync>
    <resonance_lfo_positive>no</resonance_lfo_positive>
    <resonance_lfo_shape>sine</resonance_lfo_shape>
    <pitch_a>0,000000</pitch_a>
    <pitch_env_on>no</pitch_env_on>
    <pitch_amt>0,000000</pitch_amt>
    <pitch_d>0,000000</pitch_d>
    <pitch_s>1,000000</pitch_s>
    <pitch_r>0,000000</pitch_r>
    <pitch_delay>0,000000</pitch_delay>
    <pitch_hold>0,000000</pitch_hold>
    <pitch_lfo_amt>0,000000</pitch_lfo_amt>
    <pitch_lfo_on>no</pitch_lfo_on>
    <pitch_vel_amt>0,000000</pitch_vel_amt>
    <pitch_lfo_a>0,000000</pitch_lfo_a>
    <pitch_lfo_delay>0,000000</pitch_lfo_delay>
    <pitch_lfo_beats>1,000000</pitch_lfo_beats>
    <pitch_lfo_freq>1,000000</pitch_lfo_freq>
    <pitch_lfo_global>no</pitch_lfo_global>
    <pitch_lfo_sync>no</pitch_lfo_sync>
    <pitch_lfo_positive>no</pitch_lfo_positive>
    <pitch_lfo_shape>sine</pitch_lfo_shape>
  </patch>"""
footer = "</beef>"

# --- the action ----
output = []
output.append(header)
note = int(options.startNote)
for file in getDir(options.wavDir):
    (head, tail) = os.path.split(file)
    (basename, ext) = os.path.splitext(tail)
    wav = wave.open(file)
    end = wav.getnframes() -1
    values = (basename,file,note, note, note, end, end)
    output.append(patch % values)
    note = note + 1

output.append(footer)
    
if options.stdOut == True:
    print '\n'.join(output)
    sys.exit()

if not options.outFile:
    options.outFile = options.wavDir.strip('/').split('/')[-1:][0] + '.beef'

if not os.path.exists(options.outFile) or options.forceOverwrite:
    FILE = open(options.outFile,"w")
    for line in output:
        FILE.write(line)
else:
    print 'outfile "' + options.outFile + '" exists, use -f to force overwrite'

_______________________________________________
Linux-audio-user mailing list
Linux-audio-user@email-addr-hidden
http://lists.linuxaudio.org/mailman/listinfo/linux-audio-user
Received on Sun Apr 6 20:15:04 2008

This archive was generated by hypermail 2.1.8 : Sun Apr 06 2008 - 20:15:04 EEST