-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 3e34002
Showing
15 changed files
with
316 additions
and
0 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
vendor |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
Binary file not shown.
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
# 字母转摩尔斯电码(带发声效果) | ||
# Alphabet to Morse code (with sound effect) | ||
## 超越未来 | ||
## Intel Leap Ahead | ||
 |
Binary file not shown.
Binary file not shown.
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
module MorseCode | ||
|
||
go 1.17 | ||
|
||
require ( | ||
github.com/faiface/beep v1.1.0 | ||
github.com/gdamore/tcell v1.4.0 | ||
) | ||
|
||
require ( | ||
github.com/gdamore/encoding v1.0.0 // indirect | ||
github.com/hajimehoshi/go-mp3 v0.3.0 // indirect | ||
github.com/hajimehoshi/oto v0.7.1 // indirect | ||
github.com/lucasb-eyer/go-colorful v1.0.3 // indirect | ||
github.com/mattn/go-runewidth v0.0.7 // indirect | ||
github.com/pkg/errors v0.9.1 // indirect | ||
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8 // indirect | ||
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067 // indirect | ||
golang.org/x/mobile v0.0.0-20190415191353-3e0bab5405d6 // indirect | ||
golang.org/x/sys v0.0.0-20190626150813-e07cf5db2756 // indirect | ||
golang.org/x/text v0.3.0 // indirect | ||
) |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= | ||
github.com/d4l3k/messagediff v1.2.2-0.20190829033028-7e0a312ae40b/go.mod h1:Oozbb1TVXFac9FtSIxHBMnBCq2qeH/2KkEQxENCrlLo= | ||
github.com/faiface/beep v1.1.0 h1:A2gWP6xf5Rh7RG/p9/VAW2jRSDEGQm5sbOb38sf5d4c= | ||
github.com/faiface/beep v1.1.0/go.mod h1:6I8p6kK2q4opL/eWb+kAkk38ehnTunWeToJB+s51sT4= | ||
github.com/gdamore/encoding v1.0.0 h1:+7OoQ1Bc6eTm5niUzBa0Ctsh6JbMW6Ra+YNuAtDBdko= | ||
github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg= | ||
github.com/gdamore/tcell v1.3.0/go.mod h1:Hjvr+Ofd+gLglo7RYKxxnzCBmev3BzsS67MebKS4zMM= | ||
github.com/gdamore/tcell v1.4.0 h1:vUnHwJRvcPQa3tzi+0QI4U9JINXYJlOz9yiaiPQ2wMU= | ||
github.com/gdamore/tcell v1.4.0/go.mod h1:vxEiSDZdW3L+Uhjii9c3375IlDmR05bzxY404ZVSMo0= | ||
github.com/go-audio/audio v1.0.0/go.mod h1:6uAu0+H2lHkwdGsAY+j2wHPNPpPoeg5AaEFh9FlA+Zs= | ||
github.com/go-audio/riff v1.0.0/go.mod h1:l3cQwc85y79NQFCRB7TiPoNiaijp6q8Z0Uv38rVG498= | ||
github.com/go-audio/wav v1.0.0/go.mod h1:3yoReyQOsiARkvPl3ERCi8JFjihzG6WhjYpZCf5zAWE= | ||
github.com/hajimehoshi/go-mp3 v0.3.0 h1:fTM5DXjp/DL2G74HHAs/aBGiS9Tg7wnp+jkU38bHy4g= | ||
github.com/hajimehoshi/go-mp3 v0.3.0/go.mod h1:qMJj/CSDxx6CGHiZeCgbiq2DSUkbK0UbtXShQcnfyMM= | ||
github.com/hajimehoshi/oto v0.6.1/go.mod h1:0QXGEkbuJRohbJaxr7ZQSxnju7hEhseiPx2hrh6raOI= | ||
github.com/hajimehoshi/oto v0.7.1 h1:I7maFPz5MBCwiutOrz++DLdbr4rTzBsbBuV2VpgU9kk= | ||
github.com/hajimehoshi/oto v0.7.1/go.mod h1:wovJ8WWMfFKvP587mhHgot/MBr4DnNy9m6EepeVGnos= | ||
github.com/icza/bitio v1.0.0/go.mod h1:0jGnlLAx8MKMr9VGnn/4YrvZiprkvBelsVIbA9Jjr9A= | ||
github.com/icza/mighty v0.0.0-20180919140131-cfd07d671de6/go.mod h1:xQig96I1VNBDIWGCdTt54nHt6EeI639SmHycLYL7FkA= | ||
github.com/jfreymuth/oggvorbis v1.0.1/go.mod h1:NqS+K+UXKje0FUYUPosyQ+XTVvjmVjps1aEZH1sumIk= | ||
github.com/jfreymuth/vorbis v1.0.0/go.mod h1:8zy3lUAm9K/rJJk223RKy6vjCZTWC61NA2QD06bfOE0= | ||
github.com/lucasb-eyer/go-colorful v1.0.2/go.mod h1:0MS4r+7BZKSJ5mw4/S5MPN+qHFF1fYclkSPilDOKW0s= | ||
github.com/lucasb-eyer/go-colorful v1.0.3 h1:QIbQXiugsb+q10B+MI+7DI1oQLdmnep86tWFlaaUAac= | ||
github.com/lucasb-eyer/go-colorful v1.0.3/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= | ||
github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= | ||
github.com/mattn/go-runewidth v0.0.7 h1:Ei8KR0497xHyKJPAv59M1dkC+rOZCMBJ+t3fZ+twI54= | ||
github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= | ||
github.com/mewkiz/flac v1.0.7/go.mod h1:yU74UH277dBUpqxPouHSQIar3G1X/QIclVbFahSd1pU= | ||
github.com/mewkiz/pkg v0.0.0-20190919212034-518ade7978e2/go.mod h1:3E2FUC/qYUfM8+r9zAwpeHJzqRVVMIYnpzD/clwWxyA= | ||
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= | ||
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= | ||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= | ||
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8 h1:idBdZTd9UioThJp8KpM/rTSinK/ChZFBE43/WtIy8zg= | ||
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= | ||
golang.org/x/image v0.0.0-20190220214146-31aff87c08e9/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= | ||
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067 h1:KYGJGHOQy8oSi1fDlSpcZF0+juKwk/hEMv5SiwHogR0= | ||
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= | ||
golang.org/x/mobile v0.0.0-20190415191353-3e0bab5405d6 h1:vyLBGJPIl9ZYbcQFM2USFmJBK6KI+t+z6jL0lbwjrnc= | ||
golang.org/x/mobile v0.0.0-20190415191353-3e0bab5405d6/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= | ||
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||
golang.org/x/sys v0.0.0-20190429190828-d89cdac9e872/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||
golang.org/x/sys v0.0.0-20190626150813-e07cf5db2756 h1:9nuHUbU8dRnRRfj9KjWUVrJeoexdbeMjttk6Oh1rD10= | ||
golang.org/x/sys v0.0.0-20190626150813-e07cf5db2756/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= | ||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,229 @@ | ||
package main | ||
|
||
import ( | ||
"bufio" | ||
"fmt" | ||
"github.com/faiface/beep" | ||
"github.com/faiface/beep/speaker" | ||
"github.com/faiface/beep/wav" | ||
"log" | ||
"os" | ||
"strings" | ||
"time" | ||
) | ||
|
||
func Voice(fd string) { | ||
f, err := os.Open(fd) | ||
defer f.Close() | ||
if err != nil { | ||
report(err) | ||
} | ||
streamer, format, err := wav.Decode(f) | ||
if err != nil { | ||
log.Fatal(err) | ||
} | ||
defer streamer.Close() | ||
speaker.Init(format.SampleRate, format.SampleRate.N(time.Second/20)) | ||
|
||
done := make(chan bool) | ||
speaker.Play(beep.Seq(streamer, beep.Callback(func() { | ||
done <- true | ||
}))) | ||
|
||
<-done | ||
return | ||
} | ||
|
||
func (m *MorseWay) Dot() { | ||
fmt.Printf("·") | ||
Voice("./b.wav") | ||
} | ||
|
||
func (m *MorseWay) Dash() { | ||
fmt.Printf("-") | ||
Voice("./a.wav") | ||
} | ||
|
||
func (m *MorseWay) Pause() { | ||
fmt.Printf(m.PauseWat) | ||
time.Sleep(300 * time.Millisecond) | ||
} | ||
|
||
const ( | ||
A = "A" | ||
B = "B" | ||
C = "C" | ||
D = "D" | ||
E = "E" | ||
F = "F" | ||
G = "G" | ||
H = "H" | ||
I = "I" | ||
J = "J" | ||
K = "K" | ||
L = "L" | ||
M = "M" | ||
N = "N" | ||
O = "O" | ||
P = "P" | ||
Q = "Q" | ||
R = "R" | ||
S = "S" | ||
T = "T" | ||
U = "U" | ||
V = "V" | ||
W = "W" | ||
X = "x" | ||
Y = "Y" | ||
Z = "Z" | ||
a = "a" | ||
b = "b" | ||
c = "c" | ||
d = "d" | ||
e = "e" | ||
f = "f" | ||
g = "g" | ||
h = "h" | ||
i = "i" | ||
j = "j" | ||
k = "k" | ||
l = "l" | ||
lm = "m" | ||
n = "n" | ||
o = "o" | ||
p = "p" | ||
q = "q" | ||
r = "r" | ||
s = "s" | ||
t = "t" | ||
u = "u" | ||
v = "v" | ||
w = "w" | ||
x = "x" | ||
y = "y" | ||
z = "z" | ||
) | ||
|
||
type MorseWay struct { | ||
DotWay string | ||
DashWay string | ||
PauseWat string | ||
Col Collect | ||
} | ||
|
||
type Collect map[string]string | ||
|
||
func (m *MorseWay) InitData() { | ||
m.DotWay = "·" | ||
m.DashWay = "-" | ||
m.PauseWat = " " | ||
m.Col = make(map[string]string, 0) | ||
m.Col[a] = m.DotWay + m.DashWay + m.PauseWat //。- | ||
m.Col[A] = m.DotWay + m.DashWay + m.PauseWat | ||
m.Col[b] = m.DashWay + m.DotWay + m.DotWay + m.DotWay + m.PauseWat //- 。。。 | ||
m.Col[B] = m.DashWay + m.DotWay + m.DotWay + m.DotWay + m.PauseWat | ||
m.Col[c] = m.DashWay + m.DotWay + m.DashWay + m.DotWay + m.PauseWat //- 。- 。 | ||
m.Col[C] = m.DashWay + m.DotWay + m.DashWay + m.DotWay + m.PauseWat | ||
m.Col[d] = m.DashWay + m.DotWay + m.DotWay + m.PauseWat //- 。。 | ||
m.Col[D] = m.DashWay + m.DotWay + m.DotWay + m.PauseWat | ||
m.Col[e] = m.DotWay + m.PauseWat //。 | ||
m.Col[E] = m.DotWay + m.PauseWat | ||
m.Col[f] = m.DotWay + m.DotWay + m.DashWay + m.DotWay + m.PauseWat //。。- 。 | ||
m.Col[F] = m.DotWay + m.DotWay + m.DashWay + m.DotWay + m.PauseWat | ||
m.Col[g] = m.DashWay + m.DashWay + m.DotWay + m.PauseWat //- - 。 | ||
m.Col[G] = m.DashWay + m.DashWay + m.DotWay + m.PauseWat | ||
m.Col[h] = m.DotWay + m.DotWay + m.DotWay + m.DotWay + m.PauseWat //。。。。 | ||
m.Col[H] = m.DotWay + m.DotWay + m.DotWay + m.DotWay + m.PauseWat | ||
m.Col[i] = m.DotWay + m.DotWay + m.PauseWat //。。 | ||
m.Col[I] = m.DotWay + m.DotWay + m.PauseWat | ||
m.Col[j] = m.DotWay + m.DashWay + m.DashWay + m.PauseWat //。 - - | ||
m.Col[J] = m.DotWay + m.DashWay + m.DashWay + m.PauseWat | ||
m.Col[k] = m.DashWay + m.DotWay + m.DashWay + m.PauseWat //-。- | ||
m.Col[K] = m.DashWay + m.DotWay + m.DashWay + m.PauseWat | ||
m.Col[l] = m.DotWay + m.DashWay + m.DotWay + m.DotWay + m.PauseWat //。-。。 | ||
m.Col[L] = m.DotWay + m.DashWay + m.DotWay + m.DotWay + m.PauseWat | ||
m.Col[lm] = m.DashWay + m.DashWay + m.PauseWat //- - | ||
m.Col[M] = m.DashWay + m.DashWay + m.PauseWat | ||
m.Col[n] = m.DashWay + m.DotWay + m.PauseWat //-。 | ||
m.Col[N] = m.DashWay + m.DotWay + m.PauseWat | ||
m.Col[o] = m.DashWay + m.DashWay + m.DashWay + m.PauseWat //- - | ||
m.Col[O] = m.DashWay + m.DashWay + m.DashWay + m.PauseWat | ||
m.Col[p] = m.DotWay + m.DashWay + m.DashWay + m.DotWay + m.PauseWat //。 - - 。 | ||
m.Col[P] = m.DotWay + m.DashWay + m.DashWay + m.DotWay + m.PauseWat | ||
m.Col[q] = m.DashWay + m.DashWay + m.DotWay + m.DashWay + m.PauseWat //- - 。- | ||
m.Col[Q] = m.DashWay + m.DashWay + m.DotWay + m.DashWay + m.PauseWat | ||
m.Col[r] = m.DotWay + m.DashWay + m.DotWay + m.PauseWat //。- 。 | ||
m.Col[R] = m.DotWay + m.DashWay + m.DotWay + m.PauseWat | ||
m.Col[s] = m.DotWay + m.DotWay + m.DotWay + m.PauseWat //。。。。 | ||
m.Col[S] = m.DotWay + m.DotWay + m.DotWay + m.PauseWat | ||
m.Col[t] = m.DashWay + m.PauseWat //- | ||
m.Col[T] = m.DashWay + m.PauseWat | ||
m.Col[u] = m.DotWay + m.DotWay + m.DashWay + m.PauseWat //。。- | ||
m.Col[U] = m.DotWay + m.DotWay + m.DashWay + m.PauseWat | ||
m.Col[v] = m.DotWay + m.DotWay + m.DotWay + m.DashWay + m.PauseWat //。。。- | ||
m.Col[V] = m.DotWay + m.DotWay + m.DotWay + m.DashWay + m.PauseWat | ||
m.Col[w] = m.DotWay + m.DashWay + m.DashWay + m.PauseWat //。 - - | ||
m.Col[W] = m.DotWay + m.DashWay + m.DashWay + m.PauseWat | ||
m.Col[x] = m.DashWay + m.DotWay + m.DashWay + m.DashWay + m.PauseWat //-。 - - | ||
m.Col[X] = m.DashWay + m.DotWay + m.DashWay + m.DashWay + m.PauseWat | ||
m.Col[y] = m.DashWay + m.DotWay + m.DashWay + m.DashWay + m.PauseWat //-。- - | ||
m.Col[Y] = m.DashWay + m.DotWay + m.DashWay + m.DashWay + m.PauseWat | ||
m.Col[z] = m.DashWay + m.DashWay + m.DotWay + m.DotWay + m.PauseWat //- - | ||
m.Col[Z] = m.DashWay + m.DashWay + m.DotWay + m.DotWay + m.PauseWat | ||
|
||
} | ||
|
||
type Morse interface { | ||
Dot() | ||
Dash() | ||
Pause() | ||
InitData() | ||
} | ||
|
||
func (m *MorseWay) Explain(text string) { | ||
for _, v := range strings.Split(text, "") { | ||
m.Ticker(m.Col[v]) | ||
} | ||
fmt.Println() | ||
} | ||
|
||
func (m *MorseWay) Ticker(morse string) { | ||
for _, v := range strings.Split(morse, "") { | ||
switch v { | ||
case "·": | ||
m.Dot() | ||
break | ||
case "-": | ||
m.Dash() | ||
break | ||
default: | ||
break | ||
} | ||
} | ||
m.Pause() | ||
} | ||
|
||
func main() { | ||
fmt.Println("请输入a-z A-Z :") | ||
seen := make(map[string]bool) // a set of strings | ||
input := bufio.NewScanner(os.Stdin) | ||
m := new(MorseWay) | ||
m.InitData() | ||
for input.Scan() { | ||
line := input.Text() | ||
if !seen[line] { | ||
seen[line] = true | ||
m.Explain(line) | ||
} | ||
} | ||
|
||
if err := input.Err(); err != nil { | ||
fmt.Fprintf(os.Stderr, "dedup: %v\n", err) | ||
os.Exit(1) | ||
} | ||
} | ||
|
||
func report(err error) { | ||
fmt.Fprintln(os.Stderr, err) | ||
os.Exit(1) | ||
} |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Large diffs are not rendered by default.
Oops, something went wrong.