[从头学声学] 第214节 声音的升频

编程入门 行业动态 更新时间:2024-10-11 17:22:23

[从头学<a href=https://www.elefans.com/category/jswz/34/1770021.html style=声学] 第214节 声音的升频"/>

[从头学声学] 第214节 声音的升频

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

正剧开始:

星历2016年05月13日 13:50:01, 银河系厄尔斯星球中华帝国江南行省。
[工程师阿伟]正在和[机器小伟]一起研究[声音的升频]。


阿伟给小伟做了一个声音升频的工具:

def changeFrequence():import wavename;import wavedata;filename = wavename.wavename;size = len(filename);n = 2;multi = 2**(n/12);print('生成波形开始。>>>');    fout= open('output.txt', 'w');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] + ' = [';fout.write(dataStr);size_1 = len(retData);for n in range(size_1):fout.write(str(retData[n]));if (n < size_1-1):fout.write(', ');fout.write('];');            fout.write('\r\n');fout.close();print('生成波形结束,请到output.txt查收。');

升频的目的只有一个,就是为了得到声调:

def waveDataChoose_2(filename):import vowel_1_0;import vowel_1_1;import vowel_1_2;import vowel_1_3;import vowel_1_4;import vowel_1_5;size = len(filename);    sampledata = [];for i in range(size):tmpdata1_0 = eval('vowel_1_0.'+filename[i]);tmpdata1_1 = eval('vowel_1_1.'+filename[i]);tmpdata1_2 = eval('vowel_1_2.'+filename[i]);tmpdata1_3 = eval('vowel_1_3.'+filename[i]);tmpdata1_4 = eval('vowel_1_4.'+filename[i]);tmpdata1_5 = eval('vowel_1_5.'+filename[i]);#阴平sampledata += tmpdata1_0*9;sampledata += idleWave*50; #阳平sampledata += tmpdata1_0*2;sampledata += tmpdata1_1*1;sampledata += tmpdata1_2*1;sampledata += tmpdata1_3*1;sampledata += tmpdata1_4*1;sampledata += tmpdata1_5*2;sampledata += idleWave*50;#上声sampledata += tmpdata1_3*2;sampledata += tmpdata1_2*1;sampledata += tmpdata1_1*1;sampledata += tmpdata1_0*1;sampledata += tmpdata1_1*1;sampledata += tmpdata1_2*1;sampledata += tmpdata1_3*1;sampledata += tmpdata1_4*1;sampledata += tmpdata1_5*1;sampledata += idleWave*50;#去声sampledata += tmpdata1_5*2;sampledata += tmpdata1_4*1;sampledata += tmpdata1_3*1;sampledata += tmpdata1_2*1;sampledata += tmpdata1_1*1;sampledata += tmpdata1_0*2;sampledata += idleWave*50;sampledata += idleWave*20;for i in range(size):tmpdata1_0 = eval('vowel_1_0.'+filename[i]);tmpdata1_1 = eval('vowel_1_1.'+filename[i]);tmpdata1_2 = eval('vowel_1_2.'+filename[i]);tmpdata1_3 = eval('vowel_1_3.'+filename[i]);tmpdata1_4 = eval('vowel_1_4.'+filename[i]);tmpdata1_5 = eval('vowel_1_5.'+filename[i]);#各元数据组sampledata += tmpdata1_0*5;sampledata += idleWave*50;sampledata += tmpdata1_1*5;sampledata += idleWave*50;sampledata += tmpdata1_2*5;sampledata += idleWave*50;sampledata += tmpdata1_3*5;sampledata += idleWave*50;sampledata += tmpdata1_4*5;sampledata += idleWave*50;sampledata += tmpdata1_5*5;sampledata += idleWave*50;sampledata += idleWave*30;return sampledata;


看看是否能够到达目的:





可以看到频率是变高的,虽然处理比较粗粮,但也实用。


让工具更自动化一点:

