Re: howto: making drums

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxxxxxxxxxxxx
http://lists.linuxaudio.org/mailman/listinfo/linux-audio-user

[Index of Archives]     [Linux Sound]     [ALSA Users]     [Pulse Audio]     [ALSA Devel]     [Sox Users]     [Linux Media]     [Kernel]     [Photo Sharing]     [Gimp]     [Yosemite News]     [Linux Media]

  Powered by Linux