如何解决AudioRecord获取流音量
我想读取数据,然后将其发送到另一个流。首先,我想检查一下是否可行。问题是,getstreamVolume在这里不起作用,我不知道应该使用哪种方法。我有以下代码:
audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,SAMPLE_RATE,AudioFormat.CHANNEL_IN_STEREO,AudioFormat.ENCODING_PCM_16BIT,intBufferSize);
audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,intBufferSize,AudioTrack.MODE_STREAM);
audioTrack.setPlaybackRate(SAMPLE_RATE);
audioRecord.startRecording();
audioTrack.play();
while (true){
audioRecord.read(AudioData,AudioData.length);
for (int i = 0; i < AudioData.length; i++){
AudioData[i] = (short) Math.min (AudioData[i],Short.MAX_VALUE);
}
audioTrack.setVolume(0.3f);
audioTrack.write(AudioData,AudioData.length);
}
如何检查db中的输入数据量?还是应该使用音频管理器?
解决方法
只能在多个样本之间计算音频流的最大音量。这是流中遇到的最大绝对值:
double[] samps = [0,-.5,0.5,-.75,0]
double max = 0;
for ( samp : samps ) {
if ( abs(samp) > max) {
max = abs(samp);
}
}
上述音频样本的最大音量为 .75 (或位于-1.25dB
);这意味着您可以通过 1.33 有效地放大信号,而不会丢失任何信息;输出流将上升回到0dB
并变为:
[0,-.67,.67,-1,0]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。