eSpeak NG is an open source speech synthesizer that supports more than hundred languages and accents.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

data.cmake 4.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. list(APPEND _dict_compile_list
  2. af am an ar as az
  3. ba be bg bn bpy bs
  4. ca chr cmn cs cv cy
  5. da de
  6. el en eo es et eu
  7. fa fi fr
  8. ga gd gn grc gu
  9. hak haw he hi hr ht hu hy
  10. ia id io is it
  11. ja jbo
  12. ka kk kl kn kok ko ku ky
  13. la lb lfn lt lv
  14. mi mk ml mr ms mto mt my
  15. nci ne nl nog no
  16. om or
  17. pap pa piqd pl pt py
  18. qdb quc qu qya
  19. ro ru
  20. sd shn si sjn sk sl smj sq sr sv sw
  21. ta te ti th tk tn tr tt
  22. ug uk ur uz
  23. vi
  24. yue
  25. )
  26. list(APPEND _mbrola_lang_list
  27. af1 ar1 ar2
  28. ca cmn cr1 cs
  29. de2 de4 de6 de8
  30. ee1 en1 es es3 es4
  31. fr
  32. gr1 gr2 grc-de6
  33. he hn1 hu1
  34. ic1 id1 in ir1 it1 it3
  35. jp
  36. la1 lt
  37. ma1 mx1 mx2
  38. nl nz1
  39. pl1 pt1 ptbr ptbr4
  40. ro1
  41. sv sv2
  42. tl1 tr1
  43. us us3
  44. vz
  45. )
  46. set(DATA_DIST_ROOT ${CMAKE_CURRENT_BINARY_DIR})
  47. set(DATA_DIST_DIR ${DATA_DIST_ROOT}/espeak-ng-data)
  48. set(PHONEME_TMP_DIR ${DATA_DIST_ROOT}/phsource)
  49. set(DICT_TMP_DIR ${DATA_DIST_ROOT}/dictsource)
  50. set(DATA_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/espeak-ng-data)
  51. set(PHONEME_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/phsource)
  52. set(DICT_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/dictsource)
  53. file(MAKE_DIRECTORY "${DATA_DIST_DIR}")
  54. file(MAKE_DIRECTORY "${DICT_TMP_DIR}")
  55. file(COPY "${DATA_SRC_DIR}/lang" DESTINATION "${DATA_DIST_DIR}")
  56. file(COPY "${DATA_SRC_DIR}/voices/!v" DESTINATION "${DATA_DIST_DIR}/voices")
  57. file(COPY "${PHONEME_SRC_DIR}" DESTINATION "${DATA_DIST_ROOT}")
  58. set(ESPEAK_RUN_ENV ${CMAKE_COMMAND} -E env "ESPEAK_DATA_PATH=${DATA_DIST_ROOT}")
  59. set(ESPEAK_RUN_CMD ${ESPEAK_RUN_ENV} $ENV{VALGRIND} "$<TARGET_FILE:espeak-ng-bin>")
  60. add_custom_command(
  61. OUTPUT "${DATA_DIST_DIR}/intonations"
  62. COMMAND ${ESPEAK_RUN_CMD} --compile-intonations
  63. WORKING_DIRECTORY "${PHONEME_SRC_DIR}"
  64. COMMENT "Compile intonations"
  65. DEPENDS
  66. "$<TARGET_FILE:espeak-ng-bin>"
  67. "${PHONEME_SRC_DIR}/intonation"
  68. )
  69. set(_phon_deps "")
  70. function(check_phon_deps _file)
  71. set(_file "${PHONEME_SRC_DIR}/${_file}")
  72. list(APPEND _phon_deps "${_file}")
  73. file(STRINGS "${_file}" _phon_incs REGEX "include .+")
  74. list(TRANSFORM _phon_incs REPLACE "^[ \t]*include[ \t]+" "")
  75. foreach(_inc ${_phon_incs})
  76. check_phon_deps(${_inc})
  77. endforeach(_inc)
  78. set(_phon_deps ${_phon_deps} PARENT_SCOPE)
  79. endfunction(check_phon_deps)
  80. check_phon_deps("phonemes")
  81. add_custom_command(
  82. OUTPUT
  83. "${DATA_DIST_DIR}/phondata"
  84. "${DATA_DIST_DIR}/phondata-manifest"
  85. "${DATA_DIST_DIR}/phonindex"
  86. "${DATA_DIST_DIR}/phontab"
  87. COMMAND ${ESPEAK_RUN_CMD} --compile-phonemes
  88. WORKING_DIRECTORY "${PHONEME_SRC_DIR}"
  89. COMMENT "Compile phonemes"
  90. DEPENDS
  91. "${DATA_DIST_DIR}/intonations"
  92. "$<TARGET_FILE:espeak-ng-bin>"
  93. ${_phon_deps}
  94. )
  95. list(APPEND _dict_targets)
  96. list(APPEND _mbr_targets)
  97. foreach(_dict_name ${_dict_compile_list})
  98. set(_dict_target "${DATA_DIST_DIR}/${_dict_name}_dict")
  99. set(_dict_deps "")
  100. list(APPEND _dict_targets ${_dict_target})
  101. list(APPEND _dict_deps
  102. "${DICT_SRC_DIR}/${_dict_name}_rules"
  103. "${DICT_SRC_DIR}/${_dict_name}_list"
  104. )
  105. if(EXISTS "${DICT_SRC_DIR}/extra/${_dict_name}_listx")
  106. option(EXTRA_${_dict_name} "Compile extra ${_dict_name} dictionary" ON)
  107. if(EXTRA_${_dict_name})
  108. list(APPEND _dict_deps "${DICT_SRC_DIR}/extra/${_dict_name}_listx")
  109. else()
  110. file(REMOVE "${DICT_TMP_DIR}/${_dict_name}_listx")
  111. endif()
  112. elseif(EXISTS "${DICT_SRC_DIR}/${_dict_name}_listx")
  113. list(APPEND _dict_deps "${DICT_SRC_DIR}/${_dict_name}_listx")
  114. endif()
  115. if(EXISTS "${DICT_SRC_DIR}/${_dict_name}_emoji")
  116. list(APPEND _dict_deps "${DICT_SRC_DIR}/${_dict_name}_emoji")
  117. endif()
  118. add_custom_command(
  119. OUTPUT "${_dict_target}"
  120. COMMAND ${CMAKE_COMMAND} -E copy ${_dict_deps} "${DICT_TMP_DIR}/"
  121. COMMAND ${ESPEAK_RUN_CMD} --compile=${_dict_name}
  122. WORKING_DIRECTORY "${DICT_TMP_DIR}"
  123. DEPENDS
  124. "$<TARGET_FILE:espeak-ng-bin>"
  125. "${DATA_DIST_DIR}/phondata"
  126. "${DATA_DIST_DIR}/intonations"
  127. ${_dict_deps}
  128. )
  129. endforeach()
  130. if (HAVE_MBROLA AND USE_MBROLA)
  131. file(COPY "${DATA_SRC_DIR}/voices/mb" DESTINATION "${DATA_DIST_DIR}/voices")
  132. file(MAKE_DIRECTORY "${DATA_DIST_DIR}/mbrola_ph")
  133. foreach(_mbl ${_mbrola_lang_list})
  134. set(_mbl_src "${PHONEME_SRC_DIR}/mbrola/${_mbl}")
  135. set(_mbl_out "${DATA_DIST_DIR}/mbrola_ph/${_mbl}_phtrans")
  136. list(APPEND _mbr_targets ${_mbl_out})
  137. add_custom_command(
  138. OUTPUT "${_mbl_out}"
  139. COMMAND ${ESPEAK_RUN_CMD} --compile-mbrola="${_mbl_src}"
  140. DEPENDS "$<TARGET_FILE:espeak-ng-bin>" "${_mbl_src}"
  141. )
  142. endforeach(_mbl)
  143. endif()
  144. add_custom_target(
  145. data ALL
  146. DEPENDS
  147. "${DATA_DIST_DIR}/intonations"
  148. "${DATA_DIST_DIR}/phondata"
  149. ${_dict_targets}
  150. ${_mbr_targets}
  151. )
  152. install(DIRECTORY ${DATA_DIST_DIR} DESTINATION share)