Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
37 / 37 / 9
Регистрация: 06.11.2010
Сообщений: 308
Записей в блоге: 2

*Перенос с стека оверфлова* Многоканальное проигрование звука - JavaAPI

20.03.2014, 18:32. Показов 735. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Тема созданая мной на стек оверфлове - http://stackoverflow.com/quest... er-javaapi .
Перевод:
Севодная я начал баловатса с Джава айпи,а имено - с звуком.И от я зделал программу(мультипоточную сразу же скажу) , в виде клиент -> сервер -> клиенты, "Звуковой чат".Все хорошо,когда человек 1.Когда уже 2 - надо многоканальность,или обеденить все каналы в 1.Вопрос таковой,как это зделать? Я не професионал "звука",увы. Поетому пошол гуглить.Нашол "ответ" на стеке.Смысл был таковой: Среднее арефметическое потоков = готовый поток.Я так и зделал,но от проблема - звук багает / лагает.От код:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
static public void playSound() {
    while (ObSound.peek() == null)
        try {
            Thread.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        } 
    Byte[] Buff3 = ObSound.poll();              
    PlaySound.write(ArrayUtils.toPrimitive(Buff3),0,Buff3.length);
}
static public void recordSound() {
    MicRec.read(buff, 0, buff.length);
    try {
        MicOS.write(buff,0,buff.length);
        MicOS.flush();  
    } catch (IOException e) {
        e.printStackTrace();
    }
}
 
//How do i make 1 buffer
        Byte[] Buff2 = new Byte[buff2.length];
        for (int j = 0;j<buff2.length;j+=2) {
            long summ = 0;
            for (int i1 = 0;i1<totalTh;i1++) {
                summ += ((buff4[i1][j+1] & 0xFF) << 8) | (buff4[i1][j] & 0xFF); 
            }
            byte res = (byte)(summ / totalTh);                  
            Buff2[j] = (byte)(res & 0xff);
            Buff2[j+1] = (byte)((res >> 8) & 0xff);
        }
Более подробное описание на стеке.Если что то надо - обращайтесь.Я юзаю квин для поставление данных с сервера и для отправки их в "проигрование". Все разделено на 4 тхерда.

п.с. а еще,почему у джавы нету раздела "мультимедия",как например етсь у делфи?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.03.2014, 18:32
Ответы с готовыми решениями:

Проигрование звука
Нужно сделать звуковое уведомление void __fastcall TForm1::WMDeviceChange(TMessage&amp; Message) { if (Message.Msg == WM_DEVICECHANGE...

Проигрование звука по "событию"
Доброго всем времени суток. Хотелось бы сразу предупредить, что я человек далекий от электроники, поэтому если кто-то сможет мне...

Задача JavaApi
Итак есть примеры задач, которые будут на олимпиаде. Две алгоритмические и две на API. Так вот пример задачи API меня немного ошарашил....

3
44 / 44 / 11
Регистрация: 21.01.2013
Сообщений: 668
20.03.2014, 18:48
то есть ты реально думаешь, что тебе ответят на русском форуме несмотря на то, что на самом популярном ресурсе в мире подобного рода никто даже не попытался ответить?
0
37 / 37 / 9
Регистрация: 06.11.2010
Сообщений: 308
Записей в блоге: 2
20.03.2014, 20:25  [ТС]
Вопрос был задан тогда же как и здесь,т.е. недавно...

Добавлено через 1 час 3 минуты
Ошибка #1 - тип байт,а должен быть short.Почему? Ну угадайте,сумма 2 байтов чему равна? Конечноже шорту,но никто не мог подсказать. п.с. для тех кто не понял - это в сумме ошибка.После суммирования и деление на кол-во каналов тип у нас байт,а должен быть шорт.

Добавлено через 13 минут
Ошибка #2(Главная!!!!) : Иногда микрофон дает более длинный масив.Почему - я хз.Т.е. иногда давал 16К,а иногда 32К(как когда).Почему так - опять же я не знаю.На джава доках ничево про этого не написано.Просто теперь я ищу максимальную длину,и делаю масив имено такой длины.Хотя это может презвести к другой проблемме,поэтому лутше делить масив если он больше чем 16К на 2 масива по 16К,и один пихать в очередь.ПРОФИТ!
0
44 / 44 / 11
Регистрация: 21.01.2013
Сообщений: 668
20.03.2014, 21:07
по секрету скажу, что обычно проблему как-то подробнее объясняют. например стектрейс выкладывают, а не какой-то непонятный код.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.03.2014, 21:07
Помогаю со студенческими работами здесь

Перенос элементов из стека в стек
Создать стек из случайных целых чисел. Перенести в другой стек все элементы, находящиеся между вершиной и элементом с минимальным...

Перенос из стека в другой стек
Всем привет, дано задание Пользователем вводятся числа, которые записываются в стек. Перенесите в другой стек те из них, которые...

Проигрование видео на форме.
Мне вообщем нужно реализовать, чтобы видео проигрывалось через медиаплеер на определенном участке этой же формы, а не в новом окне... Как...

Многоканальное клиент-серверное приложение
Здравствуйте! Мне необходимо написать приложение,которое будет работать в локальной сети. Клиент залогиневается, программа считывает его...

Перенос данных из одного стека в другой для удаления записи
Здравствуйте, есть следующее задание : 1. Создать запись для хранения следующей информации: – код владельца, – номер автомобиля, ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. На мобильном - сканируйте QR-код. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru