检测第一个非静默样本索引
Detecting first non silent sample index
我有一个用 [tabread~] 阅读的音频文件。音频以静音开始,我正在尝试找到第一个非静音样本索引。
我曾尝试使用 [bonk~]、[fiddle~] 或 [sigmund~],但结果是近似值而不是常量。
有人对此有解决方案吗?谢谢
帕斯卡
我已经在 Pure Data forum 中回答了这个问题,但我将其复制到此处(稍作改编)以防其他人发现它有用:
如果在您标记的点之前声音完全静音(也就是说,table 到该点之前都用零填充),那么您可以使用 简单地遍历数组的元素[tabread],从第一个样本开始,检查后续样本的绝对值是否大于零。如果信号不是完全无声而是接近无声,那么你可以使用某种攻击检测(例如 [bonk~])或者简单地使用这样的东西:
...
|
[tabread array1]
|
{abs]
|
[> 0.001]
|
[sel 1]
|
...
请注意我是如何使用 [> 0.001] 而不是 [> 0] 的。调整这个数字(直接作为参数或通过 [>] 最右边的入口)来控制检测的灵敏度。然后一旦 [sel 1] 收到一个值 1
的浮点数,你可以使用它的 bang 来停止这个过程,因为你找到了你的第一个非静默元素。
我有一个用 [tabread~] 阅读的音频文件。音频以静音开始,我正在尝试找到第一个非静音样本索引。
我曾尝试使用 [bonk~]、[fiddle~] 或 [sigmund~],但结果是近似值而不是常量。
有人对此有解决方案吗?谢谢
帕斯卡
我已经在 Pure Data forum 中回答了这个问题,但我将其复制到此处(稍作改编)以防其他人发现它有用:
如果在您标记的点之前声音完全静音(也就是说,table 到该点之前都用零填充),那么您可以使用 简单地遍历数组的元素[tabread],从第一个样本开始,检查后续样本的绝对值是否大于零。如果信号不是完全无声而是接近无声,那么你可以使用某种攻击检测(例如 [bonk~])或者简单地使用这样的东西:
...
|
[tabread array1]
|
{abs]
|
[> 0.001]
|
[sel 1]
|
...
请注意我是如何使用 [> 0.001] 而不是 [> 0] 的。调整这个数字(直接作为参数或通过 [>] 最右边的入口)来控制检测的灵敏度。然后一旦 [sel 1] 收到一个值 1
的浮点数,你可以使用它的 bang 来停止这个过程,因为你找到了你的第一个非静默元素。