相关疑难解决方法(0)

Android音频FFT使用audiorecord检索特定频率幅度

我目前正在尝试使用Android实现一些代码,以检测何时通过手机的麦克风播放多个特定的音频范围.我已经使用AudioRecord类设置了类:

int channel_config = AudioFormat.CHANNEL_CONFIGURATION_MONO;
int format = AudioFormat.ENCODING_PCM_16BIT;
int sampleSize = 8000;
int bufferSize = AudioRecord.getMinBufferSize(sampleSize, channel_config, format);
AudioRecord audioInput = new AudioRecord(AudioSource.MIC, sampleSize, channel_config, format, bufferSize);
Run Code Online (Sandbox Code Playgroud)

然后读入音频:

short[] audioBuffer = new short[bufferSize];
audioInput.startRecording();
audioInput.read(audioBuffer, 0, bufferSize);
Run Code Online (Sandbox Code Playgroud)

执行FFT是我陷入困境的地方,因为我在这方面的经验很少.我一直在尝试使用这个类:

在JavaComplex类中使用FFT 来实现它

然后我发送以下值:

Complex[] fftTempArray = new Complex[bufferSize];
for (int i=0; i<bufferSize; i++)
{
    fftTempArray[i] = new Complex(audio[i], 0);
}
Complex[] fftArray = fft(fftTempArray);
Run Code Online (Sandbox Code Playgroud)

这可能很容易让我误解了这个课程是如何工作的,但是返回的值跳到了整个地方,即使在沉默中也不代表一致的频率.是否有人知道执行此任务的方法,或者我是否过于复杂化以尝试仅抓取少量频率范围而不是将其绘制为图形表示?

java android fft frequency audiorecord

38
推荐指数
1
解决办法
4万
查看次数

实时音调检测

我正在尝试对用户唱歌进行实时音调检测,但我遇到了很多问题.我已经尝试了很多方法,包括FFT(FFT问题(返回随机结果))和自相关(自相关音调检测返回麦克风输入的随机结果),但我似乎无法获得任何方法来给出好的结果.任何人都可以建议一种实时音高跟踪方法或如何改进我已有的方法?我似乎无法找到任何好的C/C++方法进行实时音高检测.

谢谢,

尼尔.

编辑:请注意,我已经检查过麦克风输入数据是否正确,并且当使用正弦波时,结果或多或少是正确的音高.

编辑:对不起,这是迟到的,但此刻,我通过从结果数组和每个索引中取出值,并在X轴上绘制索引和在Y轴上绘制值来显示自动相关(两者都被除以100000或其他东西,我使用OpenGL),将数据插入VST主机并使用VST插件不是我的选择.目前,它看起来像一些随机点.我正确地做了,或者你能不能指点我做一些代码或者帮助我理解如何可视化原始音频数据和自相关数据.

audio signal-processing fft pitch-tracking pitch

26
推荐指数
5
解决办法
5万
查看次数

用于吉他调音器的Android处理音频

处理音频的最佳方法是什么,以便输出正在播放的音符?我正在为大学任务创建一个吉他调音器,我是Android开发的新手.

我已经看过Android上关于从Google API录制声音的示例,但我想知道从那里去哪里?

我知道我必须进行傅立叶变换,或其他什么来获得频率,只是想知道是否有人对如何做到这一点有任何建议?

一旦我们能够在屏幕上显示正确的频率,我们将完成大部分项目.

谢谢你的帮助.

audio android signal-processing

12
推荐指数
3
解决办法
2万
查看次数