精华内容
下载资源
问答
  • 录一段音频,它的音高改变50次并每一个新的音频匹配到键盘的一个键位,你就能电脑变成一架钢琴!一段音频可以被编码为一组数值的数组(或者列表),像这样:我们可以在数组中每隔一秒拿掉一秒的值来将这段音频...

    录一段音频,把它的音高改变50次并把每一个新的音频匹配到键盘的一个键位,你就能把电脑变成一架钢琴!

    一段音频可以被编码为一组数值的数组(或者列表),像这样:

    0953121016-0.png

    我们可以在数组中每隔一秒拿掉一秒的值来将这段音频的速度变成两倍。

    0953124349-1.png

    如此我们不仅将音频的长度减半了,而且我们还将它的频率翻倍了,这样使得它拥有比原来更高的音高(pitch)。

    相反地,假如我们将数组中每个值重复一次,我们将得到一段更慢,周期更长,即音高更低的音频:

    0953123S2-2.png

    这里提供一个可以按任意系数改变音频速度的任意简单的Python函数:

    ?

    1

    2

    3

    4

    5

    6

    7

    import numpy as np

    def speedx(sound_array, factor):

    """ 将音频速度乘以任意系数`factor` """

    indices= np.round( np.arange(0,len(snd_array), factor) )

    indices= indices[indices

    return sound_array[ indices.astype(int) ]

    这个问题更困难的地方在于改变音频长度的同时保持它的音高(变速,音频拉伸(sound stretching)),或者在改变音频的音高的同时保持它的长度(变调(pitch shifting))。

    变速

    变速可以通过传统的相位声码器(phase vocoder,感兴趣的朋友可以读一下维基百科的页面)来实现。首先将音频分解成重叠的比特,然后将这些比特重新排列使得他们重叠得更多(将缩短声音的长度)或者更少(将拉伸音频的长度),如下图所示:

    09531212a-3.png

    困难之处在于重新排列的比特可能很严重的互相影响,那么这里就需要用到相位变换来确保它们之间没有影响。这里有一段Python代码,取自这个网页(打不开的话,您懂的。——译者注):

    ?

    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

    def stretch(sound_array, f, window_size, h):

    """ 将音频按系数`f`拉伸 """

    phase= np.zeros(window_size)

    hanning_window= np.hanning(window_size)

    result= np.zeros(len(sound_array)/f+ window_size)

    for iin np.arange(0,len(sound_array)-(window_size+h), h*f):

    # 两个可能互相重叠的子数列

    a1= sound_array[i: i+ window_size]

    a2= sound_array[i+ h: i+ window_size+ h]

    # 按第一个数列重新同步第二个数列

    s1= np.fft.fft(hanning_window* a1)

    s2= np.fft.fft(hanning_window* a2)

    phase= (phase+ np.angle(s2/s1))% 2*np.pi

    a2_rephased= np.fft.ifft(np.abs(s2)*np.exp(1j*phase))

    # 加入到结果中

    i2= int(i/f)

    result[i2 : i2+ window_size]+= hanning_window*a2_rephased

    result= ((2**(16-4))* result/result.max())# 归一化 (16bit)

    return result.astype('int16')

    变调

    一旦你实现了变速以后,变调就不难了。如果需要一个更高的音高,可以先将这段音频拉伸并保持音高不变,然后再加快它的速度,如此最后得到的音频将具有原始音频同样的长度,更高的频率,即更高的音高。

    把一段音频的频率翻倍将把音高提高一个八度,也就是12个半音。因此,要将音高提高n个半音的话,我们需要将频率乘上系数2^(n/12):

    ?

    1

    2

    3

    4

    5

    def pitchshift(snd_array, n, window_size=2**13, h=2**11):

    """ 将一段音频的音高提高``n``个半音 """

    factor= 2**(1.0 * n/ 12.0)

    stretched= stretch(snd_array,1.0/factor, window_size, h)

    return speedx(stretched[window_size:], factor)

    小程序:电脑钢琴

    让我们来玩一下我们的变调器。我们先敲碗来确定一个"标准音高”:

    [youku id="XNzM1NDM2NTky"]

    接下来我们基于之前的音频创造50个变调的音高,从很低到很高:

    ?

    1

    2

    3

    4

    5

    from scipy.ioimport wavfile

    fps, bowl_sound= wavfile.read("bowl.wav")

    tones= range(-25,25)

    transposed= [pitchshift(bowl_sound, n)for nin tones]

    接下来根据这个文件中的顺序,我们把每一个音频匹配到键盘的一个键位,如下图所示:

    0953125022-4.jpg

    我们只需要在代码中告诉计算机当一个键按下来的时候播放其对应的声音,然后当按键松开后停止播放就可以了:

    ?

    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

    import pygame

    pygame.mixer.init(fps,-16,1,512)# 太灵活了 ";)"

    screen= pygame.display.set_mode((640,480))# 设置焦点

    # 得到键盘的键位的正确顺序的列表

    # ``keys`` 如 ['Q','W','E','R' ...] 一样排列

    keys= open('typewriter.kb').read().split(' ')

    sounds= map(pygame.sndarray.make_sound, transposed)

    key_sound= dict(zip(keys, sounds) )

    is_playing= {k:False for kin keys}

    while True:

    event= pygame.event.wait()

    if event.type in (pygame.KEYDOWN, pygame.KEYUP):

    key= pygame.key.name(event.key)

    if event.type == pygame.KEYDOWN:

    if (keyin key_sound.keys())and (not is_playing[key]):

    key_sound[key].play(fade_ms=50)

    is_playing[key]= True

    elif event.key== pygame.K_ESCAPE:

    pygame.quit()

    raise KeyboardInterrupt

    elif event.type == pygame.KEYUPand keyin key_sound.keys():

    key_sound[key].fadeout(50)# 停止播放并50ms淡出

    is_playing[key]= False

    就这样我们把计算机变成了一台钢琴!至此,让我为您表演一段土耳其进行曲来表达对您耐心阅读此文的谢意吧:

    [youku id="XNzM1NDQ1MDA4"]

    如果想自己试试的话,在这里可以下载你需要的所有文件。因为不是所有的人都用Python,我也用Javascript/HTML5(在这儿)实现了一台电脑钢琴,但是不是特别理想。如果有经验丰富的HTML5/JS/elm程序员来改进改进,或者从头重写就太好了。

    接下来做什么?

    更通常的情况下,我发现计算机很少被用来进行表演性质的演奏。我明白使用钢琴键盘或者直接从乐器录音会容易很多,但是请看看仅仅用一个碗和60行的Python代码就能做到什么!

    即便是很便宜的计算机也有如此多的控制来实现一个马马虎虎的音乐台:你可以对着麦克风唱歌,对着摄像头做手势,用鼠标来调制,然后用键盘来完成剩下来的玩意儿。有如此多方式来表现自我,而每种方式又有那么一个Python包……有没有具有艺术天赋的大神加入呀?

    展开全文
  • 1、有很多朋友说下载了最新版还是解不出来,是因为他们把程序放在了桌面上或者Program Files目录下。大家一定要记得,不要黑刀Dezender的主程序以及需要解密的PHP文件放置在目录名包含空格的目录内,比如桌面、...
  • 如果在黑名单中就触发警告并怎么怎么样。 但其实这种做法只能是:防君子不防小人。 <h3>1.3 遇到的问题 项目做到这里遇到一个问题是不论怎样,都没有办法防止开发者做一些我们想禁用的功能。因为是一个...
  • 也就是每个汉字占两个字节但是在c#中这样一个语句下来长度就变成了2,后来有人告诉我是因为存储编码的方式不同,我还没怎么理解而这么一来原有程序有个判别是否为生僻字这一块就出现了问题因为处理过程是其打到...

    今天偶尔处理到了冷僻字这个问题。
    我们知道,在c++中如果是这样一个string a="中国";
    那么它的长度就是4,也就是每个汉字占两个字节
    但是在c#中这样一个语句下来长度就变成了2,后来有人告诉我是因为存储编码的方式不同,我还没怎么理解
    而这么一来
    原有程序有个判别是否为生僻字这一块
    就出现了问题
    因为处理过程是把其打到char[](比如“中国”就是四个元素)里然后取一个汉字的第一个字节转换成高字节判断再

    取一个汉字的低字节进行判断
    但是在c#中,打到char[],这样比如“中国”就是两个元素了,无从谈起怎么判别是否为生僻字了

    或许应该换个思路来解决这个问题,还是让我再好好想一想吧,也希望有高人给我指点一下。

    add:其实想实现的功能是把一个汉字的编码由gbk转换成unicode的编码形式

    但是我不晓得这个在BS开发上能否用的上,因为也是要求用CS的思路来让我写这个方法

    转载于:https://www.cnblogs.com/aspnetx/archive/2006/04/11/372295.html

    展开全文
  • 在用java打开java程序或者.sql文件的时候,出现乱码情况怎么把他在java环境中的乱码变成正常的中文呢? 注意事件:就是当出现这样的乱码的时候,千万不要更改里面的任何一个字符,先关闭。因为一旦更改,就没有办法...
    cfba9b9e81b0ecc0de444bc0dd01fafa.png

    在用java打开java程序或者.sql文件的时候,出现乱码情况

    1. 怎么把他在java环境中的乱码变成正常的中文呢?

          注意事件:就是当出现这样的乱码的时候,千万不要更改里面的任何一个字符,先关闭。因为一旦更改,就没有办法再恢复正常的中文了。

        2.用文本编辑器,如editplus来打开文件,然后另存为,改变编码格式 。

        3.BootStrap在编缉网页的时候,也会出现乱码。除了改本工具中的编码格式外,如果还是乱码,就只能用下面的方式了。

        4.Macromedia Dreamweaver 编辑的网页也是会出现这样的问题。

    终极解决办法:

    1. 用文本文件(就是老系统最原始的记事本)打开 产生乱码的.html,.xml,.jsp,.java(这几种我都试过)。

    2. 另存为还是当前文件名覆盖,在最下方有一个编码方式,一般乱码的编码是ANSI,改成如下图UTF-8。并把所有你所使用的工具也改成UTF-8。JSP,html的编码也要改如:.

    3ffd36eb856852b324123e7f9ccce29a.png

    改完之后就不会有问题了。

    如果喜欢,欢迎转发。

    58d95a3038c909bca94c199691e040f2.png3c18b9bdfa0ce57bd6602c65b3b5bd6a.png58d95a3038c909bca94c199691e040f2.png

    扫码关注我们

    微信号 : gongth830

    展开全文
  • 一只爱技术的程序羊,想分享变成一种习惯! 小伙伴们大家好,本期再托一次家底,和大家分享十几个自己日常工作学习过程中的常用在线工具和网站,希望能有帮助。 也欢迎小伙伴们分享和安利出你们觉得有用的工具...

    编码之外 今天

    以下文章来源于CodeSheep ,作者hansonwong99

    CodeSheep

    CodeSheep

    一只爱技术的程序羊,想把分享变成一种习惯!

    小伙伴们大家好,本期再托一次家底,和大家分享十几个自己日常工作学习过程中的常用在线工具和网站,希望能有帮助。

    也欢迎小伙伴们分享和安利出你们觉得有用的工具,不要停啊。

    在线绘图神器

    很多小伙伴咨询说博客文章里的技术图怎么画出来的,这里透个底,大部分都是通过processon画出来的,在线画图十分方便,几乎可以画出你想要的任何技术图,包括:流程图、思维导图、原型图、UML图、网络拓扑图、组织结构图等等。

    • https://processon.com/


    代码图片神器

    很多小伙伴常问,公众号文章里的类似这样的代码图片是如何做出来的:

    这就得用到这个专门做代码图片的神器工具网站了,比如这里的dute:

    • https://www.dute.org/code-snapshot


    在线任务管理工具

    日常记录需求、灵感和待办事项没有称手的小工具?想做详细的学习任务规划和管理没有好地方?我想Trello应该能够帮到你。

    从图中可以看出,这种泳道配合任务卡片的拖动方式使用起来还是非常可以的。

    事实上Trello的功能远不止此,它甚至是一个非常好用的团队协作工具,而且Trello均配有客户端的App,跨平台同步使用非常方便。

    • https://trello.com/


    图片超分辨率神器

    如果现在手里有一张低分辨率的小图,如果让它变成高清大图呢,就像这样:

    那么就可以借助于bigpig这款在线图片超分辨率神器,它使用的是人工智能方面的深度学习技术进行图片超分辨率,挺有特色的。

    • https://bigjpg.com/


    在线PS神器

    uupoop是一款好用的在线图片处理工具站,堪称在线PS神器,支持编辑psd、xd、sketch等多种格式的文件处理,非常强大。除此之外,上面还集成了各种封面制作、海报制作和GIF动图制作等在线工具,爱了。

    • https://www.uupoop.com/


    在线音频剪辑神器

    这款在线工具网站可以让您直接在浏览器中剪辑音轨,并且支持多种文件格式,有点香。

    • https://www.weixinsyt.com/


    在线视频剪辑神器

    kapwing是一款在线轻量级的视频编辑studio,除了支持日常的视频编辑之外,还有很多工具集供使用,上手很容易

    • https://www.kapwing.com/


    在线PDF神器

    PDF派,一个包含了20个好用PDF在线工具的网站,各种转换都不在话下。

    • https://www.pdfpai.com/


    在线压缩神器

    图片压缩、GIT压缩、PDF压缩等,都可以借助在线网站docsmall完成。上传、处理、下载,三步搞定,很便利。

    • https://docsmall.com/


    在线短链接神器

    长链接转短链接工具,而且还提供API接口供编程操作,生成的短链接还能在后台检测访问数据。

    • http://mrw.so/


    在线emoji神器

    有时候我们做封面或者配图,需要点emoji表情来点缀,那素材哪里找呢?

    emojiisland是一个不错的去处,emoji表情成套,PNG格式的可以免费下载。

    • https://emojiisland.com/


    好啦,这次先整理出个人在平时工作和学习工程中常用的工具网站,后面遇到好玩的、有用的也会持续分享,也欢迎小伙伴们分享和安利出你们觉得有用的工具。

    请大家关注一个,大佬经常发一些技术知识,之所以转载是为了以后方便查找

    展开全文
  • 实际上,它是如此有趣,为什么不变成游戏呢? 还有一个多人游戏! 过去,我很喜欢打字游戏,但是打字自然语言和打字代码之间有很大的区别(即使选择编程语言也可以带来很大的不同!)。 我就找到了 ,这很有趣...
  •  一直以来都想这个小软件汉化下,1.3版本以前不兼容中文系统,密码会变成乱码,造成无法打开计算机,所以就没汉化。 新版目前修正的这个问题,本来想直接汉化exe主程序,但是现在NoVirusThanks公司软件都改成外挂...
  • Tinyxml 源代码(VC6 & VS2005)

    热门讨论 2009-08-12 15:57:04
    许多应用程序(和几乎所有现在的应用程序)都能够输出UTF-8,但是那些比较旧或者难处理的(或者干脆不能使用的)系统还是只能以默认编码来输出文本。 比如说,日本的系统传统上使用SHIFT-JIS编码,这种情况下Tiny...
  • 说“奇特”不是因为Gotcha这个单词对于中国人难于理解(何况中译书干脆这个标题扔掉不要了),而是在于:Dewhurst用酸中带刺、笑里藏刀的口吻提醒程序员一些编写C++程序(本来就)应该注意到的问题。这些问题中,...
  • 说“奇特”不是因为Gotcha这个单词对于中国人难于理解(何况中译书干脆这个标题扔掉不要了),而是在于:Dewhurst用酸中带刺、笑里藏刀的口吻提醒程序员一些编写C++程序(本来就)应该注意到的问题。这些问题中,...
  • 说“奇特”不是因为Gotcha这个单词对于中国人难于理解(何况中译书干脆这个标题扔掉不要了),而是在于:Dewhurst用酸中带刺、笑里藏刀的口吻提醒程序员一些编写C++程序(本来就)应该注意到的问题。这些问题中,...
  • 说“奇特”不是因为Gotcha这个单词对于中国人难于理解(何况中译书干脆这个标题扔掉不要了),而是在于:Dewhurst用酸中带刺、笑里藏刀的口吻提醒程序员一些编写C++程序(本来就)应该注意到的问题。这些问题中,...
  • c语言编写单片机技巧

    2009-04-19 12:15:17
    此外,C语言程序具有完善的模块程序结构,从而为软件开发中采用模块化程序设计方法提供了有力的保障。因此,使用C语言进行程序设计已成为软件开发的一个主流。用C语言来编写目标系统软件,会大大缩短开发周期,且...
  • 精通Oracle PL/SQL--详细书签版

    热门讨论 2012-08-21 13:06:28
    我们不是要变成PL/SQL程序员,而是要变成一位精明的PL/SQL程序员。  本书内容  本书提供了大量的提示、技巧和完整策略,供你在公司中最充分地利用PL/SQL的优点。学完这本书之后,你将像我们一样确信,PL/...
  • 程序所用文档如图,我需要处理这些数据,变成 ![预期结果](https://img-ask.csdn.net/upload/201612/08/1481206923_940592.png) 我的代码是这样的 ```cpp #include #include #include #include #...
  • 软件设计规范

    2015-03-11 11:57:50
    (迭代流程)基于固定寻址的变量,经过寻址接口,可以处理任意数据,从而迭代流程变成了一般流程。CPU的基本过程,产生了指令和数据,指令天生具有子程序的基因(一般流程),数据天生具有数据结构(寻址能力)的...
  • 16: 工期不能想得过于乐观,长这么大,没怎么见过开发类的软件项目能在3个月内彻底结束的,大家再简单的软件开发项目也有3个月的项目预算周期比较好,否则会自己搞的很累,客户也很累,学会有目的有计划的工作生活...
  • 小编的确一直都想这方面的命令做个总结,这次辛苦老范给我们整理了这份实用的秘笈。  Bootcfg  bootcfg 命令启动配置和故障恢复(对于大多数计算机,即 boot.ini 文件)。  含有下列参数的 bootcfg 命令仅在...
  • 2.3.0 将单向链表reverse,如ABCD变成DCBA,只能搜索链表一次。 2.3.1 将二叉树的两个孩子换位置,即左变右,右变左。不能用递规。 2.3.2 以下属于物理层的设备是? 2.3.3 在以太网中,是根据()地址来区分不同...
  • 近日在CDB并行测试中发现一个问题:我们需要的小区负荷话统结果总是为零,开始还以为小区负荷太小,于是加大短消息下发数量,但还为零,于是在程序中加入测试代码,收到的数据在BAM上打印出来, 结果打印出来的...
  • 每一部分的函数怎么写都有详细描述。 请注意本文中函数的的命名规则,这很重要,因为你的解决方案会通过程序来扫描和进行评分:没有遵循这些要求将导致评估代码失败和等级降低。 我交什么呢? 跟家庭作业1不同的是,...
  • 第三,实践类的操作系统书籍还是太少了,以至于你要想看看别人是怎么做的,除了读以《操作系统:设计与实现》为代表的极少数书籍之外,就是一头扎进源代码中,而结果有时相当令人气馁。我自己也气馁过,所以我在第二...
  • 第三,实践类的操作系统书籍还是太少了,以至于你要想看看别人是怎么做的,除了读以《操作系统:设计与实现》为代表的极少数书籍之外,就是一头扎进源代码中,而结果有时相当令人气馁。我自己也气馁过,所以我在第二...

空空如也

空空如也

1 2
收藏数 40
精华内容 16
关键字:

怎么把编码变成程序