गिटार टैब बनाना?


24

सबसे छोटा प्रोग्राम लिखें जो इनपुट के रूप में दिए गए तार के लिए गिटार टैब बनाता है।

ताकि आपके बीच के गिटारवादकों को एक फायदा न हो, और इसे नियतात्मक बनाने के लिए (और शायद कोड करने में आसान), यहाँ अधिकृत जीवा के केवल रूप हैं:

Major chords:

  E   F   F#  G   G#  A   A#  B   C   C#  D   D#
e 0---1---2---3---4---0---1---2---3---4---5---6---
B 0---1---2---3---4---2---3---4---5---6---7---8---
G 1---2---3---4---5---2---3---4---5---6---7---8---
D 2---3---4---5---6---2---3---4---5---6---7---8---
A 2---3---4---5---6---0---1---2---3---4---5---6---
E 0---1---2---3---4---0---1---2---3---4---5---6---

Minor chords:

  Em  Fm  F#m Gm  G#m Am  A#m Bm  Cm  C#m Dm  D#m
e 0---1---2---3---4---0---1---2---3---4---5---6---
B 0---1---2---3---4---1---2---3---4---5---6---7---
G 0---1---2---3---4---2---3---4---5---6---7---8---
D 2---3---4---5---6---2---3---4---5---6---7---8---
A 2---3---4---5---6---0---1---2---3---4---5---6---
E 0---1---2---3---4---0---1---2---3---4---5---6---

ध्यान दें कि प्रत्येक श्रृंखला के 5 पहले chords और 7 अंतिम chords के अलग-अलग रूप हैं।

सभी chords सरल प्रमुख या मामूली chords हैं (कोई 7 वीं या अन्य विविधताएं)।

आपको फ्लैटों का भी ध्यान रखना चाहिए। अनुस्मारक:

A# = Bb
C# = Db
D# = Eb
F# = Gb
G# = Ab

B#, Cb, E# and Fb are not used

आउटपुट में कॉर्ड नामों के साथ पहला कॉलम शामिल होना चाहिए , जैसा कि ऊपर दिखाया गया है। इसमें शीर्ष पर जीवा नाम शामिल नहीं है। -जैसा कि ऊपर दिखाया गया है, जीवा को 3 से अलग करना चाहिए । अंतिम 3 -वैकल्पिक हैं।

इनपुट एक तार है जिसमें कॉर्ड के नाम शामिल हैं, जो रिक्त स्थान द्वारा अलग किए गए हैं।

एक उदाहरण इनपुट है:

Bm Gb A E G D Em F#

और इसी आउटपुट है:

e 2---2---0---0---3---5---0---2---
B 3---2---2---0---3---7---0---2---
G 4---3---2---1---4---7---0---3---
D 4---4---2---2---5---7---2---4---
A 2---4---0---2---5---5---2---4---
E 2---2---0---0---3---5---0---2---

... और पक्ष प्रश्न: उदाहरण गीत क्या है? :)
जूल्स ओलोन

5
होटल कैलिफोर्निया: पी
मैथ्यू पढ़ें

हाँ, तुम जीत! :)
जूल्स ओलोन

शांत विचार। काश मेरे पास खेलने का समय होता!
इग्बी लार्गेमैन

जवाबों:


9

जावास्क्रिप्ट, 297 277 262 235 223 वर्ण

गोल्फ संस्करण में कोई भी गाड़ी का रिटर्न महत्वपूर्ण नहीं है; वे केवल उत्तर को पठनीय बनाने के लिए हैं। अर्धविराम महत्वपूर्ण हैं।

संपादित करें:map थोड़ी देर के लूप और अन्य संपादन के साथ बाहरी जगह । अंत में 2 × अंदर गोल्फस्क्रिप्ट संस्करण का आकार (अभी के लिए)!

संपादित करें:indexOf गणित के साथ प्रतिस्थापित , लुकअप तालिका, अन्य छोटे सुधारों को तोड़ दिया।

