1. ## Куча / Говнокод #12439

1. 01
2. 02
3. 03
4. 04
5. 05
6. 06
7. 07
8. 08
9. 09
10. 10
11. 11
12. 12
13. 13
14. 14
15. 15
16. 16
17. 17
18. 18
19. 19
20. 20
21. 21
22. 22
23. 23
24. 24
25. 25
26. 26
27. 27
28. 28
29. 29
30. 30
31. 31
32. 32
33. 33
34. 34
35. 35
36. 36
37. 37
38. 38
39. 39
40. 40
41. 41
42. 42
43. 43
44. 44
45. 45
46. 46
47. 47
48. 48
49. 49
50. 50
51. 51
52. 52
53. 53
54. 54
55. 55
56. 56
57. 57
58. 58
59. 59
60. 60
61. 61
62. 62
63. 63
64. 64
65. 65
66. 66
67. 67
68. 68
69. 69
70. 70
71. 71
72. 72
73. 73
74. 74
75. 75
76. 76
77. 77
78. 78
79. 79
80. 80
81. 81
82. 82
83. 83
84. 84
85. 85
86. 86
87. 87
88. 88
89. 89
90. 90
91. 91
``````#Creates an array with the frequencies from C2 to C5, 37 notes in all
for j from 1 to 37
if j = 1
notes [j] = 65.41 # лёгкие пути не нужны
endif
if j = 2
notes [j] = 69.30
endif
# ...дальше понятно...
endfor

# <...>

#Determining whether or not the scale contains C
#This determines how many notes of the 37 possible must be included.
noCList [1] = 3 # опа, а вот тут уже научились числовые индексы использовать
noCList [2] = 5
noCList [3] = 7
noCList [4] = 10
noCList [5] = 12
noC = 0
for n from 1 to 5
if 'starter' = noCList['n']
noC = 1
endif
endfor
#If there is a C...
if noC = 0
#The for loop mathematically selects the scale notes to use
for m from 1 to 22
if 'm' = 1
noteind = 'starter'
endif
if 'm' = 2
noteind = 'starter' + 2
if 'noteind' > 37
noteind = 'noteind' - 36
endif
endif
# ...ага-ага...
scalenotes ['m'] = notes['noteind']
endfor
#If there is not a C...
else
for m from 1 to 21
if 'm' = 1
noteind = 'starter'
endif
if 'm' = 2
noteind = 'starter' + 2
if 'noteind' > 37
noteind = 'noteind' - 36
endif
endif
# ...так точно...
scalenotes ['m'] = notes['noteind']
endfor
endif

# <...>

#For each point, we move the freq to the closest scale note
for q from 1 to 'numPoints'
#The original freq of pitch
currentfreq = pitches['q']
#A starting threhold for difference between original and a musical note
diff = 50
#If there is C in the scale, making 22 possible notes to tune to...
if 'noC' = 0
#For loop finds the lowest difference between original pitch and a musical note
for c from 1 to 22
diff2 = abs('currentfreq' - scalenotes['c'])
if 'diff2' < 'diff'
diff = 'diff2'
noteindex = 'c'
endif
endfor
#Otherwise if there is not a C...
else
for c from 1 to 21
diff2 = abs('currentfreq' - scalenotes['c'])
if 'diff2' < 'diff'
diff = 'diff2'
noteindex = 'c'
endif
endfor
endif
#Add point at the original time with the new pitch
endfor``````

http://schyzm.wordpress.com/2012/12/05/fun-with-praat-a-script-for-auto-tune/
Скрипт питч-коррекции для речевого анализатора Praat на встроенном языке сценариев. Не знаю, это афтар так жжот или язык располагает к черезжопию, но что-то тут воняет однозначно.

• Блог на WP про атеизм со смищными твитами в боковой панели. Скорее всего, его автор - не такой, как все (tm). Чего еще можно было ожидать от человека, который не верит в Древних богов с далеких темных звезд?
Ответить
• Шо ви таки имеете против атеистов?
Ответить
• Ничего не имею. Просто у меня нет бложика и твиттером я не пользуюсь. Завидую, одним словом.
Ответить
• Так это же лечится элементарно. Я вот планирую свою зависть таки вылечить.
Ответить
• Туда же писать чего-то надо. А потом обновлять. Еще и фолловеры заведутся...
Короче, гемор...
Ответить
• Ну как, вылечил?
Ответить
• > Шо ви таки имеете против атеистов?
А ты подай в суд за оскорбления твоих религиозных чувств.
Ответить
• Императивно декларативно. Выглядит сносно. Что не так? Я бы даже сказал, по сравнению с некоторыми встроенными языками очень даже красиво.
Ответить
• Not sure if trolling or... Если вчитаться, видно, что языковых конструкций в местном сценарном языке более чем достаточно, чтобы всё это очень сильно упростить. В частности:
1) набор частот (01-10, в оригинале 014-127) можно задать гораздо короче, без кучи if'ов и цикла, т.к., судя по 16-20, язык поддерживает явное обращение к индексам массива;
2) ...да и нафига вообще заполнять это вручную, если частоты считаются в цикле по простейшей формуле (степенная зависимость), заодно и опорную высоту вместо хардкода можно предложить юзеру вводить (потребность редкая, но некоторым необходимая);
3) 27-58 (в оригинале 169-438) тоже можно оптимизировать без кучи ненужных if'ов и бредового деления на 21 и 22 (уж как минимум можно было загнать эту величину в переменную и подставить в for);
4) в 62-91 та же история с делением на 21 и 22.
Ответить