AudioTrack в MODE_STREAM не имеет звука
Я застрял на этой проблеме в течение нескольких дней. Сейчас я нахожусь на той стадии, когда я просто пытаюсь получить рабочий пример для построения, но я даже не могу достичь этой точки.
Мой вопрос основан на этом примере. Я включил источник (и решение) в свой собственный код и вижу, что в буфер записывается, но с устройства не поступает звук. Я изо всех сил пытаюсь определить, как отладить это дальше.
package com.example.audio;
import com.example.R;
import java.io.IOException;
import java.io.InputStream;
import android.content.Context;
import android.media.AudioFormat;
import android.media.AudioManager;
import android.media.AudioTrack;
import android.util.Log;
public class Synth {
private static final String TAG = Synth.class.getSimpleName();
private AudioTrack audioTrack;
private Context context;
public Synth(Context context) {
this.context = context;
int minBufferSize = AudioTrack.getMinBufferSize(22050, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT);
audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, 22050, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, minBufferSize, AudioTrack.MODE_STREAM);
}
public void playSound() {
audioTrack.play();
int i = 0;
int bufferSize = 512;
byte [] buffer = new byte[bufferSize];
InputStream inputStream = context.getResources().openRawResource(R.raw.mysample);
try {
int writes = 0;
while((i = inputStream.read(buffer)) != -1) {
writes++; audioTrack.write(buffer, 0, i);
}
Log.d(TAG, "Wrote " + writes + " times." );
} catch (IOException e) {e.printStackTrace();}
try {inputStream.close();} catch (IOException e) {e.printStackTrace();}
}
}
(Чтобы воспроизвести проект: создайте новый проект, включите этот класс, добавьте звук, упомянутый ниже, создайте экземпляр Synth
затем уволить playSound
публичная функция)
Очевидно, что я не могу загрузить аудио или гарантировать его постоянство в веб-папке, но этот инструмент будет генерировать WAV-файл точно так же, как я использую (измените частоту дискретизации до 22,05 кГц и нажмите "скачать.wav-файл")
Я понимаю, что STREAM_MUSIC
а также MODE_STREAM
кажется неуместным в этом примере. Я использую эти флаги / режим, потому что я знаю, что мне понадобится использовать AudioTrack с этими режимами позже в процессе разработки, и на самом деле я просто сейчас пытаюсь получить звук, выходящий из устройства.
Кто-нибудь может порекомендовать шаги отладки или посмотреть, в чем проблема с воспроизведением? Любая помощь приветствуется.
1 ответ
Я определил проблему, с которой столкнулся изначально, когда впервые поднял этот вопрос. Надеюсь, это поможет другим людям...
Как оказалось, в то время, когда я настраивал громкость, приложение не воспроизводило звук, поэтому на самом деле максимальная громкость составляла громкость системы / мелодии звонка, а не громкость музыки, видеоигр и других медиафайлов., который был приглушен.