
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
02.09.2013, 22:24:51
|
|||
|---|---|---|---|
|
|||
swing и потоки |
|||
|
#18+
Здравствуйте! подскажите что я делаю не так. Суть кода в том, чтобы нарисовать ноту на нотном стане и одновременно ее проиграть. Думал, что будет работать, но все равно проигрывается с опозданием. Проигрывается все простой midi, тормозить не должно из-за этого. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Пробовал использовать Timer, но все равно не получается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.09.2013, 00:43:15
|
|||
|---|---|---|---|
swing и потоки |
|||
|
#18+
pporubov, я бы создал два потока. один для проигрывания, второй для рисования. оба запускаются из одного места. причем прорисовку ноты привязал бы к длительности звука. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.09.2013, 09:10:03
|
|||
|---|---|---|---|
swing и потоки |
|||
|
#18+
kadetpporubov, я бы создал два потока. один для проигрывания, второй для рисования. оба запускаются из одного места. причем прорисовку ноты привязал бы к длительности звука. "Для рисования" поток уже есть. EDT называется.. А вот для проигрывания по идее нужен отдельный. Но создавать-то его надо заранее, а лучше вообще из пула брать. Ну и кидать ему уже готовые объекты тоже - проигрыватель, поток (в смысле Stream) с музыкой. И вот тогда - если по нажатию кнопочки, допустим, отправлять событие в EDT для показа ноты, и сказать музыкальному потоку играть, всё должно быть как надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.09.2013, 10:55:02
|
|||
|---|---|---|---|
swing и потоки |
|||
|
#18+
pporubov, - если что-то тормозит, то нужно говорить цифрами на сколько - отрисовка занимает 0,0001 сек. Зачем здесь потоки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.09.2013, 13:15:35
|
|||
|---|---|---|---|
|
|||
swing и потоки |
|||
|
#18+
авторpporubov, - если что-то тормозит, то нужно говорить цифрами на сколько - отрисовка занимает 0,0001 сек. Зачем здесь потоки? тормозит не сильно, порятка 0,3 сек. авторНо создавать-то его надо заранее, а лучше вообще из пула брать. для меня это просто новое. что значит брать из пула? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.09.2013, 13:28:25
|
|||
|---|---|---|---|
swing и потоки |
|||
|
#18+
pporubov, если утрировано, то это набор заранее созданных и пока "спящих" потоков.. Использование пула потоков позволяет избежать накладных расходов на их пересоздание, уничтожение в JVM. Кстати, в Swing есть же SwingWorker . Как же я про него забыл! Вот что значит давно со Swing-ом дел не иметь.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.09.2013, 13:30:53
|
|||
|---|---|---|---|
|
|||
swing и потоки |
|||
|
#18+
mesierКстати, в Swing есть же SwingWorker . Как же я про него забыл! Вот что значит давно со Swing-ом дел не иметь.. Здесь он, вроде, не особо нужен, так как его основная цель синхронизировать результаты параллельной обработки с EDT. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.09.2013, 13:33:17
|
|||
|---|---|---|---|
|
|||
swing и потоки |
|||
|
#18+
pporubovтормозит не сильно, порятка 0,3 сек. new Thread().start() это довольно ресурсоёмкая операция. Не знаю, что там внутри new PlayNote(), но не исключено, что там тоже создаётся какой-нибудь прогрыватель и читает файл с диска. авторНо создавать-то его надо заранее, а лучше вообще из пула брать. для меня это просто новое. что значит брать из пула?[/quot] http://docs.oracle.com/javase/tutorial/essential/concurrency/executors.html Это значит взять какой-то существующий спящий Thread и запустить в нём свою задачу, вместо того чтобы каждый раз создавать новый Thread. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.09.2013, 13:34:53
|
|||
|---|---|---|---|
swing и потоки |
|||
|
#18+
pporubovтормозит не сильно, порятка 0,3 сек. тогда в чём проблема? Для меня 0,3 и потом звук файл не критично. А вообще 0,3 - много для отрисовки. Можно покопать почему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.09.2013, 13:37:12
|
|||
|---|---|---|---|
|
|||
swing и потоки |
|||
|
#18+
pporubov Код: java 1. repaint() ничего не рисует. Он лишь отдаёт команду отрисовать текущее состояние заново. Это может произойти не сразу. Swing и Java2D вообще не очень-то предназначены для анимации. Нормального API для этого нет. Стоит найти внятых примеров. pporubov Код: java 1. 2. 3. 4. 5. 6. Многие из этих действий нет смысла выполнять каждый раз. Можно оптимизировать создание потока и плеера. Создав их единожды, использовать для проигрывания. Скачайте "killer game programming in java" там есть примеры про работу со звуком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.09.2013, 14:18:46
|
|||
|---|---|---|---|
|
|||
swing и потоки |
|||
|
#18+
BlazkowiczSwing и Java2D вообще не очень-то предназначены для анимации. Нормального API для этого нет. JavaFX? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.09.2013, 14:29:42
|
|||
|---|---|---|---|
|
|||
swing и потоки |
|||
|
#18+
avp.mkJavaFX? Да. Там уже API для анимации имеется в наличии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.09.2013, 17:27:10
|
|||
|---|---|---|---|
|
|||
swing и потоки |
|||
|
#18+
авторНе знаю, что там внутри new PlayNote(), но не исключено, что там тоже создаётся какой-нибудь прогрыватель и читает файл с диска. Там все очень просто. Код: 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. 32. 33. 34. 35. 36. 37. авторrepaint() ничего не рисует. Он лишь отдаёт команду отрисовать текущее состояние заново. Это может произойти не сразу. Swing и Java2D вообще не очень-то предназначены для анимации. Нормального API для этого нет. Стоит найти внятых примеров. я же устанавливаю новые значения переменных используемых для отрисовки в ap.setMeasureArguments(note, 0, false); а потом делаю repaint(); да и со скоростью отрисовки проблем нет, проблема со скоростью проигрывания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.09.2013, 17:29:57
|
|||
|---|---|---|---|
|
|||
swing и потоки |
|||
|
#18+
pporubov, Почему Sequence и Sequencer надо пересоздавать каждый раз, вместо того чтобы создать один раз и потом проигрывать на нём? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=59&mobile=1&tid=2128676]: |
0ms |
get settings: |
17ms |
get forum list: |
30ms |
check forum access: |
7ms |
check topic access: |
7ms |
track hit: |
55ms |
get topic data: |
21ms |
get forum data: |
6ms |
get page messages: |
93ms |
get tp. blocked users: |
3ms |
| others: | 327ms |
| total: | 566ms |

| 0 / 0 |
