Java - 921 characters
I build up each string seperately, storing each string in an array.
Then loop through the array and print out each line.
public class D{public static void main(String[] args){char[] z=args[0].toCharArray(); char[] y=new char[3]; y[0]=('H'==z[0]||'L'==z[0])?z[0]:'N'; int o=(y[0]=='N')?0:1; y[1]=z[o++]; y[2]=z.length>o?z[o]:'!'; int n=y[1]<'C'?((int) (y[1] - 'A')) + 6:((int) (y[1] - 'C')) + 1; n=(y[0]=='N')?n+7:(y[0]=='H'?n+14:n); String s=" "; String b=" --- "; String[] q=new String[22]; for (int i=1;i<=21;i+=2){q[i]=s;} for (int i=10;i<=18;i+=2){q[i]="-----";} q[20]=n>19?b:s; q[2]=n<3?b:s; q[4]=n<5?b:s; q[6]=n<7?b:s; q[8]=n<9?b:s; char c=q[n].charAt(0); char e=q[n].charAt(1); char[] h=new char[]{c,y[2]=='!'?e:y[2],'O',e,c}; q[n]=new String(h); for (int i=0;i<22;i++){if (n<14&&i-n<4&&i>n) q[i]=q[i]!=null?q[i].substring(0,3)+"|"+q[i].charAt(4):s; else if (n>13&&n-i<4&&n>i) q[i]=q[i]!=null?q[i].substring(0,3)+"|"+q[i].charAt(4):s;} for (int i=21;i>=0;i--) if (!(i>n&&i>18||i<n&&i<10)) System.out.println((q[i]==null)?s:q[i]);}}
Oh please don't hate me, it's my first time. I coulnd't find any faq/introduction so I hope my posting format is ok.
Not sure how serious people got about character counts....
normal version of the code - extra is linebreak/spaces (1313 characters):
public class DisplayNote
{
public static void main(String[] args)
{
char[] z=args[0].toCharArray();
char[] y=new char[3];
y[0]=('H'==z[0]||'L'==z[0])?z[0]:'N';
int o=(y[0]=='N')?0:1;
y[1]=z[o++];
y[2]=z.length>o?z[o]:'!';
int noteValue=y[1]<'C'?((int) (y[1] - 'A')) + 6:((int) (y[1] - 'C')) + 1;
noteValue=(y[0]=='N')?noteValue+7:(y[0]=='H'?noteValue+14:noteValue);
String s=" ";
String b=" --- ";
String[] out=new String[22];
for (int i=1;i<=21;i+=2){out[i]=s;}
for (int i=10;i<=18;i+=2){out[i]="-----";}
out[20]=noteValue>19?b:s;
out[2]=noteValue<3?b:s;
out[4]=noteValue<5?b:s;
out[6]=noteValue<7?b:s;
out[8]=noteValue<9?b:s;
char c=out[noteValue].charAt(0);
char e=out[noteValue].charAt(1);
char[] h=new char[]{c,y[2]=='!'?e:y[2],'O',e,c};
out[noteValue]=new String(h);
for (int i=0;i<22;i++)
{
if (noteValue<14&&i-noteValue<4&&i>noteValue)
out[i]=out[i]!=null?out[i].substring(0,3)+"|"+out[i].charAt(4):s;
else if (noteValue>13&¬eValue-i<4&¬eValue>i)
out[i]=out[i]!=null?out[i].substring(0,3)+"|"+out[i].charAt(4):s;
}
for (int i=21;i>=0;i--)
if (!(i>noteValue&&i>18||i<noteValue&&i<10))
System.out.println((out[i]==null)?s:out[i]);
}
}