संपादित करें: एक और के mapलिए forऔर एक फाइनल में डाल \nमैं अनावश्यक रूप से खा रहा था। अंत में जूल्स के पायथन संस्करण के अंदर।

i=prompt(o='').split(' ');for(r=6;o+=' EADGBe'[r]+' ',r--;o+='\n')
for(j=0;n=i[j++];o+=(([84,13,52,5][2*/m/.test(n)+x]*8>>2*r&3)+y-7*x)+'---')
y=n.charCodeAt(0),y=(2*y-(y>66)-(y>69)+(n[1]<'$')-(n[1]=='b')+2)%12,x=y>6;alert(o)

आउटपुट अब अनुगामी के ---रूप में वैकल्पिक होने का लाभ नहीं लेता है :

e 2---2---0---0---3---5---0---2---
B 3---2---2---0---3---7---0---2---
G 4---3---2---1---4---7---0---3---
D 4---4---2---2---5---7---2---4---
A 2---4---0---2---5---5---2---4---
E 2---2---0---0---3---5---0---2---

धिक्कार है, मुझे लगता है कि मुझे ईर्ष्या से ईर्ष्या हुई है। अच्छी तरह से किया।
केकेकेला

7

गोल्फस्क्रिप्ट, 136 वर्ण

[["eBGDAE"{[]+" "+}/]]\" "/{.-2\{"bm#A B C D E F G"?.)!!*(+}/14%.3>-.8>-.7/@109?0>2*+[963 780 882 753]{3base(;}%=\7%{+'---'+}+%}%+zip n*

पूरी तरह से 23 वर्ण (17.5%) प्रत्येक आउटपुट पंक्ति की शुरुआत में उन दो पात्रों से निपटते हैं।

नमूना उत्पादन, किनारे के मामलों का परीक्षण:

$ golfscript.rb tabs.gs <<<"E G# Ab A Db D# Em G#m Abm Am D#m"
e 0---4---4---0---4---6---0---4---4---0---5---
B 0---4---4---2---6---8---0---4---4---1---6---
G 1---5---5---2---6---8---0---4---4---2---7---
D 2---6---6---2---6---8---2---6---6---2---7---
A 2---6---6---0---4---6---2---6---6---0---5---
E 0---4---4---0---4---6---0---4---4---0---5---

मैंने इस पर केवल एक घंटा बिताया है, इसलिए इसे कम से कम 5 से 10 चार्ट तक कम किया जा सकता है। वैचारिक रूप से यह डॉकमैक्स के समाधान के समान है: चार मामलों के लिए लुकअप तालिका, फिर एक ऑफसेट द्वारा वेतन वृद्धि और सही क्रम में तार में शामिल हो।


+1: मैन मुझे गोल्फस्क्रिप्ट बहुत पसंद है! आज कई बार मुझे अपने कोड को ट्रिम करने के लिए स्थान मिले हैं, लेकिन 50% से नहीं! मेरे पास एक दुभाषिया काम नहीं है: क्या यह ईबी के लिए डी # लौटाता है?
डॉकमैक्स

BTW, आपके नमूने में अंतिम नोट C # m से मेल खाता है, हालांकि कमांड लाइन D # m को दर्शाता है। टाइपो या बग?
डॉकमैक्स

@ डॉकमैक्स, बग। मुझे समझ नहीं आता कि यह केवल D # m को प्रभावित करता है और D # को - यह डिबग के लिए दिलचस्प होने वाला है। मैं चीजों को फिर से व्यवस्थित करता हूं क्योंकि पहले 7 का ब्लॉक लेना सुविधाजनक है, इसलिए ईब वास्तव में एक किनारे का मामला नहीं है।
पीटर टेलर

पता चलता है कि पिछले एक \ n शामिल हो रहा था, जो लुकअप टेबल में नहीं था, एक अक्षर के बराबर मूल्य को नीचे खींच रहा था।
पीटर टेलर

4

इसे ऊपर कोड करने के बाद, मुझे एहसास हुआ कि मैं इसे बहुत होशियार कर सकता था ... शायद मैं एक और प्रविष्टि करूंगा। उम्मीद है कि मैं सिर्फ सबसे तेज होने के लिए अंक प्राप्त करूंगा!

वैसे भी, पर्ल के 962 अक्षर हैं।

%c =(B=>{E=>0,F=>1,Gb=>2,G=>3,Ab=>4,A=>2,Bb=>3,B=>4,C=>5,Db=>6,D=>7,Eb=>8,Em=>0,Fm=>1,Gbm=>2,Gm=>3,Abm=>0,Am=>1,Bbm=>2,Bm=>3,Cm=>4,Dbm=>5,Dm=>6,Ebm=>7},G=>{E=>1,F=>2,Gb=>3,G=>4,Ab=>5,A=>2,Bb=>3,B=>4,C=>5,Db=>6,D=>7,Eb=>8,Em=>0,Fm=>1,Gbm=>2,Gm=>3,Abm=>4,Am=>2,Bbm=>3,Bm=>4,Cm=>5,Dbm=>6,Dm=>7,Ebm=>8},D=>{E=>2,F=>3,Gb=>4,G=>5,Ab=>6,A=>2,Bb=>3,B=>4,C=>5,Db=>6,D=>7,Eb=>8,Em=>2,Fm=>3,Gbm=>4,Gm=>5,Abm=>6,Am=>2,Bbm=>3,Bm=>4,Cm=>5,Dbm=>6,Dm=>7,Ebm=>8},A=>{E=>2,F=>3,Gb=>4,G=>5,Ab=>6,A=>0,Bb=>1,B=>2,C=>3,Db=>4,D=>5,Eb=>6,Em=>2,Fm=>3,Gbm=>4,Gm=>5,Abm=>6,Am=>0,Bbm=>1,Bm=>2,Cm=>3,Dbm=>4,Dm=>5,Ebm=>6},E=>{E=>0,F=>1,Gb=>2,G=>3,Ab=>4,A=>0,Bb=>1,B=>2,C=>3,Db=>4,D=>5,Eb=>6,Em=>0,Fm=>1,Gbm=>2,Gm=>3,Abm=>4,Am=>0,Bbm=>1,Bm=>2,Cm=>3,Dbm=>4,Dm=>5,Ebm=>6});
%b=('A#'=>'Bb','C#'=>'Db','D#'=>'Eb','F#'=>'Gb','G#'=>'Ab');
foreach(qw(e B G D A E)){p($_,@ARGV)}
sub p{$s = shift;print "$s ";$s = uc($s);foreach(@_){while(($h,$f)=each(%b)){s/$h/$f/}print "$c{$s}->{$_}---"}print "\n"}

यहाँ इसी उत्पादन है।

dhrasmus:Desktop standage$ perl guitar Bm Gb A E G D Em F#
e 2---2---0---0---3---5---0---2---
B 3---2---2---0---3---7---0---2---
G 4---3---2---1---4---7---0---3---
D 4---4---2---2---5---7---2---4---
A 2---4---0---2---5---5---2---4---
E 2---2---0---0---3---5---0---2---

4

चूंकि छोटे समाधान पहले ही दिए गए हैं (लानत है आप गोल्फस्क्रिप्ट!), यहाँ मेरा है:

पायथन, 229 वर्ण

s=[("E EmF FmF#GbG GmG#AbA AmA#BbB BmC CmC#DbD DmD#Eb".find("%-02s"%s[:2])/4,s[-1]!='m')for s in raw_input().split()]
for c in range(6):
 l='eBGDAE'[c]+' '
 for(i,M)in s:x=i>4;l+=`i-5*x+2*(2<c+x<5)+(M+x)*(c==2-x)`+"---"
 print l

आउटपुट:

> echo "Bm Gb A E G D Em F#" | python guitar.py
e 2---2---0---0---3---5---0---2---
B 3---2---2---0---3---7---0---2---
G 4---3---2---1---4---7---0---3---
D 4---4---2---2---5---7---2---4---
A 2---4---0---2---5---5---2---4---
E 2---2---0---0---3---5---0---2---

3

पायथन, 449 वर्ण

z=int
f=str
r=range
j=''.join
n='E F F# G G# A A# B C C# D D#'.split()
n+=[x+'m'for x in n]
c=[j([f(z(x)+i)for x in'001220'])for i in r(5)]+[j([f(z(x)+i)for x in'022200'])for i in r(7)]
c+=[x[:2]+f(z(x[2])-1)+x[3:]for x in c[:5]]+[x[0]+f(z(x[1])-1)+x[2:]for x in c[5:]]
a=[c[n.index((chr(ord(i[0])-1)+'#'+i[2:]).replace('@','G')if len(i)-1 and i[1]=='b'else i)]for i in raw_input().split()] 
for i in r(6):print'eBGDAE'[i],j([x[i]+'-'*3 for x in a])

3

C99 - 231 वर्ण

कॉर्ड कमांड लाइन पर दिए गए हैं, प्रति कॉर्ड प्रति एक तर्क, और निश्चित रूप से किसी भी प्रकार का कोई इनपुट सत्यापन नहीं है।

#include<stdio.h>
int main(int c,char**v){for(char*o="e0)B2)G2*D2+A0+E0)",i,m;*o;o+=3,v-=c,puts(""))for(printf("%c ",*o);*++v;printf("%c---",i-(i>2)-i/9+o[1+i/8]-(*o-66-i/8*5?0:m?m+2[*v]>99:0)))m=1[*v],i=(**v*2-4+m/35-m/98*3)%14;}

नमूना रन:

$ ./a.out Bm Gb A E G D Em F#
e 2---2---0---0---3---5---0---2---
B 3---2---2---0---3---7---0---2---
G 4---3---2---1---4---7---0---3---
D 4---4---2---2---5---7---2---4---
A 2---4---0---2---5---5---2---4---
E 2---2---0---0---3---5---0---2---

संयुक्त राष्ट्र के golfed

#include<stdio.h>
int main(int c,char**v){
     // o points to three characters per output line:
     //   string name, number for A, adjusted number for E (ASCII code minus 7)
     char* o="e0)B2)G2*D2+A0+E0)",
          i, // chord: A=0, A#=1, ..., G#=13, allowing also 3="E#" and 9="B#"
          m; // second character in chord name
     for (; *o; o+=3) {
          printf("%c ", *o);
          for (; *++v; ) {
               m = 1[*v],
               i = (**v*2-4+m/35-m/98*3)%14; // parse & adjust for sharp, flat
               printf("%c---",
                      i-(i>2)-i/9 // eliminate "E#", "B#"
                      +o[1+i/8] // get the number for a major chord
                      // adjust for minor...
                      -(*o-66-i/8*5
                        ? 0
                        : m ? m+2[*v]>99 : 0));
          }
          v -= c; // rewind argument pointer
          puts("");
     }
}

गैरमानक C - 206 वर्ण

यदि हम भाषा विनिर्देशों के बारे में परवाह नहीं करते हैं, तो जीसीसी निम्नलिखित वन-लाइनर को एक कार्यात्मक बाइनरी में संकलित कर सकता है, भले ही यह K & R शैली तर्क घोषणा (और प्रिंटफ की एक अंतर्निहित घोषणा) के साथ C99 चर घोषणाओं को मिलाता है।

main(c,v)char**v;{for(char*o="e0)B2)G2*D2+A0+E0)",i,m;*o;o+=3,v-=c,puts(""))for(printf("%c ",*o);*++v;printf("%c---",i-(i>2)-i/9+o[1+i/8]-(*o-66-i/8*5?0:m?m+2[*v]>99:0)))m=1[*v],i=(**v*2-4+m/35-m/98*3)%14;}

2

सी ++, 432

#include <cmath>
#include <iostream>
F(int c){c-=65;return c*1.6+sin(c/5.+.3);}
T(int a,int s){if(s)return(a=(T(a,s-1)+2)%3)-=(a==1&s>2);return(a<7)*2;}
#define c(a,b) while(*(++j)==a)b;--j; 
#define O std::cout<<
main(int a,char*p[]){
int P=2;for(int i=-1;++i<6;P=2){O p[1][i];O" ";while(P<a){char*j=p[P++];
int f=F(*j);c('#',++f)c('b',--f)
int t=T(f,i)*3.5;if(*(++j)!='m'){--j;t+=(t==3);}
O(f-F(p[1][i])+t+24)%12;O"---";
}O'\n';}}

ध्यान दें कि यह पहले पैरामीटर के रूप में गिटार ट्यूनिंग की आवश्यकता है। (अधिकांश गैर-मानक-ट्यूनिंग आपको हास्यास्पद उँगलियों के परिणाम देगा, लेकिन मुझे लगता है कि आप मानक ट्यूनिंग के साथ संतुष्ट हैं।)

होटल कैलिफ़ोर्निया के लिए, आप कर सकते हैं $./a.out EBGDAE Cbm Gb Bbb Fb G D Em F# Bm F# G## D## F## C## D##m E##। परिणाम:

E 2---2---0---0---3---5---0---2---2---2---5---0---3---5---0---2---
B 3---2---2---0---3---7---0---2---3---2---5---0---3---7---0---2---
G 4---3---2---1---4---7---0---3---4---3---6---1---4---7---0---3---
D 4---4---2---2---5---7---2---4---4---4---7---2---5---7---2---4---
A 2---4---0---2---5---5---2---4---2---4---7---2---5---5---2---4---
E 2---2---0---0---3---5---0---2---2---2---5---0---3---5---0---2---

मामूली चार तारों को ऊपरी चार तारों को ट्यून करना कई आक्रमणों में तीन- और चार-तार की छड़ें बजाना बहुत आसान बनाता है, बिना खुले तार के, और बिना एक उंगली को "स्ट्रिंग" को छूने के बिना एक जगह पर रखने के लिए। स्ट्रिंग्स DFG # B, "Bbm F Bbm Gb Db Ebm Db F Bbm F F7 Bbm" (मरमेड सॉन्ग) जैसे कॉर्ड सीक्वेंस बहुत आसानी से काम करते हैं। केवल एक झल्लाहट को ऊपर-नीचे करना आवश्यक है। एक आधा-चरण कीचेंज है, लेकिन इसका मतलब है कि एक झल्लाहट बढ़ रही है। हालांकि अन्य दो तारों के साथ क्या करना है, यह पता नहीं चला है।
सुपरकैट

@ सुपरकार्ट: दिलचस्प है, मैं कल अपने गिटार पर यह कोशिश करूँगा ...
को चालू करने के लिए

मैं सुनना चाहता हूं कि आप क्या सोचते हैं। मैं गिटार को कुछ समय, वर्षों के अलावा उठाता था, और छोड़ता रहता था क्योंकि अंगुलियाँ मनमाना और अजीब दोनों तरह की लगती थीं। फिर मैंने सोचा कि क्या ट्यूनिंग सरल छूत की अनुमति देगा। चूंकि क्लोज्ड-फॉर्म कॉर्ड में अंतराल होता है, जो एक छोटे से तीसरे से एक सही चौथे तक होता है, नाबालिग तिहाई से तार को जोड़ने का मतलब है कि प्रत्येक स्ट्रिंग को एक बिंदु पर नम किया जाएगा जो नीचे दिए गए स्ट्रिंग से कम नहीं है। अगर मैं एक बाएं हाथ के गिटार की कोशिश कर सकता हूं, तो मैं स्ट्रिंग ऑर्डर के साथ एकदम सही चौथा प्रयास कर सकता हूं, क्योंकि यह समान होना चाहिए।
सुपर स्टार

जैसा कि यह है, मामूली तिहाई से ट्यूनिंग का मतलब है कि सबसे कम स्ट्रिंग पर पहली उंगली की प्रत्येक स्थिति के लिए तीन प्रमुख कॉर्ड आक्रमण और तीन मामूली कॉर्ड आक्रमण उपलब्ध होंगे। दूसरी तीन उँगलियों के आर-पार दूसरी अंगुली रखकर सातवें राग को भी बजाया जा सकता है। मरमेड सॉन्ग के लिए, तीसरे झल्लाहट पर शुरू करें और F-Bb-DF खेलें (उंगलियों के साथ 1-3-3-4)। फिर F FFF (1-2-2-4) है। जीबी एक झल्लाहट है, 1-2-2-4 (एफ की तरह) उँगलियों से। डीबी एक झल्लाहट के नीचे है, 1-3-4-4। एबम बैक अप है, 1-2-4-4।
सुपरकैट

मुझे उस बिंदु तक पहुंचने में केवल कुछ ही घंटे लगे जहां मैं आसानी से कुछ टुकड़ों (जिसमें उपरोक्त मरमेड सॉन्ग भी शामिल है) को एक कीबोर्ड की सहायता से वर्कआउट करने के बाद खेल सकता हूं कि उचित कॉर्ड नोट्स क्या होना चाहिए। एक बार जब मैंने इस शैली की कोशिश की, तो यह आश्चर्यजनक रूप से स्वाभाविक लगा, और मैं वास्तव में जिस तरह से प्रत्येक प्रमुख और मामूली स्वामी के सभी तीन आक्रमणों का उपयोग कर सकता हूं। अगर कोई सिर्फ प्रमुख और मामूली जीवा चाहता है, तो F-Ab-B-Eb-Gb-D जैसी ट्यूनिंग सैद्धांतिक रूप से छह-अंगुल और छोटी जीवाओं को आसान अंगुलियों (1-2-2-3-4-4 या 1) की अनुमति दे सकती है। -1-2-3-3-4) लेकिन व्युत्क्रम के बिना।
सुपरकैट

