Modified:
trunk/examples/abcdump/abcdump.c
trunk/src/abcp.h
trunk/src/abcpnote.c
trunk/test/a7.txt
Log:
Modified: trunk/examples/abcdump/abcdump.c
==============================================================================
--- trunk/examples/abcdump/abcdump.c (original)
+++ trunk/examples/abcdump/abcdump.c Sat Mar 7 14:27:22 2009
@@ -206,8 +206,8 @@
case T_NOTE:
printf("NOTE: ");
printf("%s%s ", abcNotePitch(scn),abcNoteBending(scn) ==
abcNatural?" (natural)":"");
- printf("bend: %.2f ",abcNoteBending(scn));
- printf("courtesy: %d\n",abcNoteCourtesyAccidentals(scn));
+ printf("bend: %.2f
(%.2f/%.2f) ",abcNoteBending(scn),abcNoteMicrotoneNum(scn),abcNoteMicrotoneDen(scn));
+ printf("court: %d\n",abcNoteCourtesyAccidentals(scn));
printf(" duration: %.2f ",abcNoteDuration(scn));
printf("octave: %d ",abcNoteOctave(scn));
printf("midi:
(%d,%d)\n",abcNoteMidi(scn),abcNoteMidiPitchBend(scn));
Modified: trunk/src/abcp.h
==============================================================================
--- trunk/src/abcp.h (original)
+++ trunk/src/abcp.h Sat Mar 7 14:27:22 2009
@@ -186,6 +186,9 @@
float abcNoteCents(abcScanner *scn);
float abcNoteBending(abcScanner *scn);
+float abcNoteMicrotoneDen(abcScanner *scn);
+float abcNoteMicrotoneNum(abcScanner *scn);
+
unsigned short abcNoteMidi(abcScanner *scn);
unsigned short abcNoteMidiPitchBend(abcScanner *scn);
Modified: trunk/src/abcpnote.c
==============================================================================
--- trunk/src/abcpnote.c (original)
+++ trunk/src/abcpnote.c Sat Mar 7 14:27:22 2009
@@ -62,6 +62,44 @@
abcTokenStart(scn,4), abcTokenLen(scn,4) );
}
+float abcNoteMicrotoneNum(abcScanner *scn)
+{
+ int k;
+ float num = 1.0;
+
+ if (abcToken(scn) != T_NOTE) return 0.0;
+ if (abcTokenLen(scn,2) > 0)
+ num = atof(abcTokenStart(scn,2));
+ k = abcTokenLen(scn,1);
+ if (k>0 && abcTokenStart(scn,1)[k-1] == '_')
+ num = -num;
+ return num;
+}
+
+float abcNoteMicrotoneDen(abcScanner *scn)
+{
+ int k;
+ float den = -1.0;
+
+ if (abcToken(scn) != T_NOTE) return 1.0;
+
+ if (abcTokenLen(scn,4) > 0)
+ den = atof(abcTokenStart(scn,4));
+
+ k = abcTokenLen(scn,3);
+ if (k > 0) {
+ if (den <= 0.0) den = 2.0;
+ den = den * ((float)(1 << (k-1)));
+ }
+
+ if (den <= 0.0) {
+ if (abcTokenLen(scn,2) > 0) den = 100.0;
+ else den = 1.0;
+ }
+ return den;
+}
+
+
int abcNoteOctave(abcScanner *scn)
{
int oct = 4;
@@ -132,7 +170,6 @@
unsigned short abcNoteMidi(abcScanner *scn)
{
- int n;
if (abcToken(scn) != T_NOTE) return 0;
return abcNote2Midi(*abcTokenStart(scn,5),
abcNoteOctave(scn)+1,
Modified: trunk/test/a7.txt
==============================================================================
--- trunk/test/a7.txt (original)
+++ trunk/test/a7.txt Sat Mar 7 14:27:22 2009
@@ -7,3 +7,6 @@
X:3
A ^//A ^/A ^_//A ^A ^^//A ^^/A ^^_//A ^^A
=C
+
+X:4
+^_2/3C