[从头学声学] 第216节 九音真经(上)

剧情提要:
[机器小伟]在[工程师阿伟]的陪同下进行着声学神通的修炼。
这次要研究的是[九音真经(上)]。

正剧开始:

星历2016年05月15日 12:15:55, 银河系厄尔斯星球中华帝国江南行省。
[工程师阿伟]正在和[机器小伟]一起研究[九音真经(上)]。


九音真经 第一式:共振求音

释;元音,半元音都有共振峰,抓住共振峰就可以确定出元音

<span style="font-size:18px;">#1. 拼音的元音、半元音名称
['vowel_zh_1000_1400_2400',
'vowel_zh_1100_1550_2600',
'vowel_zh_600_1000_2000',
'vowel_zh_900_1300_3000',
'vowel_zh_600_1400_2400',
'vowel_zh_700_1450_3200',
'vowel_zh_650_2050_2600',
'vowel_zh_550_2400_3000',
'vowel_zh_400_2300_3500',
'vowel_zh_350_2900_3500',
'vowel_zh_400_700',
'vowel_zh_350_650',
'vowel_zh_450_2200_2500',
'vowel_zh_350_2300_2750',
'vowel_zh_500_1500_2600',
'vowel_zh_500_1500_3100',
'vowel_zh_450_1700_2400',
'vowel_zh_450_1900_2600',
'vowel_zh_600_1500_2000',
'vowel_zh_750_1750_3600',
'vowel_zh_550_1800_2650',
'vowel_zh_300_1200_2350',
'vowel_zh_400_1500_2400',
'vowel_zh_380_1000_1800',
'vowel_zh_400_1000_1900',
'vowel_zh_350_1500_2400',
'vowel_zh_300_2200_3500',
'vowel_zh_300_600',
'vowel_zh_350_2400_3600']

#生成声波数据
def tmp3_2():
    filename = [];

    #普通话元音,浊辅音
    frequence = [[1000,1400,2400], #a
                 [1100,1550,2600], #a(女)
                 [600,1000,2000],  #o
                 [900,1300,3000],  #o(女)
                 [600,1400,2400],  #e
                 [700,1450,3200],  #e(女)
                 [650,2050,2600],  #e^
                 [550,2400,3000],  #e^(女)
                 [400,2300,3500],  #i
                 [350,2900,3500],  #i(女)
                 [400, 700],       #u
                 [350, 650],       #u(女)
                 [450, 2200, 2500],#yu
                 [350, 2300, 2750],#yu(女)
                 [500, 1500, 2600],#i(兹)
                 [500,1500,3100],  #i(兹)(女)
                 [450, 1700, 2400],#i(知)
                 [450, 1900, 2600],#i(知)(女)
                 [600, 1500, 2000],#er
                 [750, 1750, 3600],#er(女)
                 #普通话浊辅音
                 [550, 1800, 2650], #r
                 [300, 1200, 2350], #m
                 [400, 1500, 2400], #n
                 [380, 1000, 1800], #-n
                 [400, 1000, 1900], #-ng
                 [350, 1500, 2400], #l
                 [300, 2200, 3500], #y(i)
                 [300, 600], #w(u)
                 [350, 2400, 3600] #yu
                 ];
        
    size = len(frequence);
    
    for i in range(size):
        dataStr = '';
        size_1 = len(frequence[i]);
           
        if (size_1 == 2):
            dataStr = 'vowel_zh_'+ str(frequence[i][0])+'_'+str(frequence[i][1]);
        elif (size_1 == 3):
            dataStr = 'vowel_zh_'+ str(frequence[i][0])+'_'+str(frequence[i][1])+'_'+str(frequence[i][2]);
              
        filename.append(dataStr);
    
    print(filename);</span>

<span style="font-size:18px;">#2. 生成元音基本数据
#生成声波数据
def tmp2_2():
    print('生成波形开始。>>>');
    
    fout= open('output.txt', 'w');

    #普通话元音,浊辅音
    frequence = [[1000,1400,2400], #a
                 [1100,1550,2600], #a(女)
                 [600,1000,2000],  #o
                 [900,1300,3000],  #o(女)
                 [600,1400,2400],  #e
                 [700,1450,3200],  #e(女)
                 [650,2050,2600],  #e^
                 [550,2400,3000],  #e^(女)
                 [400,2300,3500],  #i
                 [350,2900,3500],  #i(女)
                 [400, 700],       #u
                 [350, 650],       #u(女)
                 [450, 2200, 2500],#yu
                 [350, 2300, 2750],#yu(女)
                 [500, 1500, 2600],#i(兹)
                 [500,1500,3100],  #i(兹)(女)
                 [450, 1700, 2400],#i(知)
                 [450, 1900, 2600],#i(知)(女)
                 [600, 1500, 2000],#er
                 [750, 1750, 3600],#er(女)
                 #普通话浊辅音
                 [550, 1800, 2650], #r
                 [300, 1200, 2350], #m
                 [400, 1500, 2400], #n
                 [380, 1000, 1800], #-n
                 [400, 1000, 1900], #-ng
                 [350, 1500, 2400], #l
                 [300, 2200, 3500], #y(i)
                 [300, 600], #w(u)
                 [350, 2400, 3600] #yu
                 ];
    
        
    size = len(frequence);
    
    
    for i in range(size):
        dataStr = '';
        size_1 = len(frequence[i]);
           
        if (size_1 == 2):
            dataStr = 'vowel_zh_'+ str(frequence[i][0])+'_'+str(frequence[i][1]) + ' = [';
        elif (size_1 == 3):
            dataStr = 'vowel_zh_'+ str(frequence[i][0])+'_'+str(frequence[i][1]) +'_'+str(frequence[i][2])+ ' = [';
                                                               
        fout.write(dataStr);

        data = [];

        if (size_1 == 2):
            data = waveDataGen_2(frequence[i][0], frequence[i][1], 0);
        elif (size_1 == 3):
            data = waveDataGen_2(frequence[i][0], frequence[i][1], frequence[i][2]);
              
        size_1 = len(data);

        for n in range(size_1):
            fout.write(str(data[n]));
            if (n < size_1-1):
                fout.write(', ');

        fout.write('];');
            
        fout.write('\r\n');

    fout.close();
    print('生成波形结束,请到output.txt查收。');</span>


