FORVO Pronunciations in All Languages (>6.7 million)

Pronunciations from Forvo.com
Number of audios: > 6.7 million
Number of languages: 357
Format: .opus and .mp3
License: CC BY-NC-SA 3.0

Description: All Forvo audios from 2008 until 2021. All languages registered on Forvo are available. Languages are organized according to their code on Forvo.

If you are interested in a language just download the .zip file (eg. English is called “en.zip”). Then, decompress the zip file in a single folder.

Audios can be used to compile .mdx/.dsl dictionaries or used directly on GoldenDict as “Sound Directories”:


Then, Press Apply. Ready. The collection of audios in your target language should appear as a Dictionary available on GoldenDict.

Download:
Folder name: 0 Forvo Audio
https://cloud.freemdict.com/index.php/s/pgKcDcbSDTCzXCs

Torrent:
Forvo.com Audios (rutracker).zip (208.0 KB)

Notes:
1) .opus audio format is ideal for human voices and the size is smaller than .mp3

Ready .DSL Dictionaries are available: (zips with sounds for them should be taken from the folder opus). Thanks to “Svirepov”.

PS. A member of Ru-Board (“Svirepov”) also published a Python script to automatically make .dsl files from the .zip files:
Download script HERE:

Source: Ошибка :: Компьютерный форум Ru.Board

Automatic Translation:
A Python script that takes zip with sound files from Forvo and generates a DSL for it so that the archive is not unpacked, but immediately used as .dsl.files.zip under GoldenDict.

It works like this ( <dict_name> <index_language> <contents_language>):

The code:

forvo-zip2dsl.py nl.zip ‘Forvo Dutch’ Dutch Dutch >ForvoDutch.dsl

nl.zip rename to

ForvoDutch.dsl.files.zip

and put them next to the .dsl
Or - if you use .dsl.dz - to .dsl.dz.files.zip (desktop GD doesn’t care, mobile GD seems not to).

28 个赞

Thanks for crawling and uploading.

2 个赞

Amazing resource. Thanks a lot.

2 个赞

文件有多大呢,我这边看不出多大,再盲下。。。不知硬盘容量还够不够

1 个赞

卧槽,看到了,一个近30G,一个近50G
不知道有没有下下来的老哥弄个百度盘的链接的
我这边不知为啥,只有几十K的速度。。。。

3 个赞

You can download only the language in which you are interested. For example, English is only 1.2 GiB in .opus format.

Regarding Baidu, I cannot upload there from my country. I would appreciate if someone uploads the whole collection into Baidu.

It would be good to upload in Baidu because the servers of FreeMDict might become congested…

3 个赞

多谢楼主,慢慢下载。

1 个赞

Such a great work

1 个赞

在执行的时候出现了这样的错误提示:
File “forvo-zip2dsl.py”, line 8
‘<contents_language> <index_language>’, file=sys.stderr)
^
SyntaxError: invalid syntax

1 个赞

解决了,是python版本问题。

3 个赞

Here is the METADATA off all Forvo audios.

https://cloud.freemdict.com/index.php/s/7M9fjc7aWEKwbrP

It includes speaker’s country, gender, number of votes, etc. The file needs to be compressed and opened via terminal (only).

Also available there is the Python script that was used. The script needs the metadata (json file) in the same folder to work.


@okayer I hope it could be useful for your .mdd compilation

It would be ideal to compile an .mdd file that includes the speakers country, gender and number of votes (as in Forvo).

2 个赞

@hua Could you kindly offer some help to our friend @okayer to compile a .mdd from Forvo Audios ?

2 个赞

I admire your time and efforts!

2 个赞

发一下各国语言的代号:

