阿七

  • HOME
  • CATEGORY
    • TECH
    • ENG
    • VIDEO
    • Image
    • MUSIC
  • Baidu
  • MY LIST
LOVE LASTS FOREVER
  1. Home
  2. TECH
  3. Text

音频库制作方法

07/05/2017 2503Views 4Likes 0Comments

一,思想

首先要明白mdx和mdd里面的音频一一对应,mdx相当于词典索引,而mdd则是资源。根据这个关系,则可以进行解析了。先用论坛上的工具解析出mdx.txt和mdd的资源。然后用下面的脚本进行处理,具体可以根据mdx和mdd进行针对修改

二,脚本

我用python写的,其实用什么脚本都一样,因为之前没有用过python,借这个机会学一下。理论上,这个脚本可以应用于所有mdx和mdd文件的音频库制作

三,脚本代码

主要需要了解的是正则表达式,或者不用正则,用字符串处理也行,方法都可以。用正则比较简单一些。
下面,我把代码给注释上,方便查阅。

 

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
77
78
79
#!/usr/bin/python3
import re
import os
import shutil
 
// 这个变量是解析出来mdx的txt文件
OPDmdx="D:\\EN\\audio\\Oxford Pronunciation Dictionary\\OPD_offline.txt"
// 这个变量用来记录当前查找到的单词
OPDword='word'
// 读取缓存变量
OPDtxt='txt'
// 这个变量用来起到结尾标识
OPDend='’zine'
// 这个变量用来放置输出文件夹
OPDaudtmp='D:\\EN\\audio\\tmp\\'
// 这个变量用来存更改后的音频名称
OPDaudout='out'
// 根据mdd解析出的资源路径
OPDaudir='D:\\EN\\audio\\Oxford Pronunciation Dictionary\\OPD_offline'
// 这个变量用来存mdd库中找到的音频路径
OPDaud='audio'
// 后缀
OPDmp3='.mp3'
 
// 打开mdx解析出来的txt文件
xfile = open(OPDmdx,encoding= 'utf-8')
 
while True:
// 因为OPD是四行一个循环,其中第一行是单词,第三行是一些对应关系,所以我们只需要记录第一行和分析第三行即可。
    for i in range(1,5,1):
        OPDtxt = xfile.readline()
// 对第一行单词进行分析,如果和结尾对比相同,则退出,解析完毕,否则继续解析。
        if 1==i:
            OPDword=OPDtxt
            OPDword=OPDword.strip('\n')
// 如果是数字,则放到0-9这个文件夹中
            isnum = re.search("[0-9]",OPDword[0])
            if isnum:
                OPDaudout=OPDaudtmp+'0-9'+'\\'+OPDword+OPDmp3
// 否则,放到首字母a-z的文件夹中,通过正则,排除WIN下非法名称
            else:
                OPDword=re.sub("[\/\?\*\\<>|]",'-',OPDword)
                OPDtmp=OPDaudtmp+OPDword[0]+'\\'
                if os.path.exists(OPDtmp):
                    OPDaudout=OPDtmp+OPDword+OPDmp3
// 如果都没有,写入log文件,记录
                else:
                    logtxt = open('log.txt', 'a+')
                    print(OPDtmp+OPDword, file=logtxt)
                    logtxt.close()
                #print (OPDword)
            
            if OPDword==OPDend:
                break
// 在第三行开始处理,提取音频,此处提取美音
        elif 3==i:
            OPDaud=re.search("data-src-mp3="http:\/\/www.oxfordlearnersdictionaries.com\/media\/english\/us_pron(.+?)mp3",OPDtxt)
            if OPDaud:
                OPDaud=OPDaud.group(0)
// 进行二次解析,获取到MP3路径,并更改/为\以让WIN识别
                if OPDaud:
                    OPDaud=re.search("/media\/english\/us_pron(.+?)mp3",OPDaud)
                    OPDaud=re.sub("\/",'\\\\',OPDaud.group(0))
                    OPDaud=OPDaudir+OPDaud
// 如果确定在mdd解出的库中找到对应的文件,则重命名,并且放到对应的目录下,对应的目录在第一行时就已经处理好了,就是OPDaudout存放的变量
                    if os.path.exists(OPDaud):
                        shutil.copyfile(OPDaud, OPDaudout)
// 否则记录到文件
                    else:
                        logtxt = open('log.txt', 'a+')
                        print(OPDaud, file=logtxt)
                        logtxt.close()
                    #print(OPDaud)
                    #print(OPDaudout)
// 如果是结尾则退出循环
    if OPDword==OPDend:
        break
 
xfile.close()

Licensed under 知识共享署名 4.0 国际许可协议
Tag: Pronunciation python
Last:10/10/2018

frank

Love Lasts Forever

Like
< PREV
NEXT >

Comment

取消回复

frank

Love Lasts Forever

New Hot Rand
New Hot Rand
DirectAdmin 去掉邮件队列 Debian Directadmin 中设置 wordpress 最全的伪静态配置 vnstat 清零流量重新统计 忘记关于什么事情了 selinux DirectAdmin面板 删除log How to install htop on CentOS 7
Alone - Alan Walker Hello World! rclone 使用方法 GoogleDrive,DropBox,OneDrive for Business 君の名は ZOHO 目前最好用的免费邮局 WordPress 全站更换 https

© 2022 阿七 ALL RIGHTS RESERVED | Working

Theme Kratos Made By Seaton Jiang