九音真经 第二式:升频得调

释:声调是根据同一根音的频率的变化趋势得到的。由高到低为去声,由低到高为阳平,不变为阴平。

<span style="font-size:18px;">#3. 把元音升频,分五次升频,每次升一个半音
def changeFrequence():
    import wavename;
    import wavedata;

    filename = wavename.wavename;
    size = len(filename);

      
    fileStr = 'vowel_zh.py';
    fout= open(fileStr, 'w');
    print('生成波形开始。>>>');

    #分五次升频,每次升一个半音
    for n in range(6):        
        multi = 2**(n/12);
        
        for i in range(size):
            tmpdata = eval('wavedata.'+filename[i]);

            retData = [];

            size_1 = len(tmpdata)//2;
            sigma = 0;

            for j in range(size_1):
                sigma += multi-1;
                if sigma > 1:
                    sigma -= 1;
                else:
                    retData.append(tmpdata[2*j]);
                    retData.append(tmpdata[2*j+1]);

            #由于频率增加而剔除掉的数据
            removed = len(tmpdata)-len(retData);
            #用阵列的前端补足缺失
            for j in range(removed):
                retData.append(retData[j]);

            #print(len(retData));            
            
            dataStr = filename[i] + '_F'+str(n)+ ' = [';
            fout.write(dataStr);

            size_1 = len(retData);

            for m in range(size_1):
                fout.write(str(retData[m]));
                if (m < size_1-1):
                    fout.write(', ');

            fout.write('];');            
            fout.write('\r\n');

    fout.close();
    print('生成波形结束,请到'+fileStr+'查收。');</span>


#4. 从原子元音组成带声调的单元音,以及不带声调的半元音
['tone_a0', 'tone_a1', 'tone_a2', 'tone_a3', 'tone_a4', 'tone_o0', 'tone_o1', 'tone_o2', 'tone_o3', 'tone_o4', 'tone_e0', 'tone_e1', 'tone_e2', 'tone_e3', 'tone_e4', 'tone_i0', 'tone_i1', 'tone_i2', 'tone_i3', 'tone_i4', 'tone_u0', 'tone_u1', 'tone_u2', 'tone_u3', 'tone_u4', 'tone_yu0', 'tone_yu1', 'tone_yu2', 'tone_yu3', 'tone_yu4', 'tone_er0', 'tone_er1', 'tone_er2', 'tone_er3', 'tone_er4', 'tone_r0', 'tone_m0', 'tone_n0', 'tone__n0', 'tone__ng0', 'tone_l0', 'tone_w0', 'tone_y0']

