首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >采样率和音符频率

采样率和音符频率
EN

Stack Overflow用户
提问于 2017-04-16 19:08:02
回答 2查看 271关注 0票数 0

如何以44100采样率播放高频音符?

例如,如果我们试图以44100的采样率创建2959.95538169307680 hz的F#7波,那么一个周期必须由13个样本(sampleRate / hz)定义,问题是如果我们下一个音符是3135.96348785399680 G7 hz,那么由于从十进制到整数的转换,这也将是13个样本。

似乎不可能以44100的采样率生成7个八度以上的应计音符?还是有什么窍门?

样本-> Hz

13 2959.95538169307680 F#7

13 3135.96348785399680 G7

EN

回答 2

Stack Overflow用户

发布于 2017-04-16 19:58:44

似乎不可能以44100的采样率生成7倍频程以上的应计音符

每秒44100采样率,你肯定可以创造出高达22 per的声音,这意味着你可以创造出整个人类听觉范围的声音,

https://en.wikipedia.org/wiki/Nyquist_rate

你说用13个周期创建它是什么意思?请注意,您正在考虑的音符(或频率)是无理数,因此不要在13个周期中重复。它们不会在数千位长度的信号序列中重复它们自己。(就像数字pi一样)

票数 0
EN

Stack Overflow用户

发布于 2017-04-16 20:04:49

采样率为44.1k,表示您最多只能生成22.05k的备注(即所谓的Nyquist frequency)。您通常使用超过13个样本的wavetable,例如256或1024,甚至更大(在我的synth中,我使用4096个32位样本的波形)。

假设你有一个包含1024个正弦波值的数组。然后,要生成比方说3000 Hz的频率,您将以1024*3000.0/44100.0 = 69.65986的步长遍历此数组。所以你从索引0开始,然后下一个是索引69的样本,然后是索引(int)2*69.65986 = 139的下一个样本,下一个是(int)3* step,依此类推。如果你到达数组的末尾,你会绕到开头,不断地添加你为给定频率计算的步长。

这样做,这将从数组中的1024个样本中挑选13或14个样本,但在每个周期中不是相同的样本。

如果您希望在不创建泛音的情况下执行此操作,则可能必须使用过采样,并为不同的频率范围生成不同的波表,其中对高频的波表进行过滤(例如,使用FFT,删除奈奎斯特以上的频率,然后执行反向快速傅立叶变换)以消除泛音。

这不是一个简单的主题。但是仅仅有13个样本表是不够的。这听起来并不正确,而且您不能可靠地产生适当的频率,正如您已经注意到的那样。

网上有很多关于数字信号处理(和生成)的资料。在这样一个简单的问答媒介中,深入讨论它是不可能的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43436568

复制
相关文章

相似问题

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