-
Notifications
You must be signed in to change notification settings - Fork 8
/
build.gradle
76 lines (68 loc) · 2.43 KB
/
build.gradle
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
defaultTasks 'compileLaTeX'
apply plugin: 'base'
repositories {
ivy {
url 'http://festvox.org/cmu_arctic/'
layout 'pattern', {
artifact '[module].[ext]'
}
}
}
configurations.create 'data'
dependencies {
data name: 'cmuarctic', ext: 'data'
}
buildDir.mkdirs()
task downloadPromptList(type: Copy) {
from configurations.data
into buildDir
rename { 'prompts.txt' }
}
task synthesizeBeep(type: Exec) {
def beepFile = file("$buildDir/$beepFileName")
outputs.files beepFile
executable 'sox'
args '-n', beepFileName, 'synth', beepDuration, 'sin', beepFrequency
workingDir buildDir
}
def maskTeXChars(String str) {
// mask special characters for latex
return str.replaceAll("([&_])", '\\\\$1')
}
task generateLaTeX {
def texFile = file("$buildDir/prompts.tex")
inputs.files downloadPromptList
outputs.files texFile
doLast {
texFile.withWriter { tex ->
tex.println """% !TEX encoding = UTF-8 Unicode
|\\documentclass[aspectratio=${aspectRatio.replace('x', '')}]{beamer}
|\\usepackage[utf8]{inputenc}
|\\usepackage[activate=pageopen, transparent, noplaybutton]{media9}
|\\newcommand*{\\prompt}[2]{%
|\\begin{frame}{#1}
|\\centering
|{\\Huge #2}
|\\includemedia[addresource=$beepFileName, width=1em, height=1ex, flashvars={source=$beepFileName&autoPlay=true&hideBar=true}]{}{APlayer.swf}
|\\end{frame}}
|\\title{${maskTeXChars(project.name)}}
|\\date{}
|\\begin{document}
|\\frame{\\titlepage}""".stripMargin()
file("$buildDir/prompts.txt").eachLine {
def fields = maskTeXChars(it).split('[()" ]{2}')
def (basename, text) = fields[1..2]
tex.println "\\prompt{$basename}{$text}"
}
tex.println "\\end{document}"
}
}
}
task compileLaTeX(type: Exec, dependsOn: [generateLaTeX, synthesizeBeep]) {
def texFile = generateLaTeX.outputs.files.singleFile
inputs.files texFile, synthesizeBeep
outputs.files file("$buildDir/prompts.pdf")
executable 'latexmk'
args '-quiet', '-pdf', texFile
workingDir buildDir
}