#把元音原子组合成带声调的单韵母
def simpleVowelCompose():
    import vowel_zh;
    
    #<1>
    #这部分命名最后有下划线,是原始音,不带声调
    #拼音 a
    tone_a_ = [];
    for i in range(6):
        tone_a_.append('vowel_zh.'+'vowel_zh_1000_1400_2400_F'+str(i));

    #拼音 o
    tone_o_ = [];
    for i in range(6):
        tone_o_.append('vowel_zh.'+'vowel_zh_600_1000_2000_F'+str(i));
    
    #拼音 e
    tone_e_ = [];
    for i in range(6):
        tone_e_.append('vowel_zh.'+'vowel_zh_600_1400_2400_F'+str(i));

    #拼音 i
    tone_i_ = [];
    for i in range(6):
        tone_i_.append('vowel_zh.'+'vowel_zh_400_2300_3500_F'+str(i));

    #拼音 u
    tone_u_ = [];
    for i in range(6):
        tone_u_.append('vowel_zh.'+'vowel_zh_400_700_F'+str(i));
        
    #拼音 yu
    tone_yu_ = [];
    for i in range(6):
        tone_yu_.append('vowel_zh.'+'vowel_zh_450_2200_2500_F'+str(i));

    #拼音 er
    tone_er_ = [];
    for i in range(6):
        tone_er_.append('vowel_zh.'+'vowel_zh_600_1500_2000_F'+str(i));

    #拼音 r
    tone_r_ = [];
    for i in range(6):
        tone_r_.append('vowel_zh.'+'vowel_zh_550_1800_2650_F'+str(i));
        
    #拼音 m
    tone_m_ = [];
    for i in range(6):
        tone_m_.append('vowel_zh.'+'vowel_zh_300_1200_2350_F'+str(i));

    #拼音 n
    tone_n_ = [];
    for i in range(6):
        tone_n_.append('vowel_zh.'+'vowel_zh_400_1500_2400_F'+str(i));

    #拼音 -n
    tone__n_ = [];
    for i in range(6):
        tone__n_.append('vowel_zh.'+'vowel_zh_380_1000_1800_F'+str(i));

    #拼音 -ng
    tone__ng_ = [];
    for i in range(6):
        tone__ng_.append('vowel_zh.'+'vowel_zh_400_1000_1900_F'+str(i));

    #拼音 l
    tone_l_ = [];
    for i in range(6):
        tone_l_.append('vowel_zh.'+'vowel_zh_350_1500_2400_F'+str(i));

    #拼音 w
    tone_w_ = [];
    for i in range(6):
        tone_w_.append('vowel_zh.'+'vowel_zh_300_600_F'+str(i));

    #拼音 y
    tone_y_ = [];
    for i in range(6):
        tone_y_.append('vowel_zh.'+'vowel_zh_350_2400_3600_F'+str(i));

    
    #<2>
    #音调
    #第0, 1, 2, 3, 4声分别是轻声,阴平,阳平,上声,去声
    tones = ['210', '555555', '012345', '210123', '543210'];
    names = [];

    fout = open('toneComposeData.py', 'w');
    
    #拼音 a
    tone_a = [];
    for i in range(5):
        tmpTone = [];
        for j in range(len(tones[i])):
            tmpTone += eval(tone_a_[int(tones[i][j])]);

        tone_a.append(tmpTone);
        
        fout.write('tone_a'+str(i)+' = [');
        names.append('tone_a'+str(i));
        size_1 = len(tmpTone);
        for m in range(size_1):
            fout.write(str(tmpTone[m]));
            if (m < size_1-1):
                fout.write(', ');

        fout.write('];');            
        fout.write('\r\n');
        

    #拼音 o
    tone_o = [];
    for i in range(5):
        tmpTone = [];
        for j in range(len(tones[i])):
            tmpTone += eval(tone_o_[int(tones[i][j])]);

        tone_o.append(tmpTone);
        
        fout.write('tone_o'+str(i)+' = [');
        names.append('tone_o'+str(i));
        size_1 = len(tmpTone);
        for m in range(size_1):
            fout.write(str(tmpTone[m]));
            if (m < size_1-1):
                fout.write(', ');

        fout.write('];');            
        fout.write('\r\n');

    #拼音 e
    tone_e = [];
    for i in range(5):
        tmpTone = [];
        for j in range(len(tones[i])):
            tmpTone += eval(tone_e_[int(tones[i][j])]);

        tone_e.append(tmpTone);
        
        fout.write('tone_e'+str(i)+' = [');
        names.append('tone_e'+str(i));
        size_1 = len(tmpTone);
        for m in range(size_1):
            fout.write(str(tmpTone[m]));
            if (m < size_1-1):
                fout.write(', ');

        fout.write('];');            
        fout.write('\r\n');

    #拼音 i
    tone_i = [];
    for i in range(5):
        tmpTone = [];
        for j in range(len(tones[i])):
            tmpTone += eval(tone_i_[int(tones[i][j])]);

        tone_i.append(tmpTone);
        
        fout.write('tone_i'+str(i)+' = [');
        names.append('tone_i'+str(i));
        size_1 = len(tmpTone);
        for m in range(size_1):
            fout.write(str(tmpTone[m]));
            if (m < size_1-1):
                fout.write(', ');

        fout.write('];');            
        fout.write('\r\n');

    #拼音 u
    tone_u = [];
    for i in range(5):
        tmpTone = [];
        for j in range(len(tones[i])):
            tmpTone += eval(tone_u_[int(tones[i][j])]);

        tone_u.append(tmpTone);
        
        fout.write('tone_u'+str(i)+' = [');
        names.append('tone_u'+str(i));
        size_1 = len(tmpTone);
        for m in range(size_1):
            fout.write(str(tmpTone[m]));
            if (m < size_1-1):
                fout.write(', ');

        fout.write('];');            
        fout.write('\r\n');

    #拼音 yu
    tone_yu = [];
    for i in range(5):
        tmpTone = [];
        for j in range(len(tones[i])):
            tmpTone += eval(tone_yu_[int(tones[i][j])]);

        tone_yu.append(tmpTone);
        
        fout.write('tone_yu'+str(i)+' = [');
        names.append('tone_yu'+str(i));
        size_1 = len(tmpTone);
        for m in range(size_1):
            fout.write(str(tmpTone[m]));
            if (m < size_1-1):
                fout.write(', ');

        fout.write('];');            
        fout.write('\r\n');

    #拼音 er
    tone_er = [];
    for i in range(5):
        tmpTone = [];
        for j in range(len(tones[i])):
            tmpTone += eval(tone_er_[int(tones[i][j])]);

        tone_er.append(tmpTone);
        
        fout.write('tone_er'+str(i)+' = [');
        names.append('tone_er'+str(i));
        size_1 = len(tmpTone);
        for m in range(size_1):
            fout.write(str(tmpTone[m]));
            if (m < size_1-1):
                fout.write(', ');

        fout.write('];');            
        fout.write('\r\n');

    #以下为半元音,不需要带音调
    #拼音 r
    tone_r = [];
    tmpTone = [];
    for j in range(len(tones[0])):
        tmpTone += eval(tone_r_[int(tones[0][j])]);

    tone_r.append(tmpTone);
    
    fout.write('tone_r0'+' = [');
    names.append('tone_r0');
    size_1 = len(tmpTone);
    for m in range(size_1):
        fout.write(str(tmpTone[m]));
        if (m < size_1-1):
            fout.write(', ');

    fout.write('];');            
    fout.write('\r\n');

    #拼音 m
    tone_m = [];
    tmpTone = [];
    for j in range(len(tones[0])):
        tmpTone += eval(tone_m_[int(tones[0][j])]);

    tone_m.append(tmpTone);
    
    fout.write('tone_m0'+' = [');
    names.append('tone_m0');
    size_1 = len(tmpTone);
    for m in range(size_1):
        fout.write(str(tmpTone[m]));
        if (m < size_1-1):
            fout.write(', ');

    fout.write('];');            
    fout.write('\r\n');

    #拼音 n
    tone_n = [];
    tmpTone = [];
    for j in range(len(tones[0])):
        tmpTone += eval(tone_n_[int(tones[0][j])]);

    tone_n.append(tmpTone);
    
    fout.write('tone_n0'+' = [');
    names.append('tone_n0');
    size_1 = len(tmpTone);
    for m in range(size_1):
        fout.write(str(tmpTone[m]));
        if (m < size_1-1):
            fout.write(', ');

    fout.write('];');            
    fout.write('\r\n');

    #拼音 -n
    tone__n = [];
    tmpTone = [];
    for j in range(len(tones[0])):
        tmpTone += eval(tone__n_[int(tones[0][j])]);

    tone__n.append(tmpTone);
    
    fout.write('tone__n0'+' = [');
    names.append('tone__n0');
    size_1 = len(tmpTone);
    for m in range(size_1):
        fout.write(str(tmpTone[m]));
        if (m < size_1-1):
            fout.write(', ');

    fout.write('];');            
    fout.write('\r\n');

    #拼音 -ng
    tone__ng = [];
    tmpTone = [];
    for j in range(len(tones[0])):
        tmpTone += eval(tone__ng_[int(tones[0][j])]);

    tone__ng.append(tmpTone);
    
    fout.write('tone__ng0'+' = [');
    names.append('tone__ng0');
    size_1 = len(tmpTone);
    for m in range(size_1):
        fout.write(str(tmpTone[m]));
        if (m < size_1-1):
            fout.write(', ');

    fout.write('];');            
    fout.write('\r\n');

    #拼音 l
    tone_l = [];
    tmpTone = [];
    for j in range(len(tones[0])):
        tmpTone += eval(tone_l_[int(tones[0][j])]);

    tone_l.append(tmpTone);
    
    fout.write('tone_l0'+' = [');
    names.append('tone_l0');
    size_1 = len(tmpTone);
    for m in range(size_1):
        fout.write(str(tmpTone[m]));
        if (m < size_1-1):
            fout.write(', ');

    fout.write('];');            
    fout.write('\r\n');

    #拼音 w
    tone_w = [];
    tmpTone = [];
    for j in range(len(tones[0])):
        tmpTone += eval(tone_w_[int(tones[0][j])]);

    tone_r.append(tmpTone);
    
    fout.write('tone_w0'+' = [');
    names.append('tone_w0');
    size_1 = len(tmpTone);
    for m in range(size_1):
        fout.write(str(tmpTone[m]));
        if (m < size_1-1):
            fout.write(', ');

    fout.write('];');            
    fout.write('\r\n');

    #拼音 y
    tone_y = [];
    tmpTone = [];
    for j in range(len(tones[0])):
        tmpTone += eval(tone_y_[int(tones[0][j])]);

    tone_y.append(tmpTone);
    
    fout.write('tone_y0'+' = [');
    names.append('tone_y0');
    size_1 = len(tmpTone);
    for m in range(size_1):
        fout.write(str(tmpTone[m]));
        if (m < size_1-1):
            fout.write(', ');

    fout.write('];');            
    fout.write('\r\n');

    
    fout.close();
    print(names);</span>


