Web Audio API看起来很酷,但我真的很想用它来处理音频文件,然后再将它们保存为wav文件,我真的不需要在处理时听它们.这可能吗?是否有类似的东西encodeAudioData()
可以将音频缓冲区重新转换为ArrayBuffer
可以将其放回文件中?
编辑: recorderJS似乎几乎完美,但它只输出16位的wavs.有没有什么可以做专业音频格式(24位或32位浮点数)?
这看起来很简单,但它给我带来了很多麻烦。我已经尝试过使用这种方法,但它似乎不起作用,正如您在此处看到的:http : //jsfiddle.net/ENuLz/。浮动标签和输入似乎是朝着正确方向迈出的一步,但我仍然无法弄清楚。
jsfiddle 代码:
<div>
<label for="myslider">Slider:</label>
<input type="range" id="myslider" min="1" max="100" />
</div>
Run Code Online (Sandbox Code Playgroud)
css:
div {
display: table-cell;
vertical-align: middle;
height: 50px;
border: 1px solid red;
}
Run Code Online (Sandbox Code Playgroud)
解决方案: http : //jsfiddle.net/ENuLz/17/
^这似乎适用于最新版本的 chrome、firefox 和 ie。
所以我已经从 an 中取出通道数据AudioBuffer
并通过可传输对象将它发送给网络工作者对其进行一些处理,现在我想把它放回去。我真的必须像这样复制它吗?
var myData = new Float32Array(audioBuf.length);
var chanData = audioBuf.getChannelData(0);
for ( var n = 0; n < chanData.length; n++ ) {
chanData[n] = myData[n];
}
Run Code Online (Sandbox Code Playgroud)
我真的希望有某种方法可以更改ArrayBuffer
每个AudioBuffer
频道参考。就像是...
audioBuf.channel[0].buffer = myData.buffer;
Run Code Online (Sandbox Code Playgroud)
...会非常简单有效,但似乎不存在。有没有这样的方法来更改引用并避免复制数据?
编辑:通过进一步调查,我发现将 Web 音频 API 与可传输对象一起使用的问题更加烦人。当您将数组缓冲区传输给工作程序时,底层数组缓冲区将AudioBuffer
被清除,我相信即使通过Float32Array
返回的复制操作也是getChannelData
不可能的。我现在可以看到完成我想要的唯一方法是放弃原始的AudioBuffer
,创建一个全新的AudioBuffer
,然后将我的数据复制到其中。真的??
我ct-steps-tooltip
对元素有一个指令,ng-repeat
如下所示:
<div id='courseSteps'
class='relative ease {{step.action.toLowerCase()}}'
ng-repeat='step in currentItem.userData.steps | filter:{action: filterSteps} track by $index'
ng-class='{"completed": step.endDate, "pointer": step.action==="Submit" && !step.endDate}'
ng-click='getRelated(step, $index)'
ct-steps-tooltip
ct-step-name="step.stepName"
ct-step-description="step.description"
ct-action="step.action"
ct-value-text="step.valueText"
ct-quantity='steps.length'
ct-completed='currentItem.steps.completedSteps'
ct-start-date='step.startDate'
ct-end-date='step.endDate'>
<div ng-show='step.endDate' class="stepCompleteCheck absolute"></div>
<div> {{ step.stepName }} </div>
</div>
Run Code Online (Sandbox Code Playgroud)
我的目标是让指令在每次currentItem.userData.steps
更改时重新绑定/再次调用(我实际上是完全清除currentItem
然后重新分配它).这实际上在我所做的简化小提琴中很有用.在小提琴中你可以清楚地看到"我被叫了!" 每次更改数据时都在控制台中.出于某种原因,ct-steps-tooltip
实际代码中的指令仅在第一次被调用时,并且在数据发生变化时不再被调用(我在真实指令的link
函数中有类似的"我被调用"消息).我在破坏此功能的真实代码中做了什么?
编辑:注意OCCASIONALLY指令IS在数据更改时再次被调用.它发生在10%的时间.我的问题现在看起来与此类似.
当我做:
vector<double> myVect(120000000, 0);
Run Code Online (Sandbox Code Playgroud)
我可以让矢量看起来像我想要的那么多元素.但是,当我这样做时:
double myArray[120000];
Run Code Online (Sandbox Code Playgroud)
在我的程序崩溃之前,我被限制在大约120000-130000个元素的某个地方.有什么东西搞砸了或阵列真的有限吗?
是否可以使用用户硬盘中的音频文件作为src
HTML5 <audio>
标签的属性?也许通过一个<input type="file" />
?这在生产中可能不是特别有用,但我仍然很好奇是否可以做到.
我有两个web api控制器:PageController
和BlogController
.它们包含用于创建页面和博客的简单方法.每次创建博客时,我都需要创建一个页面,但反之亦然.这是最好的方法吗?感觉好像很奇怪,如果我继承我的路由必须发生PageController
在BlogController
.有没有一些方法来调用CreatePage
的方法PageController
从BlogController
的CreateBlog
方法是什么?每次我想创建一个博客时,我是否应该单独辞职,再进行两次单独的ajax调用?
我创建了一个使用numpy的滑动窗口算法,该算法在wav音频文件上滑动并将其切片输入到我的NN中,在tensorflow中检测音频切片中的功能.一旦张量流完成它,它就会将其输出返回到numpy land,在那里我将切片重新组合成一个与原始文件的每个样本位置匹配的预测数组:
import tensorflow as tf
import numpy as np
import nn
def slide_predict(layers, X, modelPath):
output = None
graph = tf.Graph()
with graph.as_default():
input_layer_size, hidden_layer_size, num_labels = layers
X_placeholder = tf.placeholder(tf.float32, shape=(None, input_layer_size), name='X')
Theta1 = tf.Variable(nn.randInitializeWeights(input_layer_size, hidden_layer_size), name='Theta1')
bias1 = tf.Variable(nn.randInitializeWeights(hidden_layer_size, 1), name='bias1')
Theta2 = tf.Variable(nn.randInitializeWeights(hidden_layer_size, num_labels), name='Theta2')
bias2 = tf.Variable(nn.randInitializeWeights(num_labels, 1), name='bias2')
hypothesis = nn.forward_prop(X_placeholder, Theta1, bias1, Theta2, bias2)
sess = tf.Session(graph=graph)
saver = tf.train.Saver()
init = tf.global_variables_initializer()
sess.run(init)
saver.restore(sess, modelPath)
window_size = layers[0]
pad_amount = (window_size …
Run Code Online (Sandbox Code Playgroud) 我刚开始学习winapi,我想制作一个带有两个按钮和一个文本框的简单表格.当我按下一个按钮时,我希望文本框说一件事,当我按下另一个按钮时,我希望它能说出别的东西.为了区分这两个按钮,我必须知道它们的控制ID,它们在WM_COMMAND消息的wParam的下限.我想我应该在CreateWindowEx()函数的hMenu参数中自己指定这些ID(或者Windows是否默认执行此操作?如果是这样,我如何获取ID?)但是,我找不到关于HMENU对象的任何文档或任何有关如何使用它的说明.什么是HMENU?
我想通过向现有数据集添加随机噪声来将我用来动态训练张量流中的神经网络的现有数据集的大小加倍。因此,当我完成后,我将拥有所有现有示例以及添加了噪音的所有示例。我还想在转换它们时将它们交错,因此它们按以下顺序出现:示例 1 无噪声,示例 1 有噪声,示例 2 无噪声,示例 2 有噪声,等等。我正在努力实现这一点使用数据集 API。我尝试使用 unbatch 来完成此操作,如下所示:
def generate_permutations(features, labels):
return [
[features, labels],
[add_noise(features), labels]
]
dataset.map(generate_permutations).apply(tf.contrib.data.unbatch())
Run Code Online (Sandbox Code Playgroud)
但我收到一条错误消息说Shapes must be equal rank, but are 2 and 1
. 我猜测张量流正在尝试从我返回的批次中生成张量,但是features
和labels
是不同的形状,所以这是行不通的。我可能可以通过制作两个数据集并将它们连接在一起来做到这一点,但我担心这会导致非常倾斜的训练,我在一半的时期内训练得很好,突然所有数据都在第二个时期进行了这种新的转换一半。在输入张量流之前,如何在不将这些转换写入磁盘的情况下即时完成此操作?
我遇到一种情况,需要将多个不同的大数组除以同一个数组:
import numpy as np
a = np.random.uniform(-1, 1, size=(1000000,))
b = np.random.uniform(-1, 1, size=(1000000,))
c = np.random.uniform(-1, 1, size=(1000000,))
d = np.random.uniform(1, 100, size=(1000000,))
a1 = a / d
b1 = b / d
c1 = c / d
Run Code Online (Sandbox Code Playgroud)
我知道除法比乘法慢,所以我很好奇我写的是否会更快:
d_recip = 1 / d
a1 = a * d_recip
b1 = b * d_recip
c1 = c * d_recip
Run Code Online (Sandbox Code Playgroud)
numpy 是否已经在幕后做了一些事情来优化这样的情况?如果我使用 cython,这样的东西会被优化吗?
我也很好奇当除数是标量时这如何应用:
import numpy as np
a = np.random.uniform(-1, 1, size=(1000000,))
b = np.random.uniform(-1, 1, size=(1000000,))
c …
Run Code Online (Sandbox Code Playgroud) javascript ×4
c++ ×2
python ×2
tensorflow ×2
ajax ×1
angularjs ×1
arrays ×1
asp.net ×1
css ×1
html ×1
html5-audio ×1
numpy ×1
web ×1
winapi ×1