A fusion of technology, music, and geekyness.

Converting FLAC to MP3 in Linux

Converting FLAC files to MP3 is very easy to accomplish in Linux. Unfortunately, FLAC files can not be played on most mobile devices and they normally take up too much space anyway. Use the script I wrote below to easily convert a folder (recursively) to mp3 files. It defaults to 320 kbps bit rate if you do not specify. This script was tested in Ubuntu 10.04 with: flac 1.2.1 and lame 3.98.2. Nothing else is required.

Usage

flac2mp3 /path/to/flac/files/ /path/to/output/mp3/files/ [bit_rate]

The Script

#!/bin/bash
convert_dir=$1
output_dir=$2
bitrate=$3

# Ensure require params are passed in
if [ -z $convert_dir ] || [ -z $output_dir ];
then
  echo "Usage: flac2mp3 rip_dir output_dir [bitrate]"
  exit
fi

# Default to 320 kbps if bitrate not specified
if [ -z $bitrate ];
then
  bitrate=320
fi

# Get the list of files to convert
files=( `find $convert_dir -iname '*.flac' | tr "\n" " "` )

# Convert each file, one at a time
for file in ${files[*]}
do
  flac -dc $file | lame -b $bitrate - $output_dir/`basename $file`.mp3
done

echo "Conversions complete!"

Installation

cd /usr/bin
sudo curl --silent --output flac2mp3 https://gist.github.com/raw/708704/10b41ddb2ab43ade403038cfb78364eb5e168286/flac2mp3
sudo chmod 755 flac2mp3

Warcraft Milestone: Crusader Technology

After several rough months my Paladin finally earned Crusader title and the Argent Charger! A lot of people probably think this is old news and lame but for me it is a milestone. It is the first time I have pushed through and actually did it. I HATE the Argent dailies with a passion :) This was my last major goal before the release of Cataclysm. Now to decide which character I want to take into the expansion. It’s a pretty rough decision when you have ten 80′s (soon to be eleven). Click the images for the full size!

WoWScrnShot_102710_072908

WoWScrnShot_102710_071927


Do It Yourself Chai Tea (NMRC’s Hacker Chai)

ChaiTea2

Here I offer my interpretation of weasel’s recipe of home made chai tea. This tea has special powers. You can commit any cyber crime you wish and blame it on the tea. The authorities will understand.

NMRC’s Hacker Chai
Brew time: about 20-30 minutes

Double Batch
3 Cups Water
1 1/3 Cup Milk
1/2 Cup Sugar
16 Cardamom Pods
16 Cloves
2 Sticks (about 4-5 inches long) Cinnamon
1/3 cup loose leaf darjeeling tea

Single Batch
1 1/2 Cups Water
2/3 Cup Milk
1/4 Cup Sugar
8 Cardamom Pods
8 Cloves
1 Stick (about 4-5 inches long) Cinnamon
3 Tbsp loose leaf darjeeling tea

Procedure
1. Crack the cardamom pods while being careful to not lose the seeds.
2. Combine the water, cinnamon, cloves, and cardamom in a sauce pan and bring to a simmer.
3. Cover and simmer for 10 minutes. It is very important to not boil the spices.
4. Add the sugar and milk to the mixture and bring back to a simmer. Stir just enough to disolve sugar.
5. Turn off heat, but leave on burner.
6. Add tea and cover. Let stand for 4 minutes.
7. Slowly strain brew into two mugs and drink HOT.
8. “Commit any crime you wish, and blame it on the chai. Just leave me the fuck out of it.”

Weasel has some interesting variations of this recipe. If you are curious, feel free to take a look at the original recipe.


Music Spotlight: Boom Bach Music

64000_157933627562036_141673289188070_360437_5101039_n

This is one of my colleagues at work. He combines anything from trancey synths, guitar riffs, and big bass lines to make what he calls ‘Gangsta Jazz’ :) Check out all of his work on his SoundCloud page. It is definitely work a look!

DevELOpe
DevELOpe by BoomBachMusic

Oh no, Tokyo
Oh no, Tokyo by BoomBachMusic


My First Mix Coming Soon: Furious Elements I

I have been practicing my beat matching and collecting tracks for several weeks now. This evening I spent some time and picked some of my favorite tracks out of everything I have gathered thus far. The result: Furious Elements I. This will mark my first mixdown since I have gained an interest in breakbeats and will be my FIRST EVER demo mix. Back in college when I was spinning NRG at raves I never successfully recorded a mix for a demo. I always nit picked and critiqued myself and would never settle for anything but perfection. I am going to be aiming for the same level of perfection in this mix so let’s hope it actually happens. Hopefully within the next 2-3 weeks I will be posting it on Soundcloud!