def changeFrequence():import wavename;import wavedata;filename = wavename.wavename;size = len(filename);for n in range(6):fileStr = 'vowel_1_'+str(n)+'.py';multi = 2**(n/12);print('生成波形开始。>>>');    fout= open(fileStr, 'w');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] + ' = [';fout.write(dataStr);size_1 = len(retData);for n in range(size_1):fout.write(str(retData[n]));if (n < size_1-1):fout.write(', ');fout.write('];');            fout.write('\r\n');fout.close();print('生成波形结束,请到'+fileStr+'查收。');if __name__ == '__main__':   part = 1;if (part == 3):tmp3_2();elif (part == 2):tmp2_2();elif (part == 1):import wavename;filename = wavename.wavename;tmp_2(11, filename);else:changeFrequence();


现在不管神马声音数据,都能让它有声调了。


这是一些截图,可以看出音调的变化。









下面小伟玩了一回乐音加声调。

乐音由于本身符合十二平均律,所认升一个Key就变成另一个乐音了,

但是再合成后还是可以听出声调的变化的。


点击打开链接--乐音的声调(单音)


上面这段是把每一个乐音的每个声调单独拿来听,其中有很大的间隔。

当然是非常沉闷和冗长的感觉。


于是小伟就把其中的间隔去掉了:

def waveDataChoose_2(filename):import vowel_1_0;import vowel_1_1;import vowel_1_2;import vowel_1_3;import vowel_1_4;import vowel_1_5;size = len(filename);    sampledata = [];for i in range(size):tmpdata1_0 = eval('vowel_1_0.'+filename[i]);tmpdata1_1 = eval('vowel_1_1.'+filename[i]);tmpdata1_2 = eval('vowel_1_2.'+filename[i]);tmpdata1_3 = eval('vowel_1_3.'+filename[i]);tmpdata1_4 = eval('vowel_1_4.'+filename[i]);tmpdata1_5 = eval('vowel_1_5.'+filename[i]);#阴平sampledata += tmpdata1_0*9;#阳平sampledata += tmpdata1_0*2;sampledata += tmpdata1_1*1;sampledata += tmpdata1_2*1;sampledata += tmpdata1_3*1;sampledata += tmpdata1_4*1;sampledata += tmpdata1_5*2;#上声sampledata += tmpdata1_3*2;sampledata += tmpdata1_2*1;sampledata += tmpdata1_1*1;sampledata += tmpdata1_0*1;sampledata += tmpdata1_1*1;sampledata += tmpdata1_2*1;sampledata += tmpdata1_3*1;sampledata += tmpdata1_4*2;#去声sampledata += tmpdata1_5*2;sampledata += tmpdata1_4*1;sampledata += tmpdata1_3*1;sampledata += tmpdata1_2*1;sampledata += tmpdata1_1*1;sampledata += tmpdata1_0*2;for i in range(size):tmpdata1_0 = eval('vowel_1_0.'+filename[i]);tmpdata1_1 = eval('vowel_1_1.'+filename[i]);tmpdata1_2 = eval('vowel_1_2.'+filename[i]);tmpdata1_3 = eval('vowel_1_3.'+filename[i]);tmpdata1_4 = eval('vowel_1_4.'+filename[i]);tmpdata1_5 = eval('vowel_1_5.'+filename[i]);#各元数据组sampledata += tmpdata1_0*5;        sampledata += tmpdata1_1*5;sampledata += tmpdata1_2*5;sampledata += tmpdata1_3*5;sampledata += tmpdata1_4*5;sampledata += tmpdata1_5*5;return sampledata;

这下出来的声音真是非常的震撼, 有一种玄幻空灵的味道,

毕竟是把所有乐音符以不同声调在极短的时间内遍历了一遍,

总之很好听。


它的频谱图是这样的,可以看出来很热闹。




点击打开链接--乐音的声调(合成)


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

更多推荐

[从头学声学] 第214节 声音的升频

本文发布于:2024-03-10 06:51:33,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1727281.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:声学   声音

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!