===== Assorted Linux Scripts, Tools, Tips and Utilities =====
.
.
==== wav file to specimen bank (sampler format) script ====
* see here: [[/wiki/scripts_wav2specimen| wav2specimen ]]
\\
==== lscp2rgd - linuxsampler to rosegarden instrument ====
* see: [[/wiki/script_lscp2rgd]]
\\
==== midi to hydrogen ====
* [[/wiki/script_midi2hydrogen| convert drums of a midi file to hydrogen format ]]
\\
==== SFZ (sound-bank-definition) to Hydrogen (drumkit xml-file) ====
* [[/wiki/user/emrum/sfz_to_h2| sfz to hydrogen script ]]
\\
==== script: create a hydrogen drumkit from wav files ===
thanks to Thijs van Severen
[[http://audio-and-linux.blogspot.de/2012/04/hydrogen-drumkit-creator-script.html| Hydrogen drumkit creator script ]] - note: filenames have to follow a rule
\\
[[http://www.hydrogen-music.org/hcms/node/5#sect.pattern_editor.drumkit| Instrument mapping (Hydrogen Manual) ]]
\\
[[http://www.mindwaremusic.com/SoundsetterHelp/scr/GMDrumMap.html| GM (general midi) mapping ]]
\\
==== aj-snapshot - Store ALSA and JACK connections state ====
[[http://aj-snapshot.sourceforge.net/]]
.
==== Download songs of an *.m3u File (mp3 collection) ====
Make a directory and then do this:
wget -O - http://djcj.org/audio/lam/lam-tracks-2010/lam10.m3u | while read i; do wget -c "$i"; done
(by Ken Restivo - 16. Mai 2011 22:06 - @lau-ml)
.
==== make a *.wav swing (?) ====
[[http://all-day-breakfast.com/m/swing.sh]]
[[http://musicmachinery.com/2010/05/21/the-swinger/| Comparable (?) examples]]
(by Chris Cannam - 2. Juni 2010 16:41 - @lau-ml )
.
==== jackctl - jack control python script ====
[[http://www.akjmusic.com/software/]]
[[http://www.akjmusic.com/software/jackctl20110317.py]]
(by Aaron Krister Johnson, 28. Mai 2010 18:16 - @lau-ml)
.
==== a python script for making seamless loops in samples by cross fading ====
It uses sox and ecasound for processing and should work with wav, aiff and flac (maybe more).
planned (?): libsndfile support.
[[http://atte.dk/files/xfade_loop]]
(by Atte André Jensen, 11. Juni 2010 11:02 - @ lau-ml )
.
==== convert a Hydrogen drumkit into a SF2 soundfont ====
[[http://code.google.com/p/hydro2sf2/]]
.
==== conversion examples with mplayer / mencoder ====
=== wav to mp3 ===
for F in *.aac; do
mplayer -ao pcm:file=$F.wav $F
lame -h $F.wav $F.mp3;
done
(by Julien Claassen , 25. Dezember 2010 02:37 - @ lau-ml )
.
#!/bin/bash
# flac_to_mp3
for f in *.mp3; do lame -v "$f"; done
(James Morris,22. September 2010 11:20)
$ find . -name "*flac" -exec lame -V0 {} \;
(Roger, 22. September 2010 12:52)
=== Using MEncoder to create DVD-compliant files ===
[[http://www.mplayerhq.hu/DOCS/HTML/en/menc-feat-vcd-dvd.html]]
.
=== convert DV files to DVD compliant ===
[[http://florin.myip.org/soft/conv-dvd/]]
.
==== convert sound files with libsndfile ====
=== convert all FLAC files in a directory to OGA format (vorbis-encoded stream in ogg-container) ===
\\
** Note: ** There is a simple and excellent GUI tool available for audio conversion: [[http://soundconverter.org/| SoundConverter ]] \\
It is included in the ubuntu repository.
\\
\\
\\
#!/bin/bash
## UPDATE: sndfile-convert -vorbis normalizes the sound to 0 DB !
## there are no options to control that, or compression rate.
## so rather use "oggenc" instead !
## there is also a py-script called "dir2ogg" in ubuntu
# initial code by Emanuel Rumpf 2012-04
# any re-use and modification permitted
# convert all FLAC files in a directory to OGA format
# (compressed, vorbis-encoded stream in ogg-container)
#
# USAGE:
# first install libsndfile - in ubuntu:
# sudo apt-get install libsndfile1 sndfile-programs sndfile-tools
#
# copy this script to the files directory, make it executable
# edit config options below if necessary, run it
# TODO: allow file-names with spaces
# CONFIGURE HERE
# select file extension:
EXT_OLD=".flac"
EXT_NEW=".oga"
# select directory for new vfiles
OUT_DIR="./oggs/"
# add -vorbis parameter to sndfile-convert call
CONVERT_OPT="-vorbis"
# CODE START
mkdir -p "$OUT_DIR"
# apply to all flac files in current directory
FILES=*${EXT_OLD}
for f in $FILES
do
fn=`basename "$f" $EXT_OLD`
fn="${OUT_DIR}${fn}${EXT_NEW}"
comm="sndfile-convert $CONVERT_OPT $f $fn "
echo "--> $comm "
$comm
echo ""
done
\\
\\
# There is a possilbe alternative, with "find" and -exec statement
#
# warning: this is not verbose and can take some time !
# for all files in current directory (.) execute libsndfile-convert
#
find . -name "*.flac" -exec sndfile-convert -vorbis '{}' '{}'.oga \;
.
==== conversion examples with sox ====
convert a .wav file to raw PCM - here 8bit (''-b 8'') signed integer (''-e signed''), stereo (''-c 2''):
sox INFILE.wav -t raw -r 48k -e signed -b 8 -c 2 OUTFILE.raw
convert raw CD digital audio (16-bit, signed-integer) to floating point wav:
sox input.cdda -e float output1.wav
generate (''-n'' = NULL input) a .wav file with a 3 second sine-sweep:
sox -n OUTFILE.wav synth 3 sine 300-3300 gain -5
The format-options must be given before the filename for which they're intended. If unspecified they are read from the file header (if possible):
Synopsis:
sox [global-options] [format-options] infile1 \
[[format-options] infile2] ... \
[format-options] outfile \
[effect [effect-options]] ...
Common encoding-types for ''-e'': signed, unsigned, float. see ''man sox'' for a complete reference.
==== conversion examples with ecasound ====
FIXME
.
==== move regions, markers, temi in an Ardour session ====
A script to slide every regions, markers, tempi, meters, automations, and so on in an Ardour session.
"Actually, it's not really a solution, as one can move only ALL REGIONS,..."
by Aurélien
[[http://lists.linuxaudio.org/pipermail/linux-audio-user/2011-June/079213.html| announce mail]]
[[http://lists.linuxaudio.org/pipermail/linux-audio-user/attachments/20110617/50c10587/attachment.obj| Download (tar.gz ?)]]
.
==== spaces to underscores ====
#! /bin/bash
#
# spaces2underscores.sh
echo
echo "This command changes all spaces in file names into underscores"
echo " for ALL FILES IN THIS DIRECTORY !"
echo " Type ENTER to continue or ^C to quit"
read dummy
for f in *; do
oldname=`echo $f |sed 's/ /~/g'`
newname=`echo $f |sed 's/ /_/g'`
if [ $oldname != $newname ]
then
echo mv $f $newname
mv "$f" $newname
fi
done
(Marc Groenewegen, 25. September 2010 08:49 )
.
.
==== Extract Audio from Video and recombine ====
(help by Robin Gareus @lau-ml)
=== with ffmpeg ===
#extract audio
ffmpeg -i orig_video.wmv audio_out.wav
#replace audio
ffmpeg \
-i orig_video.wmv \
-i new_audio.wav \
-vcodec copy \
-map 0.0 -map 1.0 \
new_video.wmv
Details: The "map" may be different depending on the .wmv file.
run `ffprobe` to see which is the video-track in the .wmv file
usually this is "0.0".
Stream #0.0: Video:...
Stream #0.1: Audio: ..
and "1.0" corresponds to the 2nd input file - your new audio.
You may want to add "-acodec wmav2" and "-ar 128k" options for 128kbit/s
Windows Media Audio 2 or whatever audio-codec/quality your want. `ffmpeg
-codecs | grep "EA"` gives you a list of available codecs for Encoding
Audio.
BTW. Ardour3 with videotimeline patch can do all this for you.
import,extract,re-encode using ffmpeg.
>> Thanks. It is 0:0 and 0:1 and -b:a=192k I found, but I have some sync problems after recombining tho. Any other ideas?
My gut feeling is to blame ffmpeg's WMV muxer (it may not be able to mux
a bit-exact copy of the original video with your new soundtrack).
Try using '-sameq' instead of '-vcodec copy' (re-encode the video with
same quality rather than a bit-exact copy - this often solves muxing
issues but will cause a small loss of either video quality or increased
bandwidth).
and also try a different output format eg. 'new_video.avi' or '..mov'
instead of 'new_video.wmv'.
you may need both, this should work:
'ffmpeg -i vid.wmv -i aud.wav -sameq -map 0.0 -map 1.0 output.avi'
\\
=== with mencoder ===
[[http://savvyadmin.com/extract-audio-from-video-files-to-wav-using-mplayer/]]
\\
=== posssibly other options ===
\\
* kdenlive
* ardour3 + video patch
\\
\\
==== JACKdbus - Desktop integration - backend-switching ====
* [[http://gareus.org/blog/jack2dbus| jack2 backend switching ]]
* [[http://gareus.org/wiki/jack2contol|jack2 dbus control ]]
\\
\\
==== save and restore irq process priorities ====
\\
#!/bin/bash
#
# rtirq_power: save and restore irq process priorities
#
# This script is called when a change in power status happens, when
# suspending it saves a list of all irq process priorities, when
# resuming it changes the priorities of the proper irq processes
# to the saved values
#
# Copyright (c) 2012 Fernando Lopez-Lezcano
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
. "${PM_FUNCTIONS}"
case $1 in
hibernate|suspend)
/bin/ps -eo rtprio=,comm= --sort -rtprio | /bin/egrep ' irq/[0-9]*' | savestate rtirq
;;
thaw|resume)
restorestate rtirq | while read IRQPRIO IRQCOMM ; do
if [ -n "${IRQPRIO}" -a -n "${IRQCOMM}" ] ; then
IRQPID=`/bin/ps -e -o pid,comm | grep " ${IRQCOMM}" | awk '{print $1}'`
if [ -n "${IRQPID}" ] ; then
PRIO=`/bin/ps -p ${IRQPID} -o rtprio=`
if [ ${PRIO} -ne ${IRQPRIO} ] ; then
/usr/bin/chrt -f -p ${IRQPRIO} ${IRQPID}
fi
fi
fi
done
;;
*) exit $NA
;;
esac
\\
.
A first try at using a pm-utils script. This script saves the priority state of all irq* processes and restores them after a resume. It only restores the priority for processes that still exist after the resume, and will do nothing for new processes (ie: you plugin a usb card while the computer is sleeping). That would be taken care by my previously posted udev script which would change priority of newly inserted soundcards. I put 05rtirq it in /etc/pm/sleep.d/ directory... it seems to be working fine in my laptop.
\\
\\
\\
\\
\\
===== Tips =====
\\
==== use a proper python shell ====
\\
(by Torben Hohn, 28. September 2010 01:16 )
\\
ipython is there for quite some time.
and i recently discovered bpython
* [[http://ipython.scipy.org/moin/]]
* [[http://bpython-interpreter.org/]]
this is where the fun starts
also help() works nicely on instances.
doctests also pretty much kick ass.
\\
[[http://docs.python.org/library/doctest.html]]
\\
\\
==== Tip: Pianoteq - software synth - on Linux ====
\\
(tip by: Edward Diehl, LAD, 2012-09-02)
\\
I wanted to mention that Pianoteq does provide a linux VST which does
work in Ardour and Qtractor. However, the default version provides 5
output channels which Ardour does not seem to like (because it expects
stereo output). However, if you append "_2chan" to the plugin library
name (e.g. Pianoteq.so to Pianoteq_2chan.so) , the plugin will output
only 2 channels and work happily in Ardour.
\\
\\