Jesse Adams – Furious Elements I
01: Sketi – Hyperstate (Original Mix)
02: Far Too Loud – We Want to Dance (Original Mix)
03: X-Dream – The 1st (Far Too Loud Refix)
04: Electrixx – Tetris (reFaze Edit)
05: Suko – More & More (Quadrat Beat Remix)
06: Destroyers & Aggresivnes ft. Ann Lee – Ring My Bell (Original Mix)
07: Sub Focus – Rockit (Stanton Warriors Edit)
08: Le Castle Vania – Nobody Gets Out Alive (Noisia Remix)
09: DJ Fixx, Keith Mackenzie, Whis – Get With The Program (Calvertron Remix)
10: BreakZhead – Disposis (Aggresivnes & FactorFunk Remix)
11: Access Denied ft. Mc Incyte – My Life (Dub Mix)
12: Vandal – Idiots (Original Mix)
13: Physical Bross – Untitled (Cote Remix)
14: Aggresivnes – Essence (VIP Mix)

Coming Soon! Stay tuned…


Now Learning Lua!

Lua For the Win!
I recently have randomly become quite interested in Lua. The reasoning is due to the fact that I interact with two things on a daily basis that are configured and/or scripted in Lua: World of Warcraft and the Awesome window manager. I have had a blast over the weekend learning the basics of the languages and WoW addons. You can find the entire first edition of a very nice guide to learning Lua on their website. In addition, I found the resources at www.wowprogramming.com to be quite helpful.

Some essentials:

  • WowLua – An addon that allows you to write and run Lua in game.
  • Warcraft Addon Studio – A Visual Studio (VB) like application to let you quickly build frames and export them to XML.

Celistine
The first mod I wrote was called Celistine, and was written to monitor my wife in game :D It allowed her to whisper me for auto-invites to a group, monitors her range and informs me if she is far, and spams her with whispers if my health gets lower than 25%.

celistine

Deeps
After that, I decided to modify an example I found in the book I am reading (World of Warcraft Programming) and create a simple frame that displays DPS and other facts as I am in combat. I decided to call it Deeps :) See below for the screenshots, code, and feel free to try it out yourself.

deeps

deeps2

-- Set up some local variables to track time and damage
local start_time = 0
local end_time = 0
local total_time = 0
local total_damage = 0
local average_dps = 0
local in_combat = false

function CombatTracker_OnLoad(frame)
	frame:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED")
	frame:RegisterEvent("PLAYER_REGEN_ENABLED")
	frame:RegisterEvent("PLAYER_REGEN_DISABLED")
	frame:RegisterForClicks("RightButtonUp")
	frame:RegisterForDrag("LeftButton")
end

function CombatTracker_OnEvent(frame, event, ...)

	if event == "PLAYER_REGEN_ENABLED" then
		-- This event is called when the player exits combat
		end_time = GetTime()
		total_time = end_time - start_time
		average_dps = total_damage / total_time
		CombatTracker_UpdateText()
		CombatTracker_ReportDPS()
		in_combat = false
	elseif event == "PLAYER_REGEN_DISABLED" then
		-- This event is called when we enter combat
		-- Reset the damage total and start the timer
		CombatTrackerFrameText:SetText("In Combat!")
		total_damage = 0
		start_time = GetTime()
		in_combat = true
	elseif event == "COMBAT_LOG_EVENT_UNFILTERED" and in_combat then
		local timestamp,log_event,source_guid,source_name,source_flags, dest_guid, dest_name, dest_flags, spell_id, spell_name, spell_school, amount = ...

		if string.match(log_event, "_DAMAGE") then
			if source_name == UnitName("player") or source_name == UnitName("pet") then
				--ChatFrame1:AddMessage(source_name .. " is doing teh hurt!")
				if amount ~= nil then
					total_damage = total_damage + amount
					end_time = GetTime()
					total_time = end_time - start_time
					average_dps = total_damage / total_time
					CombatTracker_UpdateText()
				end
			end
		end
	end
end

function CombatTracker_UpdateText()
	local status = string.format("%ds | %d dmg | %.2f dps", total_time, total_damage, average_dps)
	CombatTrackerFrameText:SetText(status)
end

function CombatTracker_ReportDPS()
	local msgformat = "Dished out %d damage in %d seconds (%.2f dps)."
	local msg = string.format(msgformat, total_damage, total_time, average_dps)
	if GetNumPartyMembers() > 0 then
		SendChatMessage(msg, "PARTY")
	else
		ChatFrame1:AddMessage(msg)
	end
end

« Previous Entries Next Entries »

Powered by Wordpress | Designed by Elegant Themes