如何在android中计算声音频率?
我想开发一个应用程序来计算Android中的声音频率。Android设备将需要 来自麦克风的声音(即外侧声音),我在应用程序中有一个彩色背景屏幕。 在声音频率变化时,我必须改变屏幕的背景色 所以我的问题是“如何获得声音频率” 有android API可用吗 请帮我解决此问题。您的问题已解决编辑:。您还可以使用分析频率如何在android中计算声音频率?,android,audio,frequency-analysis,Android,Audio,Frequency Analysis,我想开发一个应用程序来计算Android中的声音频率。Android设备将需要 来自麦克风的声音(即外侧声音),我在应用程序中有一个彩色背景屏幕。 在声音频率变化时,我必须改变屏幕的背景色 所以我的问题是“如何获得声音频率” 有android API可用吗 请帮我解决此问题。您的问题已解决编辑:。您还可以使用分析频率 编辑:(示例代码,评论中的链接)感谢您的回复,我在 只需修改您的代码,以便使用以下方法计算声音频率 // sampleRate = 44100 public static
编辑:(示例代码,评论中的链接)感谢您的回复,我在
只需修改您的代码,以便使用以下方法计算声音频率
// sampleRate = 44100
public static int calculate(int sampleRate, short [] audioData){
int numSamples = audioData.length;
int numCrossing = 0;
for (int p = 0; p < numSamples-1; p++)
{
if ((audioData[p] > 0 && audioData[p + 1] <= 0) ||
(audioData[p] < 0 && audioData[p + 1] >= 0))
{
numCrossing++;
}
}
float numSecondsRecorded = (float)numSamples/(float)sampleRate;
float numCycles = numCrossing/2;
float frequency = numCycles/numSecondsRecorded;
return (int)frequency;
}
//sampleRate=44100
公共静态整数计算(整数采样器,短[]音频数据){
int numSamples=audioData.length;
int numCrossing=0;
对于(int p=0;p0&&audioData[p+1]=0))
{
numCrossing++;
}
}
float numseconds recorded=(float)numSamples/(float)采样器;
浮动numCycles=numCrossing/2;
浮动频率=记录的numCycles/numseconds;
返回(int)频率;
}
这里有一个指向上述代码的链接。还有一些其他有用的代码
以下是零交叉的处理:
根据Android上录制的音频精确确定频率是不准确的。这就是说,它仍然有助于让你的应用程序大致感觉到它所听到的声音是一种恒定的歌声,而不仅仅是噪音
这里的代码似乎可以很好地确定频率(如果您可以将其从C#翻译成java)
其他答案显示了如何显示光谱图。我认为问题在于如何检测基频的变化。在Stack Exchange上经常会有这样的问题,我为此写了一篇博客(带有代码!): 诚然,代码是用C编写的,但我想你会发现移植起来很容易 简而言之,您必须:
看看android.media.audiofx public int getFft(byte[]fft)方法,希望它能指引你正确的方向谢谢你的回复,我已经用这个答案中链接上的示例完成了这项工作,现在已经死了。请考虑编辑它。你正在分析零交叉;我相信这可以用来识别主频或谐波。这不是傅里叶变换。如果信号是两个信号的和,第一个是频率F和振幅a,第二个是频率N*F和振幅a