getAudioInputStream не может преобразовать поток [стерео, 4 байта / кадр] в [моно, 2 байта / кадр] - PullRequest
0 голосов
/ 15 мая 2010

Я использую javasound и у меня AudioInputStream формата PCM_SIGNED 8000.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian

Использование AudioSystem.getAudioInputStream(target_format, original_stream) создает исключение IllegalArgumentException: Неподдерживаемое преобразование, когда формат target_format равен PCM_SIGNED 8000.0 Hz, 16 bit, mono, 2 bytes/frame, little-endian

Можно ли конвертировать этот поток вручную после каждого вызова read ()? И если да, то как?
В общем, как вы можете сравнить два формата и определить, возможно ли преобразование?

1 Ответ

0 голосов
/ 21 мая 2010

Возможно ли преобразовать этот поток вручную после каждого вызова read ()? И если да, то как?

Я не уверен, что вы хотите сделать, но это кажется ненужным. Имеет больше смысла буферизовать ваши данные и выполнить преобразование формата после того, как вы фактически создадите аудиовход.

Мне кажется, что вы переключаетесь со стерео на моно, чтобы попытаться сохранить размеры передачи данных. Вы можете добиться того же с надлежащим кодированием (в GSM, mu-law или A-law). Обратите внимание, что вам может понадобиться плагин для достижения этой конверсии. Больше информации здесь: Ресурсы Java Sound

Возможно преобразовать поток после каждого вызова read (), но если ваш поток не может преобразовать, он не может преобразовать.

В общем, как вы можете сравнить два формата и определить, возможно ли преобразование? Вы определяете два своих формата и используете AudioSystem, чтобы проверить, возможно ли преобразование.

boolean bConversionSupported = AudioSystem.isConversionSupported(targetFormat, sourceFormat);
...