Created
February 1, 2019 08:53
-
-
Save laserbat/8de66f346c7a401f7dce11aa8c8e86c4 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# ./bach.sh | aplay -r44100 | |
SAMPLE_RATE=44100 | |
A=(55 110 220 440 880) | |
A_sharp=(58 116 232 464 928) | |
B=(62 124 248 496 992) | |
C=(65 130 260 520 1040) | |
C_sharp=(69 138 276 552 1104) | |
D=(73 146 292 584 1168) | |
D_sharp=(78 156 312 624 1248) | |
E=(82 164 328 656 1312) | |
F=(87 174 348 696 1392) | |
F_sharp=(92 184 368 736 1472) | |
G=(98 196 392 784 1568) | |
G_sharp=(104 208 416 832 1664) | |
note() { | |
FREQ=$1 | |
DURATION=${2:-32} | |
LEN=$((SAMPLE_RATE / FREQ)) | |
PW=$((LEN / ((N % 8) + 2))) | |
N=$((N + 1)) | |
MIN=$(printf '\x01') | |
MAX=$(printf '\xFF') | |
WAVEFORM="" | |
for i in $(seq $PW); do | |
WAVEFORM="$MIN$WAVEFORM" | |
done | |
for i in $(seq $((LEN - PW))); do | |
WAVEFORM="$MAX$WAVEFORM" | |
done | |
for i in $(seq $((SAMPLE_RATE / (DURATION * LEN)))); do | |
printf "$WAVEFORM" | |
done | |
} | |
arp() { | |
for i in $(seq 2); do | |
note $1 | |
note $2 | |
for j in $(seq 4); do | |
note $3 | |
note $4 | |
note $5 | |
done | |
done | |
} | |
arp ${C[2]} ${E[2]} ${G[2]} ${C[3]} ${E[3]} | |
arp ${C[2]} ${D[2]} ${A[3]} ${D[3]} ${F[3]} | |
arp ${B[2]} ${D[2]} ${G[2]} ${D[3]} ${F[3]} | |
arp ${C[2]} ${E[2]} ${G[2]} ${C[3]} ${E[3]} | |
arp ${C[2]} ${E[2]} ${A[3]} ${E[3]} ${A[4]} | |
arp ${C[2]} ${D[2]} ${F_sharp[2]} ${A[3]} ${D[3]} | |
arp ${B[2]} ${D[2]} ${G[2]} ${D[3]} ${G[3]} | |
arp ${B[2]} ${C[2]} ${E[2]} ${G[2]} ${C[3]} | |
arp ${A[2]} ${C[2]} ${E[2]} ${G[2]} ${C[3]} | |
arp ${D[1]} ${A[2]} ${D[2]} ${F_sharp[2]} ${C[3]} | |
arp ${G[1]} ${B[2]} ${D[2]} ${G[2]} ${B[3]} | |
arp ${G[1]} ${A_sharp[2]} ${E[2]} ${G[2]} ${C_sharp[3]} | |
arp ${F[1]} ${A[2]} ${D[2]} ${A[3]} ${D[3]} | |
arp ${F[1]} ${G_sharp[1]} ${D[2]} ${F[2]} ${B[3]} | |
arp ${E[1]} ${G[1]} ${C[2]} ${G[2]} ${C[3]} | |
arp ${E[1]} ${F[1]} ${A[2]} ${C[2]} ${F[2]} | |
arp ${D[1]} ${F[1]} ${A[2]} ${C[2]} ${F[2]} | |
arp ${G[0]} ${D[1]} ${G[1]} ${B[2]} ${F[2]} | |
arp ${C[1]} ${E[1]} ${G[1]} ${C[2]} ${E[2]} | |
arp ${C[1]} ${G[1]} ${A_sharp[2]} ${C[2]} ${E[2]} | |
arp ${F[0]} ${F[1]} ${A[2]} ${C[2]} ${E[2]} | |
arp ${F_sharp[0]} ${C[1]} ${G[1]} ${C[2]} ${D_sharp[2]} | |
arp ${G_sharp[0]} ${F[1]} ${B[2]} ${C[2]} ${D[2]} | |
arp ${G[0]} ${F[1]} ${G[1]} ${B[2]} ${D[2]} | |
arp ${G[0]} ${E[1]} ${G[1]} ${C[2]} ${E[2]} | |
arp ${G[0]} ${D[1]} ${G[1]} ${C[2]} ${F[2]} | |
arp ${G[0]} ${D[1]} ${G[1]} ${B[2]} ${F[2]} | |
arp ${G[0]} ${D_sharp[1]} ${A[2]} ${C[2]} ${F_sharp[2]} | |
arp ${G[0]} ${E[1]} ${G[1]} ${C[2]} ${G[2]} | |
arp ${G[0]} ${D[1]} ${G[1]} ${C[2]} ${F[2]} | |
arp ${G[0]} ${D[1]} ${G[1]} ${D[2]} ${F[2]} | |
arp ${C[0]} ${C[1]} ${G[1]} ${A_sharp[2]} ${E[2]} | |
note ${C[0]} | |
note ${C[1]} | |
note ${F[1]} | |
note ${A[2]} | |
note ${C[2]} | |
note ${F[2]} | |
note ${C[2]} | |
note ${A[2]} | |
note ${C[2]} | |
note ${A[2]} | |
note ${F[1]} | |
note ${D[1]} | |
note ${F[1]} | |
note ${D[1]} | |
note ${C[0]} | |
note ${C[1]} | |
note ${G[2]} | |
note ${B[3]} | |
note ${D[3]} | |
note ${F[3]} | |
note ${D[3]} | |
note ${B[3]} | |
note ${D[3]} | |
note ${B[3]} | |
note ${G[2]} | |
note ${B[3]} | |
note ${D[2]} | |
note ${F[2]} | |
note ${E[2]} | |
note ${D[2]} | |
note ${C[0]} | |
note ${C[1]} | |
note ${E[2]} | |
note ${G[2]} | |
note ${C[3]} 2 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment