问题标签 [pitch]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
iphone - 高性能代码中的峰值检测
我正在寻找使用 HPS 方法在 iphone 中实现语音音高检测。但是检测到的音调不是很准确。Performous在音高检测方面做得不错。
我查看了代码,但没有完全理解计算背后的理论。他们使用 FFT 并找到峰值。但是他们使用 FFT 输出相位的部分让我感到困惑。我认为他们对语音频率使用了一些启发式方法。
那么,任何人都可以解释一下 Performous 中用于检测音高的算法吗?
android - 改变android中声音文件的频率
我尝试更改单个声音文件的频率。我设法在 android 中使用 SoundPool 做到了这一点。但结果听起来真的很糟糕。所以我开始讨论傅里叶变换——但我不确定这是否是我正在寻找的。
我想加载一个文件并在每次播放该文件时更改该文件的频率。所以我可以用一种音调创作旋律。android/java有可能吗?
这就是我设法做到的方式。“坏”我的意思是它听起来格格不入。
如果我想播放文件中音符的下一个频率,我必须将它乘以 2^(1/12)。但由于它只是一个浮点数,我想它不够精确,无法获得下一个音符的“真实”频率。
是否有实现该目标的“简单”方法?
audio - 公开音高偏移
谁能告诉我为什么当我在公开赛中提高音高时音量会变低?音调越高,音量越低......
alSourcef(源,AL_PITCH,1.2f);alSourcef(源,AL_GAIN,1.0f);
使用此设置,音量仍然非常低。有没有办法欺骗它使增益超过1?也许这与距离有关?
仅供参考,源是从 AVrecorder 录制的声音,所以我不能将源音量设置得更高。
python - 在 Python 中播放期间更改音频的音高(和速度)
我正在开发一个播放音乐的 Python 程序。一个功能是一个滑块,用户可以向上或向下拖动来改变音乐播放时的音高。
例如,如果音高设置为 2,那么音乐听起来会高一个八度,播放速度会提高一倍,持续时间会减半。我真正改变的是播放速度,但我需要实时交互。
可以在此处找到在 flash 中实现的此功能的一个很好的示例。(加载需要一点时间,请耐心等待。)
我研究了许多 python 音频包,但我还没有找到一个可以改变当前正在播放的声音的音高的包。我有多个版本的 Python,所以对包支持的版本没有要求。我正在 Windows 7 上开发它。
有什么建议么?
android - 确定Android手机水平时的滚动角度(上/下)?
当 Android 手机侧放(水平方向)时,Roll 代表倾斜,可以这么说。当手机垂直于地面(直视屏幕)时,滚动显示 90。但是,当您开始向前或向后倾斜手机时,就好像您想向下或向上看一样,角度只会减小。
这意味着向上或向下看 45 度会产生相同的滚动或 45 度。
怎么可能知道你是向前滚动还是向后滚动?
我一直在寻找这个问题的答案,但找不到其他人遇到这个问题。从不同的应用程序来看,这似乎是可能的,所以我想我只是错过了一些与某事的关系,并希望有人能够将我推向正确的方向。谢谢!
iphone - C/C++/Obj-C 实时算法从人声输入中确定音符(不是音高)
我想检测的不是音高,而是歌唱音符的音级。
因此,是 C4 还是 C5 并不重要:它们必须都被检测为 C。
想象一下排列在钟面上的 12 个半音,指针指向音高等级。这就是我所追求的!理想情况下,我希望能够分辨出演唱的音符是准确的还是略微偏离的。
这不是先前提出的问题的重复,因为它引入了以下约束:
声源是单一的人声,希望背景干扰可以忽略不计(尽管我可能需要处理这个)
八度不重要,只有音阶
algorithm - FFT 算法:输入/输出什么?(re:实时音高检测)
我正在尝试从音频流中提取音高数据。据我所见,FFT 似乎是最好的算法。
与其直接钻研数学,有人可以帮我理解这个 FFT 算法的作用吗?
请不要说“FFT 从原始信号中提取频率数据”之类的明显内容。我需要更详细的信息。
我输入什么,输出什么?
一旦我清楚地理解了接口,这将有助于我理解实现。
我认为我需要传入一个音频缓冲区,我需要告诉它每次计算要使用多少字节(比如这个缓冲区中最近的 1024 个字节)。也许我需要指定我希望它检测到的音高范围。现在它要回传什么?一组频率区间?这些是什么?
(编辑:)我找到了一个可以使用的 C++ 算法(如果我只能理解的话)
Performous从麦克风中提取音高。代码也是开源的。下面是对算法功能的描述,来自编写它的人。
- PCM 输入(带缓冲)
- FFT(一次 1024 个样本,之后从缓冲区前面删除 200 个样本)
- 重新分配方法(针对之前 200 个样本的 FFT)
- 峰值过滤(这部分可以做得更好,甚至可以省略)
- 将峰值组合成谐波组(我们称组合为音调)
- 音调的时间过滤(更新之前检测到的音调集,而不是简单地使用新检测到的音调)
- 选择最好的人声(频率限制,加权,也可以使用谐波阵列,但我不认为我们这样做)
但是有人可以帮我理解这是如何工作的吗?从 FFT 发送到重新分配方法的内容是什么?
algorithm - 检测音高的共振算法
我一直在寻找不同的方法来检测传到麦克风中的音调。
看到我想找出它与特定音高的共振有多紧密,我想知道我是否可以做某种基于物理的共振算法。
如果你在钢琴上按住踏板,然后唱一个音调,(如果你离它现有的音高足够近)一个音符会产生共鸣。
我希望能够模拟这种行为。但是我将如何完成这项任务?谁能帮我推进这件事?
signal-processing - 音乐遇上 DSP:频率、音高、音调和音符有什么区别
关于编写音乐相关软件,我正在通过一些 DSP 工作,并且对术语感到困惑。
我开始怀疑这些实体是否天生就令人困惑/手摇晃晃/定义松散......
频率很清楚:每秒周期数,Hz。
Pitch,Tone和Note对我来说不是很清楚。
除了这些术语之外,还有“ pitch-class ”。据说 C4 和 C5 属于同一音级。
此外,是否还有其他术语需要添加到此集合中以消除歧义?
c - 如何在 C 中实现带通滤波器(目的:音高检测)?
我最近问了这个问题:
我正在寻找一种算法来检测音高。其中一个答案建议我使用初始 FFT 来获得基本频率响应,找出哪些频率正在发声,然后在每个感兴趣的区域使用带通滤波器:
一个稍微高级的算法可以做这样的事情:
- 粗略检测音调频率(可以用 DFT 完成)。
- 带通信号过滤隔离音调频率。
- 计算滤波信号中两个峰值之间的样本数。
现在我可以做第一步了(我正在为 iOS 编码,Apple 有一个框架(加速框架)用于执行 FFT 等。
我已经从这里开始了:但我可以看到问题:一个 FFT 可以区分一个人可以唱的所有可能的音符需要大量的样本,而且我不想执行太多不必要的计算,因为我是针对移动设备。
所以我试图弄清楚上面的这个答案,但我不明白如何将带通滤波器的概念应用到代码中。
任何人都可以帮忙吗?