Я пытаюсь перенести приложение, которое воспроизводит музыкальные файлы chiptunes (NSF, SPC и т. Д.) С Java SE на Android. В Android API, похоже, отсутствуют классы мультимедиа javax, которые это приложение использует для вывода необработанного звука PCM. Ближайший аналог, который я нашел в API, - это AudioTrack, и я боролся с этим.
Однако, когда я пытаюсь запустить один из моих образцов музыкальных файлов через незавершенный порт, все, что я получаю, остается статичным. Я подозреваю, что виноват AudioTrack, который я настроил. Я пробовал разные конструкторы, но в итоге все они просто выводят статические значения.
Настройка DataLine в исходном коде выглядит примерно так:
AudioFormat audioFormat = new AudioFormat( AudioFormat.Encoding.PCM_SIGNED,
44100, 16, 2, 4, 44100, true );
DataLine.Info lineInfo = new DataLine.Info( SourceDataLine.class, audioFormat );
DataLine line = (SourceDataLine)AudioSystem.getLine( lineInfo );
Конструктор, который я использую сейчас:
AudioTrack = new AudioTrack( AudioManager.STREAM_MUSIC,
44100,
AudioFormat.CHANNEL_CONFIGURATION_STEREO,
AudioFormat.ENCODING_PCM_16BIT,
AudioTrack.getMinBufferSize( 44100,
AudioFormat.CHANNEL_CONFIGURATION_STEREO,
AudioFormat.ENCODING_PCM_16BIT ),
AudioTrack.MODE_STREAM );
Я заменил в них константы и переменные, чтобы они имели смысл, насколько это возможно, но мой основной вопрос заключается в том, есть ли какие-либо очевидные проблемы в предположениях, которые я делал при переходе от одного формата к другому.