语言代码缩写 语言 语言代码缩写 语言
af 南非公用荷兰语 sq 阿尔巴尼亚语
ar-sa 阿拉伯语(沙特阿拉伯) ar-iq 阿拉伯语(伊拉克)
ar-eg 阿拉伯语(埃及) ar-ly 阿拉伯文(利比亚)
ar-dz 阿拉伯文(阿尔及利亚) ar-ma 阿拉伯语(摩洛哥)
ar-tn 阿拉伯语(突尼斯) ar-om 阿拉伯文(阿曼)
ar-ye 阿拉伯文(也门) ar-sy 阿拉伯文(叙利亚)
ar-jo 阿拉伯文(约旦) ar-lb 阿拉伯语(黎巴嫩)
ar-kw 阿拉伯文(科威特) ar-ae 阿拉伯语(阿联酋)
ar-bh 阿拉伯语(巴林) ar-qa 阿拉伯文(卡塔尔)
eu 巴斯克语 bg 保加利亚语
be 白俄罗斯语 ca 加泰罗尼亚语
zh-tw 中文(台湾) zh-cn 中文(中华人民共和国)
zh-hk 中文(香港特区) zh-sg 中文(新加坡)
hr 克罗地亚语 cs 捷克语
da 丹麦语 nl 荷兰语(标准)
nl-be 荷兰语(比利时) en 英语
en-us 英语(美国) en-gb 英语(英国)
en-au 英语(澳大利亚) en-ca 英语(加拿大)
en-nz 英语(新西兰) en-ie 英国(爱尔兰)
en-za 英语(南非) en-jm 英语(牙买加)
en 英语(加勒比海) en-bz 英语(伯利兹)
en-tt 英语(特立尼达和多巴哥) et 爱沙尼亚语
fo 法罗语 fa 波斯语
fi 芬兰语 fr 法语(标准)
fr-be 法语(比利时) fr-ca 法语(加拿大)
fr-ch 法语(瑞士) fr-lu 法语(卢森堡)
gd 盖尔语(苏格兰) ga 爱尔兰语
de 德语(标准) de-ch 德语(瑞士)
de-at 德语(奥地利) de-lu 德语(卢森堡)
de-li 德语(列支敦士登) el 希腊
he 希伯来语 hi 印地文
hu 匈牙利语 is 冰岛语
id 印度尼西亚语 it 意大利语(标准)
it-ch 意大利语(瑞士) ja 日语
ko 韩语 ko 韩文(韓文)
lv 拉脱维亚语 lt 立陶宛语
mk 马其顿语(前南马其顿) ms 马来西亚语
mt 马耳他语 no 挪威文(巴克摩)
no 挪威文(耐诺斯克) pl 波兰语
pt-br 葡萄牙语(巴西) pt 葡萄牙语(葡萄牙)
rm 里托罗曼斯文 ro 罗马尼亚语
ro-mo 罗马尼亚语(摩尔多瓦共和国) ru 俄语
ru-mo 俄罗斯(摩尔多瓦共和国) sz 萨米语(拉普语)
sr 塞尔维亚语(西里尔文) sr 塞尔维亚语(拉丁)
sk 斯洛伐克语 sl 斯洛文尼亚语
sb 索布语 es 西班牙语(西班牙)
es-mx 西班牙语(墨西哥) es-gt 西班牙语(危地马拉)
es-cr 西班牙语(哥​​斯达黎加) es-pa 西班牙语(巴拿马)
es-do 西班牙文(多米尼加共和国) es-ve 西班牙语(委内瑞拉)
es-co 西班牙语(哥​​伦比亚) es-pe 西班牙语(秘鲁)
es-ar 西班牙语(阿根廷) es-ec 西班牙语(厄瓜多尔)
es-cl 西班牙语(智利) es-uy 西班牙语(乌拉圭)
es-py 西班牙语(巴拉圭) es-bo 西班牙语(玻利维亚)
es-sv 西班牙语(萨尔瓦多) es-hn 西班牙语(洪都拉斯)
es-ni 西班牙语(尼加拉瓜) es-pr 西班牙语(波多黎各)
sx 苏图语 sv 瑞典语
sv-fi 瑞典语(芬兰) th 泰国语
ts 特松加语 tn 茨瓦纳语
tr 土耳其语 uk 乌克兰语
ur 乌尔都语 ve 文达语
vi 越南语 xh 科萨语
ji 意第绪语 zu 祖鲁语
6 个赞

Thanks for your hard work @sannuofy . Very useful ! :slight_smile:

I have a question, how could I know if the voice has been load successfully?

# UTF-8

import os
# 复制操作 及 异常处理
import sys
from shutil import copyfile
from sys import exit

# 使用绝对路径,指定语言代码后,将 opus 目录下的文件复制到 DSL 目录下。
Language_I_want = ['ja','de']
opus_dir = r"\0 Forvo audio\opus"
ForvoDSL_dir = r"\0 Forvo audio\dsl files (by Svirepov)\ForvoDSL (May 14, 2022)\ForvoDSL\ForvoDSL-20220513"