九音真经 第三式:韵母表成

释:由单个带有声调的元音,和不带声调的半元音,可以生出韵母表。


<span style="font-size:18px;">#5.生成韵母表
def tmp():
    table = [
        'a', 'o', 'e', 'i', 'u', 'yu',
        'ai', 'ei', 'ao', 'ou', 'an', 'en', 'ang', 'eng', 'ong',
        'ia', 'ie', 'iao', 'iou', 'ian', 'in', 'iang', 'ing', 'iong',
        'ua', 'uo', 'uai', 'uei', 'uan', 'uen', 'uang', 'ueng',
        'yue', 'yuan', 'yun'
        ];
    for i in range(len(table)):
        for j in range(5):
            print('\''+table[i]+str(j)+'\', ',  end='');
        print('');
		
def tmp():
    tableA = ['tone_a0', 'tone_a1', 'tone_a2', 'tone_a3', 'tone_a4',
              'tone_o0', 'tone_o1', 'tone_o2', 'tone_o3', 'tone_o4',
              'tone_e0', 'tone_e1', 'tone_e2', 'tone_e3', 'tone_e4',
              'tone_i0', 'tone_i1', 'tone_i2', 'tone_i3', 'tone_i4',
              'tone_u0', 'tone_u1', 'tone_u2', 'tone_u3', 'tone_u4',
              'tone_yu0', 'tone_yu1', 'tone_yu2', 'tone_yu3', 'tone_yu4',
              'tone_er0', 'tone_er1', 'tone_er2', 'tone_er3', 'tone_er4',
              'tone_r0', 'tone_m0', 'tone_n0', 'tone__n0', 'tone__ng0', 'tone_l0', 'tone_w0', 'tone_y0']
    
    tableB = ['a0', 'a1', 'a2', 'a3', 'a4',
              'o0', 'o1', 'o2', 'o3', 'o4',
              'e0', 'e1', 'e2', 'e3', 'e4',
              'i0', 'i1', 'i2', 'i3', 'i4',
              'u0', 'u1', 'u2', 'u3', 'u4',
              'yu0', 'yu1', 'yu2', 'yu3', 'yu4',
              'er0', 'er1', 'er2', 'er3', 'er4',
              'r0', 'm0', 'n0', '_n0', '_ng0', 'l0', 'w0', 'y0'
              ];
    
    for i in range(len(tableA)):
        print('tone_'+tableB[i] + ' = ' + 'eval(\'toneComposeData.\'+\''+tableA[i]+'\');');
		
