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

    +121

    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
    
    # <...>
    
    #Add new pitch information
    #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
    	Add point... times['q'] scalenotes['noteindex']
    endfor

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

    Запостил: telnet, 17 Января 2013

    Комментарии (11) RSS

    • Блог на 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.
        Ответить

    Добавить комментарий