# 常量: 语言代码 - 字典
# 与 DSL 不一定匹配,因为有空格。
result={'abq': 'Abaza', 'ab': 'Abkhazian', 'abn': 'Abua', 'ady': 'Adygean', 'aa': 'Afar', 'af': 'Afrikaans', 'agx': 'Aghul', 'ain': 'Ainu', 'ak': 'Akan', 'sq': 'Albanian', 'ale': 'Aleut', 'arq': 'Algerian Arabic', 'alq': 'Algonquin', 'ems': 'Alutiiq', 'am': 'Amharic', 'grc': 'Ancient Greek', 'ar': 'Arabic', 'an': 'Aragonese', 'arp': 'Arapaho', 'aae': 'Arbëresh', 'hy': 'Armenian', 'rup': 'Aromanian', 'as': 'Assamese', 'aii': 'Assyrian Neo-Aramaic', 'ast': 'Asturian', 'av': 'Avaric', 'ay': 'Aymara', 'az': 'Azerbaijani', 'bqi': 'Bakhtiari', 'bal': 'Balochi', 'bm': 'Bambara', 'bcj': 'Bardi', 'ba': 'Bashkir', 'eu': 'Basque', 'bar': 'Bavarian', 'be': 'Belarusian', 'bem': 'Bemba', 'bcq': 'Bench', 'bn': 'Bengali', 'bho': 'Bhojpuri', 'hbo': 'Biblical Hebrew', 'bh': 'Bihari', 'bi': 'Bislama', 'fla': 'Bitterroot Salish', 'bs': 'Bosnian', 'bph': 'Botlikh', 'pcc': 'Bouyei', 'br': 'Breton', 'bzd': 'Bribri', 'bg': 'Bulgarian', 'my': 'Burmese', 'bsk': 'Burushaski', 'bxr': 'Buryat', 'sro': 'Campidanese', 'yue': 'Cantonese', 'kea': 'Cape Verdean Creole', 'ca': 'Catalan', 'cay': 'Cayuga', 'ceb': 'Cebuano', 'tzm': 'Central Atlas Tamazight', 'bcl': 'Central Bikol', 'ch': 'Chamorro', 'plig': 'Changzhou', 'ce': 'Chechen', 'cpn': 'Cherepon', 'chr': 'Cherokee', 'ny': 'Chichewa', 'cic': 'Chickasaw', 'chn': 'Chinook Jargon', 'cho': 'Choctaw', 'cv': 'Chuvash', 'rar': 'Cook Islands Maori', 'cop': 'Coptic', 'kw': 'Cornish', 'co': 'Corsican', 'cr': 'Cree', 'mus': 'Creek', 'crh': 'Crimean Tatar', 'hr': 'Croatian', 'acy': 'Cypriot Arabic', 'cs': 'Czech', 'dag': 'Dagbani', 'ada': 'Dangme', 'da': 'Danish', 'prs': 'Dari', 'din': 'Dinka', 'dv': 'Divehi', 'siiy': 'Doumen Hua', 'dtp': 'Dusun', 'nl': 'Dutch', 'dz': 'Dzongkha', 'bin': 'Edo', 'arz': 'Egyptian Arabic', 'ekp': 'Ekpeye', 'egl': 'Emilian', 'en': 'English', 'myv': 'Erzya', 'eo': 'Esperanto', 'et': 'Estonian', 'eto': 'Eton', 'ett': 'Etruscan', 'evn': 'Evenki', 'ee': 'Ewe', 'ewo': 'Ewondo', 'fo': 'Faroese', 'hif': 'Fiji Hindi', 'fj': 'Fijian', 'fi': 'Finnish', 'vls': 'Flemish', 'frp': 'Franco-Provençal', 'fr': 'French', 'fy': 'Frisian', 'fur': 'Friulan', 'ff': 'Fulah', 'fzho': 'Fuzhou', 'gaa': 'Ga', 'gag': 'Gagauz', 'gl': 'Galician', 'gan': 'Gan Chinese', 'ka': 'Georgian', 'de': 'German', 'glk': 'Gilaki', 'gil': 'Gilbertese', 'got': 'Gothic', 'el': 'Greek', 'gn': 'Guarani', 'gu': 'Gujarati', 'afb': 'Gulf Arabic', 'guz': 'Gusii', 'ht': 'Haitian Creole', 'hak': 'Hakka', 'mey': 'Hassaniyya', 'ha': 'Hausa', 'haw': 'Hawaiian', 'he': 'Hebrew', 'hz': 'Herero', 'hil': 'Hiligaynon', 'hi': 'Hindi', 'ho': 'Hiri motu', 'hmn': 'Hmong', 'hop': 'Hopi', 'hu': 'Hungarian', 'is': 'Icelandic', 'io': 'Ido', 'ig': 'Igbo', 'ilo': 'Iloko', 'ind': 'Indonesian', 'inh': 'Ingush', 'ia': 'Interlingua', 'ie': 'Interlingue', 'iu': 'Inuktitut', 'ik': 'Inupiaq', 'ga': 'Irish', 'it': 'Italian', 'ibd': 'Iwaidja', 'jam': 'Jamaican Patois', 'ja': 'Japanese', 'jv': 'Javanese', 'jje': 'Jeju', 'jliu': 'Jiaoliao Mandarin', 'jlua': 'Jilu Mandarin', 'cjy': 'Jin Chinese', 'lad': 'Judeo-Spanish', 'kbd': 'Kabardian', 'kab': 'Kabyle', 'kl': 'Kalaallisut', 'kln': 'Kalenjin', 'xal': 'Kalmyk', 'kn': 'Kannada', 'kr': 'Kanuri', 'krc': 'Karachay-Balkar', 'kaa': 'Karakalpak', 'krl': 'Karelian', 'ks': 'Kashmiri', 'csb': 'Kashubian', 'kk': 'Kazakh', 'kca': 'Khanty', 'kha': 'Khasi', 'km': 'Khmer', 'ki': 'Kikuyu', 'kmb': 'Kimbundu', 'rw': 'Kinyarwanda', 'rn': 'Kirundi', 'tlh': 'Klingon', 'kv': 'Komi', 'koi': 'Komi-Permyak', 'kg': 'Kongo', 'gom': 'Konkani', 'ko': 'Korean', 'kpy': 'Koryak', 'avk': 'Kotava', 'kri': 'Krio', 'kj': 'Kuanyama', 'ku': 'Kurdish', 'kmr': 'Kurmanji', 'kfr': 'Kutchi', 'ky': 'Kyrgyz', 'quc': 'Kʼicheʼ', 'lld': 'Ladin', 'lbe': 'Lak', 'lki': 'Laki', 'lkt': 'Lakota', 'lo': 'Lao', 'ltg': 'Latgalian', 'la': 'Latin', 'lv': 'Latvian', 'lzz': 'Laz', 'lez': 'Lezgian', 'lij': 'Ligurian', 'li': 'Limburgish', 'ln': 'Lingala', 'lt': 'Lithuanian', 'jbo': 'Lojban', 'lmo': 'Lombard', 'lou': 'Louisiana Creole', 'nds': 'Low German', 'juai': 'Lower Yangtze Mandarin', 'loz': 'Lozi', 'lu': 'Luba-katanga', 'lg': 'Luganda', 'luo': 'Luo', 'lut': 'Lushootseed', 'lb': 'Luxembourgish', 'mk': 'Macedonian', 'mag': 'Magahi', 'bfz': 'Mahasu Pahari', 'vmf': 'Mainfränkisch', 'mak': 'Makassarese', 'mg': 'Malagasy', 'ms': 'Malay', 'ml': 'Malayalam', 'zsm': 'Malaysian', 'mt': 'Maltese', 'mnc': 'Manchu', 'zh': 'Mandarin Chinese', 'mnk': 'Mandinka', 'mns': 'Mansi', 'gv': 'Manx', 'swb': 'Maore', 'mi': 'Māori', 'arn': 'Mapudungun', 'mr': 'Marathi', 'chm': 'Mari', 'mh': 'Marshallese', 'msb': 'Masbateño', 'mfe': 'Mauritian Creole', 'myn': 'Mayan languages', 'mzn': 'Mazandarani', 'mfo': 'Mbe', 'gun': 'Mbya Guarani', 'mni': 'Meitei', 'pdt': 'Mennonite Low German', 'apm': 'Mescalero-Chiricahua', 'acm': 'Mesopotamian Arabic', 'crg': 'Michif', 'mic': 'Micmac', 'ltc': 'Middle Chinese', 'enm': 'Middle English', 'cdo': 'Min Dong', 'nan': 'Min Nan', 'min': 'Minangkabau', 'xmf': 'Mingrelian', 'lrc': 'Minjaee Luri', 'moh': 'Mohawk', 'mdf': 'Moksha', 'mo': 'Moldovan', 'mn': 'Mongolian', 'ary': 'Moroccan Arabic', 'mos': 'Mossi', 'wlc': 'Mwali', 'mwn': 'Mwanga', 'nah': 'Nahuatl', 'nsk': 'Naskapi', 'na': 'Nauru', 'nv': 'Navajo', 'ppl': 'Nawat', 'nxq': 'Naxi', 'ng': 'Ndonga', 'wni': 'Ndzwani', 'nap': 'Neapolitan', 'new': 'Nepal Bhasa', 'ne': 'Nepali', 'zdj': 'Ngazidja', 'yrl': 'Nheengatu', 'nog': 'Nogai', 'apc': 'North Levantine Arabic', 'nd': 'North Ndebele', 'sme': 'Northern Sami', 'no': 'Norwegian', 'nn': 'Norwegian Nynorsk', 'ii': 'Nuosu', 'ngh': 'Nǀuu', 'ann': 'Obolo', 'obu': 'Obulom', 'oc': 'Occitan', 'ogb': 'Ogbia', 'oj': 'Ojibwa', 'oka': 'Okanagan', 'ryu': 'Okinawan', 'ang': 'Old English', 'non': 'Old Norse', 'otk': 'Old Turkic', 'or': 'Oriya', 'om': 'Oromo', 'osa': 'Osage', 'os': 'Ossetian', 'ota': 'Ottoman Turkish', 'pbb': 'Páez', 'pau': 'Palauan', 'pln': 'Palenquero', 'pi': 'Pali', 'pam': 'Pampangan', 'pag': 'Pangasinan', 'pap': 'Papiamento', 'ps': 'Pashto', 'paw': 'Pawnee', 'pdc': 'Pennsylvania Dutch', 'fa': 'Persian', 'pcd': 'Picard', 'pms': 'Piedmontese', 'pjt': 'Pitjantjatjara', 'pl': 'Polish', 'pt': 'Portuguese', 'pot': 'Potawatomi', 'cpx': 'Pu-Xian Min', 'fuc': 'Pulaar', 'pa': 'Punjabi', 'qxq': 'Qashqai', 'fre': 'Quebec French', 'qu': 'Quechua', 'qya': 'Quenya', 'zpf': 'Quiatoni Zapotec', 'rap': 'Rapa Nui', 'rcf': 'Reunionese Creole', 'rhg': 'Rohingya', 'rgn': 'Romagnol', 'rom': 'Romani', 'ro': 'Romanian', 'rm': 'Romansh', 'cgg': 'Rukiga', 'ru': 'Russian', 'rue': 'Rusyn', 'ksw': "S'gaw Karen", 'skg': 'Sakalava', 'sm': 'Samoan', 'sg': 'Sango', 'sa': 'Sanskrit', 'skr': 'Saraiki', 'sc': 'Sardinian', 'sco': 'Scots', 'gd': 'Scottish Gaelic', 'trv': 'Seediq', 'sr': 'Serbian', 'srr': 'Serer', 'shn': 'Shan', 'jusi': 'Shanghainese', 'shi': 'Shilha', 'sn': 'Shona', 'shh': 'Shoshone', 'sty': 'Siberian Tatar', 'scn': 'Sicilian', 'szl': 'Silesian', 'sli': 'Silesian German', 'sjn': 'Sindarin', 'sd': 'Sindhi', 'si': 'Sinhalese', 'sk': 'Slovak', 'sl': 'Slovenian', 'xog': 'Soga', 'so': 'Somali', 'snk': 'Soninke', 'st': 'Sotho', 'nr': 'South Ndebele', 'luz': 'Southern Luri', 'xghu': 'Southwestern Mandarin', 'es': 'Spanish', 'srn': 'Sranan Tongo', 'su': 'Sundanese', 'swg': 'Swabian German', 'sw': 'Swahili', 'ss': 'Swati', 'sv': 'Swedish', 'gsw': 'Swiss German', 'syl': 'Sylheti', 'syc': 'Syriac', 'tl': 'Tagalog', 'ty': 'Tahitian', 'taiu': 'Taihu Wu', 'tvx': 'Taivoan', 'tg': 'Tajik', 'tzl': 'Talossan', 'tly': 'Talysh', 'ta': 'Tamil', 'tt': 'Tatar', 'te': 'Telugu', 'tet': 'Tetum', 'tcz': 'Thadou', 'th': 'Thai', 'tjin': 'Tianjin', 'bo': 'Tibetan', 'ti': 'Tigrinya', 'tli': 'Tlingit', 'tisa': 'Toisanese Cantonese', 'tpi': 'Tok Pisin', 'tok': 'Toki Pona', 'tdn': 'Tondano', 'toi': 'Tonga', 'to': 'Tongan', 'ts': 'Tsonga', 'tn': 'Tswana', 'tmh': 'Tuareg', 'yrk': 'Tundra Nenets', 'aeb': 'Tunisian Arabic', 'tr': 'Turkish', 'tk': 'Turkmen', 'tus': 'Tuscarora', 'tyv': 'Tuvan', 'tw': 'Twi', 'uby': 'Ubykh', 'udm': 'Udmurt', 'uk': 'Ukrainian', 'sxu': 'Upper Saxon', 'hsb': 'Upper Sorbian', 'ur': 'Urdu', 'ug': 'Uyghur', 'uz': 'Uzbek', 've': 'Venda', 'vec': 'Venetian', 'vep': 'Veps', 'vi': 'Vietnamese', 'vo': 'Volapük', 'vro': 'Võro', 'wa': 'Walloon', 'cy': 'Welsh', 'qjio': 'Wenzhounese', 'apw': 'Western Apache', 'wo': 'Wolof', 'wuu': 'Wu Chinese', 'xh': 'Xhosa', 'hsn': 'Xiang Chinese', 'sah': 'Yakut', 'yey': 'Yeyi', 'yi': 'Yiddish', 'yo': 'Yoruba', 'yua': 'Yucatec Maya', 'esu': 'Yupik', 'zza': 'Zazaki', 'za': 'Zhuang', 'zu': 'Zulu'}

