小编New*_*wmu的帖子

解释Web Audio API FFT结果

Web Audio API有一个分析器节点,允许您在正在使用的音频上获取FFT数据,并具有获取数据的字节和浮点数.字节版本有点意义,返回看起来像标准化(取决于最小和最大分贝值)强度频谱,其中0不是特定频率仓的音频分量而255是最大值.

但是我想要比8位更多的细节,但使用float版本会产生奇怪的结果.

freqData = new Float32Array(analyser.frequencyBinCount);
analyser.getFloatFrequencyData(freqData);
Run Code Online (Sandbox Code Playgroud)

这给了我介于-891.048828125和0. -891之间的值对应于静音,因此它在某种程度上是最小值,而我猜0是等于最大值.

这是怎么回事?为什么-891.048828125显着?为什么一个大的负面是沉默,零是最大的?我使用错误的FloatArray还是存在配置错误?Float64给出0值.

javascript html5 webkit fft html5-audio

26
推荐指数
1
解决办法
6936
查看次数

为什么numpy.power比内衬慢60倍?

也许我正在做一些奇怪的事情,但是在使用numpy时可能会发现令人惊讶的性能损失,无论使用的功率如何都显得一致.例如,当x是随机的100x100阵列时

x = numpy.power(x,3) 
Run Code Online (Sandbox Code Playgroud)

比约慢60倍

x = x*x*x
Run Code Online (Sandbox Code Playgroud)

各种阵列尺寸的加速图显示了一个最佳尺寸10k左右的阵列和其他尺寸的5-10倍速度.

在此输入图像描述

在你自己的机器上测试下面的代码(有点乱):

import numpy as np
from matplotlib import pyplot as plt
from time import time

ratios = []
sizes = []
for n in np.logspace(1,3,20).astype(int):
    a = np.random.randn(n,n)

    inline_times = []
    for i in range(100):
        t = time()
        b = a*a*a
        inline_times.append(time()-t)
    inline_time = np.mean(inline_times)

    pow_times = []
    for i in range(100):
        t = time()
        b = np.power(a,3)
        pow_times.append(time()-t)
    pow_time = np.mean(pow_times)

    sizes.append(a.size)
    ratios.append(pow_time/inline_time)

plt.plot(sizes,ratios)
plt.title('Performance of inline vs numpy.power')
plt.ylabel('Nx …
Run Code Online (Sandbox Code Playgroud)

python arrays performance numpy

23
推荐指数
3
解决办法
6260
查看次数

Web Audio API Analyzer节点不使用麦克风输入

针对Chrome Canary的http://code.google.com/p/chromium/issues/detail?id=112367阻止获取麦克风输入的错误现已修复.这部分似乎确实有效.我可以将麦克风输入分配给音频元素,并通过扬声器听到结果.

但我想连接分析仪节点以进行FFT.如果我将音频源设置为本地文件,分析器节点可以正常工作.问题是当连接到mic音频流时,分析器节点只返回基值,就好像它根本没有音频流一样.(如果你好奇的话,一遍又一遍-100.)

谁知道怎么了?它还没有实现吗?这是一个铬虫吗?我在Windows 7上运行26.0.1377.0并启用了getUserMedia标志,并通过python的simpleHTTPServer通过localhost服务,因此它可以请求权限.

码:

var aCtx = new webkitAudioContext();
var analyser = aCtx.createAnalyser();
if (navigator.getUserMedia) {
  navigator.getUserMedia({audio: true}, function(stream) {
    // audio.src = "stupid.wav"
    audio.src = window.URL.createObjectURL(stream);
  }, onFailure);
}
$('#audio').on("loadeddata",function(){
    source = aCtx.createMediaElementSource(audio);
    source.connect(analyser);
    analyser.connect(aCtx.destination);
    process();
});
Run Code Online (Sandbox Code Playgroud)

同样,如果我将audio.src设置为注释版本,它可以工作,但是使用麦克风则不行.流程包含:

FFTData = new Float32Array(analyser.frequencyBinCount);
analyser.getFloatFrequencyData(FFTData);
console.log(FFTData[0]);
Run Code Online (Sandbox Code Playgroud)

我也尝试过使用createMediaStreamSource并绕过音频元素 - 例4 - https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/webrtc-integration.html.也不成功.:(

    if (navigator.getUserMedia) {
        navigator.getUserMedia({audio: true}, function(stream) {
        var microphone = context.createMediaStreamSource(stream);
        microphone.connect(analyser);
        analyser.connect(aCtx.destination);
        process();
    }
Run Code Online (Sandbox Code Playgroud)

我想有可能将mediasteam写入缓冲区,然后使用dsp.js或其他东西来做fft,但我想在我走这条路之前先检查一下.

javascript google-chrome webrtc web-audio-api

11
推荐指数
1
解决办法
4739
查看次数

Numpy将布尔数组的字符串表示形式转换为布尔数组

是否有一种原生的numpy方式来转换布尔字符串表示的数组,例如:

['True','False','True','False']
Run Code Online (Sandbox Code Playgroud)

对于我可以用于屏蔽/索引的实际布尔数组?我可以做一个for循环并重建数组,但对于大型数组,这很慢.

python numpy

7
推荐指数
1
解决办法
3361
查看次数

在维护串行读取的同时压缩一系列JSON对象?

我有一堆json对象需要压缩,因为它占用了太多的磁盘空间,大约20 gigs价值几百万.

理想情况下,我想要做的是单独压缩每个,然后当我需要读取它们时,只需迭代加载和解压缩每个.我尝试通过创建一个文本文件来做到这一点,每个行都是通过zlib压缩的json对象,但这是失败的

decompress error due to a truncated stream,

我认为这是由于包含新行的压缩字符串.

有人知道这样做的好方法吗?

python compression file-io json zlib

6
推荐指数
1
解决办法
6382
查看次数

如何计算字符串的每个字符的位数?(BPC)

我正在阅读的论文http://www.cs.toronto.edu/~ilya/pubs/2011/LANG-RNN.pdf使用每个字符的比特作为评估文本生成计算机模型质量的测试指标.没有参考如何计算.谷歌搜索,我真的找不到任何关于它的东西.

有谁知道如何计算它?Python最好,但伪代码或任何东西都有效.谢谢!

python algorithm nlp machine-learning entropy

5
推荐指数
1
解决办法
2419
查看次数