2

390 345 340 पोस्टस्क्रिप्ट

एक गिटार-व्यावहारिक दृष्टिकोण के लिए सरलीकृत (ई आकार केवल ए आकार का एक बदलाव है, एक स्ट्रिंग को नीचे स्थानांतरित किया जाता है, एक उंगली से बदलाव के साथ)। अन्य उत्तरों से एन्कोडेड-स्ट्रिंग विचार उधार लिया।

[/p{print}/x{exch}/e{cvx exec}/d{dup 0
get}/f{forall}(A0#1B2C3D5E7F8G:b;){}forall/m{dup
4 2 copy get 1 sub put}109{m 48}/+{[3 1 roll x{1
index add x}f]}/*{[0 0 2 2 2 0 0]x{load e 48 sub
+}f d 12 gt{-12 +}if d 6 gt{m -7 + 1}{0}ifelse 6
getinterval}>>begin[ARGUMENTS{*}f][(E)(A)(D)(G)(B)(e)]6{[x
e p( )p]x[x{[x e( )cvs p(---)p]}f]x()=}repeat

पहले:

450 442 418 पोस्टस्क्रिप्ट

मैंने इस एक के साथ आउटपुट स्वरूप भी तय किया। (पिछले संस्करण "ई" के बजाय "ई ---" शुरू हुए।)

<</i{index}/a{add}/p{pop}/x{exch}/g{getinterval}/r{print}/f{forall}/e{exec}>>begin<<65[0
2 3 5 -5 -4 -2]{1 i 1 a}f p 35{1 a}98{1 sub}109{x dup
4 20 put x}>>begin[ARGUMENTS{[x[0 5 12 17 21 24 29
0]x{load e}f x{1 i a x}f]dup 0 get 0 ge{0}{1}ifelse 7
g[0 -5 -10 -15 -19 -24 -29]0 1 6{2 copy get 3 i 2 i
get a 3 copy put p p}for x p 0 6
g}f][(E)(A)(D)(G)(B)(e)]6{[x cvx e r( )r]x[x{[x cvx
e( )cvs r(---)r]}f]x(\n)r}repeat

इसे कैसे चलाएं: gsnd -q -- tab.ps Bm Gb A E G D Em F\#(शेल से तेज छिपाएं)।

अन-golfed संस्करण लगभग golfed एक से अधिक कठिन था। लेकिन मैंने पूरी कोशिश की। संपादित करें: ट्रिकी-बिट्स पर कुछ और टिप्पणियां।

%!PS
<<    %axioms and operations
/t{2 2 1}    %major tetrachord
/m{t t 2}    %mixolydian mode
/u{2 1 2}    %minor tetrachord
/a{u u}      %aolian mode
/s{m m t}    %2.5-octave mixolydian intervals
/r{3 1 roll}
/${[exch 0 exch{1 index add}forall]}    %running sum: convert (relative)intervals to (abstract)fretstops
/+{[r exch{1 index add exch}forall pop]}    %scale array by scalar
/@{[r{2 copy get r pop}forall pop]}    %select array elements from array of indices
/&{0 1 3 index length 1 sub{    %array2 += array1
    2 copy get 3 index 2 index get add 3 copy put pop pop}for exch pop}
>>begin<<    %map ascii values to scaling functions
65[a]$    %generate fretstops of the A aolian scale to assign scalars to note names
[0 0 0 0 -12 -12 -12]&    %drop E F and G down an octave
{[exch/+ cvx]cvx 1 index 1 add}forall pop    %generate the pairs 'A'->{0 +}, 'B'->{2 +}
35{1 +}     %'#'-> scale up by one
98{-1 +}    %'b'-> scale down by one
109{dup 4 2 copy get 1 sub put}     %'m'-> tweak the 'third' down by one
%generate chord pattern from (string)
/*{[s]$       %generate fretstops of the E mixolydian scale
  [1 4 8 11 13 15 18]    %A-shape figured bass: IV chord of E mixolydian
  -1 +       %convert scale degrees to array indices
  @       %generate chord template by selecting indices from mixolydian scale
  exch{load exec}forall       %execute ascii values, scaling the pattern
  dup 0 get 0 ge{0}{1}ifelse 6 getinterval    %discard first note if it has fallen off the bottom
  [0 -5 -10 -15 -19 -24]&}    %subtract the string offsets
>>begin    %activate definitions
%(A)* pstack()= clear    %[0 0 2 2 2 0]
%(B)* pstack()= clear    %[2 2 4 4 4 2]
%(F#)* pstack()= clear    %[2 4 4 3 2 2]
%(Abm)* pstack()=    %[4 6 6 4 4 4]
[ARGUMENTS{*}forall]    %convert array of strings to array of patterns
[(E)(A)(D)(G)(B)(e)]    %array of string names
6{    %for each "string"
    [exch cvx exec print( )print]    %pop string name and print with space
    exch       %put names behind numbers
    [exch{     %for each "chord"
        [exch cvx exec( )cvs print(---)print]    %pop number, convert, print with trailing hyphens
    }forall]    %zip up chord array for next iteration
    ()=         %print a newline
    exch        %put numbers behind names
}repeat

और एक परीक्षण के रूप में हाउस ऑफ द राइजिंग सन के बारे में कैसे ?

04:51 PM:~ 0> gsnd -q -- tabb.ps Em G A C Em G B B Em G A C Em B Em B|sed 's/^/    /'
e 0---3---0---3---0---3---2---2---0---3---0---3---0---2---0---2---
B 0---3---2---5---0---3---4---4---0---3---2---5---0---4---0---4---
G 0---4---2---5---0---4---4---4---0---4---2---5---0---4---0---4---
D 2---5---2---5---2---5---4---4---2---5---2---5---2---4---2---4---
A 2---5---0---3---2---5---2---2---2---5---0---3---2---2---2---2---
E 0---3---0---3---0---3---2---2---0---3---0---3---0---2---0---2---

मैंने इस कोड की एक टिप्पणी दूसरे उत्तर में लिखी है
लूजर डॉग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.