fileList = os.listdir(opus_dir)
for file in fileList:
    file_suffix = os.path.splitext(file)[-1]
    origin_name = os.path.splitext(file)[0]
    if (file_suffix == '.zip') & (origin_name in Language_I_want):  
        target_name = 'Forvo' + result[origin_name] + '.dsl.files.zip'
        # os.rename(file, target_name)
        print("copy ", target_name)
        source = os.path.join(opus_dir, file)
        target = os.path.join(ForvoDSL_dir, target_name)
        try:
            copyfile(source, target)
        except IOError as e:
            print("Unable to copy file. %s" % e)
            exit(1)
        except:
            print("Unexpected error:", sys.exc_info())
            exit(1)

        print("\nFile copy done!\n")

The German and English .dsl files work perfectly on GoldenDict by Xiaoyifang.

grafik

You are trying to load the .dsl dictionaries as “Sound Directories”. That is WRONG. You need to load the .dsl files as "dictionaries:

The option that you are trying to use is for collection of audios within a folder (audios need to be decompressed).

So, as an alternative you could decompress the .dsl.files.zip file and then load the audios via the option that you used. But remember: audios need to be in a folder decompressed !

For example: decompress the “ForvoEnglish.dsl.files.zip” into one folder called “ENGLISH FORVO”. Then select that folder as a SOUND DIRECTORY :smiley: Enjoy !

1 个赞

:laughing: you are awesome, that works, thank you!!!

1 个赞

非常感谢!
下载了音频的 zip 和 dsl 文件,可以工作,但是我这里显示效果跟楼上的不一样,没有小喇叭,显示的是音频文件的链接,点击就会打开电脑上的播放器,而不是在 GoldenDict 里播放

请问如何设成楼上那样?我的系统是 Windows 10,GD 版本如下

已在设置里设置使用内部播放器