Пишу управлялку через аудиоканал. Источник будет универсальный - смартфон, планшет, десктоп, ноут. Мне нужно выводить на динамик тоны разной частоты (2000-4000 Гц, длительностью несколько периодов.) Пока я вывожу вот так (картинка в аттаче):
Код | int[] wav_hdr = {0x52,0x49,0x46,0x46,0x66,0x1F,0,0,0x57,0x41,0x56,0x45,0x66,0x6D,0x74,0x20,0x12,0,0,0,1,0,1,0,0x40,0x1F,0,0,0x40,0x1F,0,0,1,0,8,0,0,0,0x64,0x61,0x74,0x61,0x40,0x1F,0,0};// хедер файла для частоты дискр. 8 КГц
byte[]d = new byte[wav_hdr.length+100]; int n=46;// длина аудиохедера
// пишем в массив команды (два звука разной частоты) for(int i=0;i<15;i++){d[n++]=0; d[n++]=(byte)255;}// 4 КГц for(int i=0;i<8;i++){d[n++]=0;d[n++]=0; d[n++]=(byte)255;d[n++]=(byte)255;} // 2 КГц (кстати, как избавиться от приведения к (byte) ?) Эти прямоугольные колебания становятся синусоидами после динамика.
// по нажатию кнопки воспроизводим аудиомассив с командами InputStream stream = new ByteArrayInputStream(d); Player player = Manager.createPlayer(stream, "audio/x-wav"); player.start();
|
ЭТО РАБОТАЕТ ОТЛИЧНО (передается и принимается) для КРАТНЫХ частот, но хотелось бы для произвольных частот и не очень удобно заполнять массив, хотелось бы просто генерить в поток проигрывателя без промежуточного файла определенного размера.
Есть ли у кого пример - Как на яве синтезировать звуки? Если скажете: "Юзай Только PlayTone", то как там вместо разных красявошных семплов сделать простые периодические сигналы (прямоугольники, треугольники или синусоиду)?
|