我想将 Android 设备的麦克风用作声音影响传感器(例如在某些音乐可视化项目中)。
示例:http ://www.youtube.com/watch?v=pJGM3PiYpqk
我在这里或通过谷歌找不到任何相关的东西。
这是否可以尽可能少地延迟并且不记录到文件中?
我想将 Android 设备的麦克风用作声音影响传感器(例如在某些音乐可视化项目中)。
示例:http ://www.youtube.com/watch?v=pJGM3PiYpqk
我在这里或通过谷歌找不到任何相关的东西。
这是否可以尽可能少地延迟并且不记录到文件中?
我正在做一个声音处理项目,我认为有些东西对你有用。据我所知,手机通过采样通过微信号捕获声音,然后将 pcm(脉冲编码调制)信号转换为幅度值。我们的工作是为记录器设置配置:
int frequency = 8000;
int channelConfiguration = AudioFormat.CHANNEL_IN_STEREO;
int audioEncoding = AudioFormat.ENCODING_PCM_16BIT;
int blockSize = 256;
int bufferSize = AudioRecord.getMinBufferSize(frequency,
channelConfiguration, audioEncoding);
并使用以下配置创建记录器的新实例:
AudioRecord audioRecord = new AudioRecord(
MediaRecorder.AudioSource.DEFAULT, frequency,
channelConfiguration, audioEncoding, bufferSize);
然后开始录制:
short[] buffer = new short[blockSize];
float[] toTransform = new float[blockSize];
try {
audioRecord.startRecording();
} catch (IllegalStateException e) {
Log.e("Recording failed", e.toString());
}
while (check) {
if(isCancelled()) break;
int bufferReadResult = audioRecord.read(buffer, 0, blockSize);
// Your code goes here, buffer now has the value of amplitude of sound that you need.
publishProgress(result);
}
try {
audioRecord.stop();
} catch (IllegalStateException e) {
Log.e("Stop failed", e.toString());
}
录音应该是在后台运行的线程或异步任务。我建议每次捕获声音时使用 Asynctask 发布结果。检查就像记录的控制变量。您可以使用按钮来控制它。
不使用声音的幅度是另一个理想,您可以将信号转换到频域。但我认为使用幅度要容易得多