#java #android #android-studio
#java #Android #android-studio
Вопрос:
Я хочу прочитать данные, а затем отправить их в другой поток. Прежде всего, я хочу проверить, работает ли это. Проблема в том, что 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);
}
Как я могу проверить объем входных данных в БД? Или мне следует использовать Audio Manager?
Комментарии:
1. Извините, но почему интервал равен [-.6, 0.5]? Идея состоит в том, чтобы проверить объем входных данных и решить, нужно ли мне отправлять их на другое устройство или нет.
2. Я также думал, что -1 и 1 являются нормализованными значениями в db..
3. ОК. Итак, я возвращаюсь к вопросу: что я должен сделать, чтобы проверить громкость входного сигнала?
4. Да, Мэтт, я думаю, ты мне помог. Если у меня возникнут какие-то проблемы, я обновлю вопрос. Спасибо и извините за глупые вопросы.
Ответ №1:
Максимальная громкость аудиопотока может быть рассчитана только для нескольких выборок; это максимальное абсолютное значение, встречающееся в потоке:
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]
Комментарии:
1. Я знаю. Я установил 0.3 для вывода. И мне также нужно знать объем входного потока в дб.
2. Спасибо тебе, Мэтт.