</span>


def tmp():
    table = [
        'ai', 'ei', 'ao', 'ou', 'an', 'en', 'ang', 'eng', 'ong',
        'ia', 'ie', 'iao', 'iou', 'ian', 'in', 'iang', 'ing', 'iong',
        'ua', 'uo', 'uai', 'uei', 'uan', 'uen', 'uang', 'ueng',
        'yue', 'yuan', 'yun'
        ];

    for i in range(len(table)):
        s = table[i];
        for j in range(5):
            if (s == 'ai'):
                print('tone_'+ s + str(j) + ' = ' + 'tone_a'+str(j)+' + tone_i0;');                
            elif (s == 'ei'):
                print('tone_'+ s + str(j) + ' = ' + 'tone_e'+str(j)+' + tone_i0;');
            elif (s == 'ao'):
                print('tone_'+ s + str(j) + ' = ' + 'tone_a'+str(j)+' + tone_o0;');
            elif (s == 'ou'):
                print('tone_'+ s + str(j) + ' = ' + 'tone_o'+str(j)+' + tone_u0;');
            elif (s == 'an'):
                print('tone_'+ s + str(j) + ' = ' + 'tone_a'+str(j)+' + tone__n0;');
            elif (s == 'en'):
                print('tone_'+ s + str(j) + ' = ' + 'tone_e'+str(j)+' + tone__n0;');               
            elif (s == 'ang'):
                print('tone_'+ s + str(j) + ' = ' + 'tone_a'+str(j)+' + tone__ng0;');
            elif (s == 'eng'):
                print('tone_'+ s + str(j) + ' = ' + 'tone_e'+str(j)+' + tone__ng0;');
            elif (s == 'ong'):
                print('tone_'+ s + str(j) + ' = ' + 'tone_o'+str(j)+' + tone__ng0;');

            elif (s == 'ia'):
                print('tone_'+ s + str(j) + ' = ' + 'tone_i0' + ' + tone_a'+str(j)+';');
            elif (s == 'ie'):
                print('tone_'+ s + str(j) + ' = ' + 'tone_i0' + ' + tone_e'+str(j)+';');
            elif (s == 'iao'):
                print('tone_'+ s + str(j) + ' = ' + 'tone_i0' + ' + tone_ao'+str(j)+';');
            elif (s == 'iou'):
                print('tone_'+ s + str(j) + ' = ' + 'tone_i0' + ' + tone_ou'+str(j)+';');
            elif (s == 'ian'):
                print('tone_'+ s + str(j) + ' = ' + 'tone_i0' + ' + tone_an'+str(j)+';');
            elif (s == 'in'):
                print('tone_'+ s + str(j) + ' = ' + 'tone_i'+str(j)+' + tone__n0;');
            elif (s == 'iang'):
                print('tone_'+ s + str(j) + ' = ' + 'tone_i0' + ' + tone_ang'+str(j)+';');
            elif (s == 'ing'):
                print('tone_'+ s + str(j) + ' = ' + 'tone_i'+str(j)+' + tone__ng0;');
            elif (s == 'iong'):
                print('tone_'+ s + str(j) + ' = ' + 'tone_i0' + ' + tone_ong'+str(j)+';');           

            elif (s == 'ua'):
                print('tone_'+ s + str(j) + ' = ' + 'tone_u0' + ' + tone_a'+str(j)+';');
            elif (s == 'uo'):
                print('tone_'+ s + str(j) + ' = ' + 'tone_u0' + ' + tone_o'+str(j)+';');
            elif (s == 'uai'):
                print('tone_'+ s + str(j) + ' = ' + 'tone_u0' + ' + tone_ai'+str(j)+';');
            elif (s == 'uei'):
                print('tone_'+ s + str(j) + ' = ' + 'tone_u0' + ' + tone_ei'+str(j)+';');
            elif (s == 'uan'):
                print('tone_'+ s + str(j) + ' = ' + 'tone_u0' + ' + tone_an'+str(j)+';');
            elif (s == 'uen'):
                print('tone_'+ s + str(j) + ' = ' + 'tone_u0' + ' + tone_en'+str(j)+';');
            elif (s == 'uang'):
                print('tone_'+ s + str(j) + ' = ' + 'tone_u0' + ' + tone_ang'+str(j)+';');
            elif (s == 'ueng'):
                print('tone_'+ s + str(j) + ' = ' + 'tone_u0' + ' + tone_eng'+str(j)+';');

            elif (s == 'yue'):
                print('tone_'+ s + str(j) + ' = ' + 'tone_yu'+str(j)+' + tone_e0;');
            elif (s == 'yuan'):
                print('tone_'+ s + str(j) + ' = ' + 'tone_yu'+str(j)+' + tone_an0;');
            elif (s == 'yun'):
                print('tone_'+ s + str(j) + ' = ' + 'tone_yu'+str(j)+' + tone__n0;');
                
        print('');




