- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我想将声音的音高绘制成图表。
目前我可以绘制幅度。下图是由 getUnscaledAmplitude()
返回的数据创建的:
AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(new BufferedInputStream(new FileInputStream(file)));
byte[] bytes = new byte[(int) (audioInputStream.getFrameLength()) * (audioInputStream.getFormat().getFrameSize())];
audioInputStream.read(bytes);
// Get amplitude values for each audio channel in an array.
graphData = type.getUnscaledAmplitude(bytes, 1);
public int[][] getUnscaledAmplitude(byte[] eightBitByteArray, int nbChannels)
{
int[][] toReturn = new int[nbChannels][eightBitByteArray.length / (2 * nbChannels)];
int index = 0;
for (int audioByte = 0; audioByte < eightBitByteArray.length;)
{
for (int channel = 0; channel < nbChannels; channel++)
{
// Do the byte to sample conversion.
int low = (int) eightBitByteArray[audioByte];
audioByte++;
int high = (int) eightBitByteArray[audioByte];
audioByte++;
int sample = (high << 8) + (low & 0x00ff);
toReturn[channel][index] = sample;
}
index++;
}
return toReturn;
}
但我需要显示音频的音高,而不是幅度。 Fast Fourier transform似乎得到了音调,但它需要知道比我拥有的原始字节更多的变量,并且非常复杂和数学。
有什么办法可以做到吗?
最佳答案
频率(客观指标)与音高(主观量)不同。一般来说,音高检测是一个非常棘手的问题。
假设您现在只想绘制频率响应,您别无选择,只能使用 FFT,因为它是 THE 方法来获得时域数据的频率响应。 (嗯,还有其他方法,例如离散余弦变换,但它们同样难以实现,而且更难以解释)。
如果您在实现 FFT 时遇到困难,请注意它实际上只是一种计算离散傅里叶变换 (DFT) 的有效算法;见 http://en.wikipedia.org/wiki/Discrete_Fourier_transform .基本的 DFT 算法要简单得多(只有两个嵌套循环),但运行速度要慢 很多(O(N^2) 而不是 O(N log N))。
如果您想做比简单地绘制频率内容更复杂的事情(例如音高检测或窗口化(如其他人建议的那样)),恐怕您将了解数学的含义。
关于java - 绘制声音的音高(频率),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4708613/
我正在使用 AudioRecord类通过麦克风录制用户的声音。有没有办法改声音或pitch用户在录制过程中。如果没有这样的方法,我该如何调制输出音频文件并更改其pitch并将文件保存回来。我不需要在播
自从我更新到 iOS7 以来,我总是收到正在开发的应用程序的日志消息“无法在此设备上启用 MKMapView 音高”。该设备是 iPhone4。 有人能告诉我这条消息是什么意思以及我如何摆脱它吗? 最
如何使用 c# 改变波形文件中的频率(音调)和振幅,但在波形文件上不是音调 http://www.youtube.com/watch?v=Tumpkl-xJuA 最佳答案 这answer here提供
因为我是一个音乐迷(但只是一个初级编码员),所以我编写了这个脚本来随机选择一些音调(从 MySQL 表中)(以帮助非正式的串行风格作曲。)它给出 9-12 个不重复的音调音高名称分为 3-4 组,每组
正如标题所说,如果我有一个发出声音的音频节点并将其连接到两个单独的 GainNodes,后者又连接到 Audio Context 目标,则声音以双倍速度/双倍音高播放(好像发送了一半样本一个增益节点,
我找到了 this example使用 ActionScript 3 提高 MP3 的音高。我将如何降低音高而不是提高音高? 最佳答案 您多次将相同的样本写入输出缓冲区。 function downO
我是一名优秀的程序员,十分优秀!