Java 音频记录获取流卷

Java 音频记录获取流卷,java,android,android-studio,Java,Android,Android Studio,我想读取数据,然后将其发送到另一个流。首先,我想检查一下它是否有效。问题是,getstreamVolume在这里不起作用,我不知道应该使用哪种方法。我有以下代码: audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC , SAMPLE_RATE , AudioFormat.CHANNEL_IN_STEREO , Audi

我想读取数据,然后将其发送到另一个流。首先,我想检查一下它是否有效。问题是,getstreamVolume在这里不起作用,我不知道应该使用哪种方法。我有以下代码:

        audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC
                , SAMPLE_RATE
                , AudioFormat.CHANNEL_IN_STEREO
                , AudioFormat.ENCODING_PCM_16BIT
                , intBufferSize);

        audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC
                , SAMPLE_RATE
                , AudioFormat.CHANNEL_IN_STEREO
                , AudioFormat.ENCODING_PCM_16BIT
                , intBufferSize
                , AudioTrack.MODE_STREAM);

        audioTrack.setPlaybackRate(SAMPLE_RATE);

        audioRecord.startRecording();
        audioTrack.play();

        while (true){

            audioRecord.read(AudioData, 0, 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, 0, AudioData.length);
        }
audioRecord=新的音频记录(MediaRecorder.AudioSource.MIC
,抽样率
,AudioFormat.CHANNEL\u立体声
,AudioFormat.ENCODING_PCM_16位
,intBufferSize);
audioTrack=新的audioTrack(AudioManager.STREAM\u音乐
,抽样率
,AudioFormat.CHANNEL\u立体声
,AudioFormat.ENCODING_PCM_16位
,intBufferSize
,AudioTrack.MODE_-STREAM);
audioTrack.setPlaybackRate(采样率);
录音。开始录制();
音轨播放();
while(true){
音频记录。读取(音频数据,0,音频数据。长度);
对于(int i=0;i

如何检查以db为单位的输入数据量?还是应该使用音频管理器?

一个音频流的最大音量只能跨多个样本计算;它是流中遇到的最大绝对值:

double[] samps = [0, -.5, 0, 0.5, 0, -.75, 0]

double max = 0;
for ( samp : samps ) {

    if ( abs(samp) > max) {
        max = abs(samp);
    }
}
上述音频样本的最大音量为.75(或
-1.25dB
);这意味着您可以有效地将信号放大1.33倍,而不会丢失任何信息;输出流将上升至
0dB
,并变为:

[0, -.67, 0, .67, 0, -1, 0]

音频流的最大音量只能跨多个样本计算;它是流中遇到的最大绝对值:

double[] samps = [0, -.5, 0, 0.5, 0, -.75, 0]

double max = 0;
for ( samp : samps ) {

    if ( abs(samp) > max) {
        max = abs(samp);
    }
}
上述音频样本的最大音量为.75(或
-1.25dB
);这意味着您可以有效地将信号放大1.33倍,而不会丢失任何信息;输出流将上升至
0dB
,并变为:

[0, -.67, 0, .67, 0, -1, 0]

我知道。我将输出设置为0.3。我还需要知道输入流的音量(以分贝为单位)。谢谢你,马特。我知道。我将输出设置为0.3。我还需要知道输入流的音量(以db为单位)。谢谢你,马特。对不起,为什么间隔是[-.6,0.5]?这样做的目的是检查输入数据的量,并决定是否需要将其发送到另一个设备。我还认为-1和1是以db为单位的标准化值。好的。所以我回到问题上来:我该怎么检查输入音量?是的,马特,我想你帮了我。如果我有问题,我会更新问题。谢谢你,很抱歉问了这么多愚蠢的问题。很抱歉,为什么间隔是[-.6,0.5]?这样做的目的是检查输入数据的量,并决定是否需要将其发送到另一个设备。我还认为-1和1是以db为单位的标准化值。好的。所以我回到问题上来:我该怎么检查输入音量?是的,马特,我想你帮了我。如果我有问题,我会更新问题。谢谢你,很抱歉提出了愚蠢的问题。