首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:使用Aubio提取音调

Python:使用Aubio提取音调
EN

Stack Overflow用户
提问于 2016-08-09 18:45:50
回答 1查看 1.6K关注 0票数 0

我想使用aubio模块来使用python3.5提取音调。然而,这些文件很难理解。

例如,我有一个numpy数组:

代码语言:javascript
复制
import numpy
import math

sample_rate=44100
x=numpy.zeros(44100)
for i in range(44100):
    x[i]=math.sin(i/225)

如何使用aubio提取包含数组间距的数组?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-17 13:39:40

下面是一个示例(works python2.x和python3)。

注意已改变的正弦波生成。

代码语言:javascript
复制
#! /usr/bin/env python

import numpy as np
import aubio

sample_rate=44100
x=np.zeros(44100)
for i in range(44100):
    x[i]=np.sin(2. * np.pi * i * 225. / sample_rate)

# create pitch object
p = aubio.pitch("yin", samplerate = sample_rate)
# other examples:
# = aubio.pitch("yinfft", 4096, 512, 44100)
# = aubio.pitch("yin", 2048, 512, 44100)
# = aubio.pitch("mcomb", 4096, 512, 44100)
# = aubio.pitch("schmitt", samplerate = 44100, hop_size = 512, buf_size = 2048)

# pad end of input vector with zeros
pad_length = p.hop_size - x.shape[0] % p.hop_size
x_padded = np.pad(x, (0, pad_length), 'constant', constant_values=0)
# to reshape it in blocks of hop_size
x_padded = x_padded.reshape(-1, p.hop_size)

# input array should be of type aubio.float_type (defaults to float32)
x_padded = x_padded.astype(aubio.float_type)

for frame, i in zip(x_padded, range(len(x_padded))):
    time_str = "%.3f" % (i * p.hop_size/float(sample_rate))
    pitch_candidate = p(frame)[0]
    print (time_str, "%.3f" % pitch_candidate)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38858242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档