<span style="font-size:18px;">#6. 韵母的合成与测试
def compoundVowelCompose():
    import toneComposeData;
    
    vowelTable0 = [
        'a0', 'a1', 'a2', 'a3', 'a4', 
        'o0', 'o1', 'o2', 'o3', 'o4', 
        'e0', 'e1', 'e2', 'e3', 'e4', 
        'i0', 'i1', 'i2', 'i3', 'i4', 
        'u0', 'u1', 'u2', 'u3', 'u4', 
        'yu0', 'yu1', 'yu2', 'yu3', 'yu4',
    ];

    vowelTable1 = [
        'ai0', 'ai1', 'ai2', 'ai3', 'ai4', 
        'ei0', 'ei1', 'ei2', 'ei3', 'ei4', 
        'ao0', 'ao1', 'ao2', 'ao3', 'ao4', 
        'ou0', 'ou1', 'ou2', 'ou3', 'ou4', 
        'an0', 'an1', 'an2', 'an3', 'an4', 
        'en0', 'en1', 'en2', 'en3', 'en4', 
        'ang0', 'ang1', 'ang2', 'ang3', 'ang4', 
        'eng0', 'eng1', 'eng2', 'eng3', 'eng4', 
        'ong0', 'ong1', 'ong2', 'ong3', 'ong4', 
        'ia0', 'ia1', 'ia2', 'ia3', 'ia4', 
        'ie0', 'ie1', 'ie2', 'ie3', 'ie4', 
        'iao0', 'iao1', 'iao2', 'iao3', 'iao4', 
        'iou0', 'iou1', 'iou2', 'iou3', 'iou4', 
        'ian0', 'ian1', 'ian2', 'ian3', 'ian4', 
        'in0', 'in1', 'in2', 'in3', 'in4', 
        'iang0', 'iang1', 'iang2', 'iang3', 'iang4', 
        'ing0', 'ing1', 'ing2', 'ing3', 'ing4', 
        'iong0', 'iong1', 'iong2', 'iong3', 'iong4', 
        'ua0', 'ua1', 'ua2', 'ua3', 'ua4', 
        'uo0', 'uo1', 'uo2', 'uo3', 'uo4', 
        'uai0', 'uai1', 'uai2', 'uai3', 'uai4', 
        'uei0', 'uei1', 'uei2', 'uei3', 'uei4', 
        'uan0', 'uan1', 'uan2', 'uan3', 'uan4', 
        'uen0', 'uen1', 'uen2', 'uen3', 'uen4', 
        'uang0', 'uang1', 'uang2', 'uang3', 'uang4', 
        'ueng0', 'ueng1', 'ueng2', 'ueng3', 'ueng4', 
        'yue0', 'yue1', 'yue2', 'yue3', 'yue4', 
        'yuan0', 'yuan1', 'yuan2', 'yuan3', 'yuan4', 
        'yun0', 'yun1', 'yun2', 'yun3', 'yun4'];

    
    tone_a0 = eval('toneComposeData.'+'tone_a0')*4;
    tone_a1 = eval('toneComposeData.'+'tone_a1')*4;
    tone_a2 = eval('toneComposeData.'+'tone_a2')*4;
    tone_a3 = eval('toneComposeData.'+'tone_a3')*4;
    tone_a4 = eval('toneComposeData.'+'tone_a4')*4;
    tone_o0 = eval('toneComposeData.'+'tone_o0')*4;
    tone_o1 = eval('toneComposeData.'+'tone_o1')*4;
    tone_o2 = eval('toneComposeData.'+'tone_o2')*4;
    tone_o3 = eval('toneComposeData.'+'tone_o3')*4;
    tone_o4 = eval('toneComposeData.'+'tone_o4')*4;
    tone_e0 = eval('toneComposeData.'+'tone_e0')*4;
    tone_e1 = eval('toneComposeData.'+'tone_e1')*4;
    tone_e2 = eval('toneComposeData.'+'tone_e2')*4;
    tone_e3 = eval('toneComposeData.'+'tone_e3')*4;
    tone_e4 = eval('toneComposeData.'+'tone_e4')*4;
    tone_i0 = eval('toneComposeData.'+'tone_i0')*4;
    tone_i1 = eval('toneComposeData.'+'tone_i1')*4;
    tone_i2 = eval('toneComposeData.'+'tone_i2')*4;
    tone_i3 = eval('toneComposeData.'+'tone_i3')*4;
    tone_i4 = eval('toneComposeData.'+'tone_i4')*4;
    tone_u0 = eval('toneComposeData.'+'tone_u0')*4;
    tone_u1 = eval('toneComposeData.'+'tone_u1')*4;
    tone_u2 = eval('toneComposeData.'+'tone_u2')*4;
    tone_u3 = eval('toneComposeData.'+'tone_u3')*4;
    tone_u4 = eval('toneComposeData.'+'tone_u4')*4;
    tone_yu0 = eval('toneComposeData.'+'tone_yu0')*4;
    tone_yu1 = eval('toneComposeData.'+'tone_yu1')*4;
    tone_yu2 = eval('toneComposeData.'+'tone_yu2')*4;
    tone_yu3 = eval('toneComposeData.'+'tone_yu3')*4;
    tone_yu4 = eval('toneComposeData.'+'tone_yu4')*4;
    tone_er0 = eval('toneComposeData.'+'tone_er0')*4;
    tone_er1 = eval('toneComposeData.'+'tone_er1')*4;
    tone_er2 = eval('toneComposeData.'+'tone_er2')*4;
    tone_er3 = eval('toneComposeData.'+'tone_er3')*4;
    tone_er4 = eval('toneComposeData.'+'tone_er4')*4;
    tone_r0 = eval('toneComposeData.'+'tone_r0')*4;
    tone_m0 = eval('toneComposeData.'+'tone_m0')*4;
    tone_n0 = eval('toneComposeData.'+'tone_n0')*4;
    tone__n0 = eval('toneComposeData.'+'tone__n0')*4;
    tone__ng0 = eval('toneComposeData.'+'tone__ng0')*4;
    tone_l0 = eval('toneComposeData.'+'tone_l0')*4;
    tone_w0 = eval('toneComposeData.'+'tone_w0')*4;
         
    tone_ai0 = tone_a0 + tone_i0;
    tone_ai1 = tone_a1 + tone_i0;
    tone_ai2 = tone_a2 + tone_i0;
    tone_ai3 = tone_a3 + tone_i0;
    tone_ai4 = tone_a4 + tone_i0;

    tone_ei0 = tone_e0 + tone_i0;
    tone_ei1 = tone_e1 + tone_i0;
    tone_ei2 = tone_e2 + tone_i0;
    tone_ei3 = tone_e3 + tone_i0;
    tone_ei4 = tone_e4 + tone_i0;

    tone_ao0 = tone_a0 + tone_o0;
    tone_ao1 = tone_a1 + tone_o0;
    tone_ao2 = tone_a2 + tone_o0;
    tone_ao3 = tone_a3 + tone_o0;
    tone_ao4 = tone_a4 + tone_o0;

    tone_ou0 = tone_o0 + tone_u0;
    tone_ou1 = tone_o1 + tone_u0;
    tone_ou2 = tone_o2 + tone_u0;
    tone_ou3 = tone_o3 + tone_u0;
    tone_ou4 = tone_o4 + tone_u0;

    tone_an0 = tone_a0 + tone__n0;
    tone_an1 = tone_a1 + tone__n0;
    tone_an2 = tone_a2 + tone__n0;
    tone_an3 = tone_a3 + tone__n0;
    tone_an4 = tone_a4 + tone__n0;

    tone_en0 = tone_e0 + tone__n0;
    tone_en1 = tone_e1 + tone__n0;
    tone_en2 = tone_e2 + tone__n0;
    tone_en3 = tone_e3 + tone__n0;
    tone_en4 = tone_e4 + tone__n0;

    tone_ang0 = tone_a0 + tone__ng0;
    tone_ang1 = tone_a1 + tone__ng0;
    tone_ang2 = tone_a2 + tone__ng0;
    tone_ang3 = tone_a3 + tone__ng0;
    tone_ang4 = tone_a4 + tone__ng0;

    tone_eng0 = tone_e0 + tone__ng0;
    tone_eng1 = tone_e1 + tone__ng0;
    tone_eng2 = tone_e2 + tone__ng0;
    tone_eng3 = tone_e3 + tone__ng0;
    tone_eng4 = tone_e4 + tone__ng0;

    tone_ong0 = tone_o0 + tone__ng0;
    tone_ong1 = tone_o1 + tone__ng0;
    tone_ong2 = tone_o2 + tone__ng0;
    tone_ong3 = tone_o3 + tone__ng0;
    tone_ong4 = tone_o4 + tone__ng0;

    tone_ia0 = tone_i0 + tone_a0;
    tone_ia1 = tone_i1 + tone_a0;
    tone_ia2 = tone_i2 + tone_a0;
    tone_ia3 = tone_i3 + tone_a0;
    tone_ia4 = tone_i4 + tone_a0;

    tone_ie0 = tone_i0 + tone_e0;
    tone_ie1 = tone_i1 + tone_e0;
    tone_ie2 = tone_i2 + tone_e0;
    tone_ie3 = tone_i3 + tone_e0;
    tone_ie4 = tone_i4 + tone_e0;

    tone_iao0 = tone_i0 + tone_ao0;
    tone_iao1 = tone_i1 + tone_ao0;
    tone_iao2 = tone_i2 + tone_ao0;
    tone_iao3 = tone_i3 + tone_ao0;
    tone_iao4 = tone_i4 + tone_ao0;

    tone_iou0 = tone_i0 + tone_ou0;
    tone_iou1 = tone_i1 + tone_ou0;
    tone_iou2 = tone_i2 + tone_ou0;
    tone_iou3 = tone_i3 + tone_ou0;
    tone_iou4 = tone_i4 + tone_ou0;

    tone_ian0 = tone_i0 + tone_an0;
    tone_ian1 = tone_i1 + tone_an0;
    tone_ian2 = tone_i2 + tone_an0;
    tone_ian3 = tone_i3 + tone_an0;
    tone_ian4 = tone_i4 + tone_an0;

    tone_in0 = tone_i0 + tone__n0;
    tone_in1 = tone_i1 + tone__n0;
    tone_in2 = tone_i2 + tone__n0;
    tone_in3 = tone_i3 + tone__n0;
    tone_in4 = tone_i4 + tone__n0;

    tone_iang0 = tone_i0 + tone_ang0;
    tone_iang1 = tone_i1 + tone_ang0;
    tone_iang2 = tone_i2 + tone_ang0;
    tone_iang3 = tone_i3 + tone_ang0;
    tone_iang4 = tone_i4 + tone_ang0;

    tone_ing0 = tone_i0 + tone__ng0;
    tone_ing1 = tone_i1 + tone__ng0;
    tone_ing2 = tone_i2 + tone__ng0;
    tone_ing3 = tone_i3 + tone__ng0;
    tone_ing4 = tone_i4 + tone__ng0;

    tone_iong0 = tone_i0 + tone_ong0;
    tone_iong1 = tone_i1 + tone_ong0;
    tone_iong2 = tone_i2 + tone_ong0;
    tone_iong3 = tone_i3 + tone_ong0;
    tone_iong4 = tone_i4 + tone_ong0;

    tone_ua0 = tone_u0 + tone_a0;
    tone_ua1 = tone_u1 + tone_a0;
    tone_ua2 = tone_u2 + tone_a0;
    tone_ua3 = tone_u3 + tone_a0;
    tone_ua4 = tone_u4 + tone_a0;

    tone_uo0 = tone_u0 + tone_o0;
    tone_uo1 = tone_u1 + tone_o0;
    tone_uo2 = tone_u2 + tone_o0;
    tone_uo3 = tone_u3 + tone_o0;
    tone_uo4 = tone_u4 + tone_o0;

    tone_uai0 = tone_u0 + tone_ai0;
    tone_uai1 = tone_u1 + tone_ai0;
    tone_uai2 = tone_u2 + tone_ai0;
    tone_uai3 = tone_u3 + tone_ai0;
    tone_uai4 = tone_u4 + tone_ai0;

    tone_uei0 = tone_u0 + tone_ei0;
    tone_uei1 = tone_u1 + tone_ei0;
    tone_uei2 = tone_u2 + tone_ei0;
    tone_uei3 = tone_u3 + tone_ei0;
    tone_uei4 = tone_u4 + tone_ei0;

    tone_uan0 = tone_u0 + tone_an0;
    tone_uan1 = tone_u1 + tone_an0;
    tone_uan2 = tone_u2 + tone_an0;
    tone_uan3 = tone_u3 + tone_an0;
    tone_uan4 = tone_u4 + tone_an0;

    tone_uen0 = tone_u0 + tone_en0;
    tone_uen1 = tone_u1 + tone_en0;
    tone_uen2 = tone_u2 + tone_en0;
    tone_uen3 = tone_u3 + tone_en0;
    tone_uen4 = tone_u4 + tone_en0;

    tone_uang0 = tone_u0 + tone_ang0;
    tone_uang1 = tone_u1 + tone_ang0;
    tone_uang2 = tone_u2 + tone_ang0;
    tone_uang3 = tone_u3 + tone_ang0;
    tone_uang4 = tone_u4 + tone_ang0;

    tone_ueng0 = tone_u0 + tone_eng0;
    tone_ueng1 = tone_u1 + tone_eng0;
    tone_ueng2 = tone_u2 + tone_eng0;
    tone_ueng3 = tone_u3 + tone_eng0;
    tone_ueng4 = tone_u4 + tone_eng0;

    tone_yue0 = tone_yu0 + tone_ie0;
    tone_yue1 = tone_yu1 + tone_ie0;
    tone_yue2 = tone_yu2 + tone_ie0;
    tone_yue3 = tone_yu3 + tone_ie0;
    tone_yue4 = tone_yu4 + tone_ie0;

    tone_yuan0 = tone_yu0 + tone_an0;
    tone_yuan1 = tone_yu1 + tone_an0;
    tone_yuan2 = tone_yu2 + tone_an0;
    tone_yuan3 = tone_yu3 + tone_an0;
    tone_yuan4 = tone_yu4 + tone_an0;

    tone_yun0 = tone_yu0 + tone_en0;
    tone_yun1 = tone_yu1 + tone_en0;
    tone_yun2 = tone_yu2 + tone_en0;
    tone_yun3 = tone_yu3 + tone_en0;
    tone_yun4 = tone_yu4 + tone_en0;

    #数据阵列测试
    retData = [];

    for i in range(len(vowelTable1)):
        if i%5!=0:
            retData += eval('tone_'+vowelTable1[i]);
            retData += idleWave*10;

    return retData;

def waveDataChoose_2(filename):   
    sampledata = [];
    
    sampledata = compoundVowelCompose();
    
    return sampledata;</span>

本节到此结束,欲知后事如何,请看下回分解。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值