Несколько вопросов по управлению воспроизведения

Список разделов Аудиоплеер foobar2000 Программирование foobar2000

Описание: Для программистов, пищущих плагины для foobar2000. SDK и обмен опытом

Сообщение #1 P_Igorek » 06.01.2009, 18:54

Доброго времени суток.

1 - Для старта воспроизведения использую следующий код:

static_api_ptr_t pc;
        pc->start( (play_control::t_track_command)1, true );

Функция start принимает первым параметром перечисление описанное в файле playback_control.h в классе playback_control.

Как более грамотно с точки зрения синтаксиса указать первый аргумент: track_command_play ???

2 - Если проигрыватель находиться в режиме СТОП и подать выше указанную команду а за ней сразу pc->seek( XXX ); то перехода на время XXX не происходить, а если подать команду seek через некоторое время (более 1 сек, у меня 5) то переход по треку осуществляется.

Как надо подавать команду satr а затем seek чтобы воспроизведение началось с указанной позиции?

P_Igorek
P_Igorek
Автор темы, Новичок
Репутация: 0
С нами: 8 лет 11 месяцев

Сообщение #2 skipyrich » 06.01.2009, 21:32

Тут надо немного поколдовать.
- подписаться на play_callback
- в on_playback_new_track создать static_api_ptr_t
- добавить в него свой callback, и в нем уже вызывать seek
Помни!: пережатие из (wav|mp3|mpc|ogg|aac|...) в (mp3|mpc|ogg|aac|...) при любых битрейтах ухудшает качество
skipyrich M
Мастер
Возраст: 44
Откуда: Москва
Репутация: 11
С нами: 11 лет 7 месяцев

Сообщение #3 P_Igorek » 06.01.2009, 23:22

Как-то левой ногой почесать правое ухо.....

Пусть будет старт на паузе а через 5 секунд уже seek и снятие с паузы. Лишние 5 секунд не сыграют ни какой роли в данном случаи, все равно, после восстановления из hibernate воспроизведение начинается с задержкой в 10 сек на восстановление сетевого подключения и пере инициализацию USB звука.
P_Igorek
Автор темы, Новичок
Репутация: 0
С нами: 8 лет 11 месяцев

Сообщение #4 skipyrich » 06.01.2009, 23:36

Я, конечно, внутренностей фубара не видел, но насколько я понимаю, вызовом start отсылается только сообщение, что нужно запустить воспроизведение, а запустится оно гораздо позже, пробежав по всем колбэкам.
Команда seek сразу же после start игнорируется именно поэтому - воспроизведение пока еще не включено.
Так что, нужно дождаться начала воспроизведения - колбэк тебе доложит об этом, а потом вызвать seek в контексте main thread - именно для этого нужен main_thread_callback_manager.
Более лёгкого пути пока не нашел, хотя поискать стоит, а то в foo_preview иногда проскакивает начало трека, прежде чем мотнётся куда нужно :)
Помни!: пережатие из (wav|mp3|mpc|ogg|aac|...) в (mp3|mpc|ogg|aac|...) при любых битрейтах ухудшает качество
skipyrich M
Мастер
Возраст: 44
Откуда: Москва
Репутация: 11
С нами: 11 лет 7 месяцев

Сообщение #5 P_Igorek » 07.01.2009, 12:13

skipyrich писал(а):Я, конечно, внутренностей фубара не видел, но насколько я понимаю, вызовом start отсылается только сообщение, что нужно запустить воспроизведение, а запустится оно гораздо позже, пробежав по всем колбэкам.
Команда seek сразу же после start игнорируется именно поэтому - воспроизведение пока еще не включено.
Так что, нужно дождаться начала воспроизведения - колбэк тебе доложит об этом, а потом вызвать seek в контексте main thread - именно для этого нужен main_thread_callback_manager.

Конечно логично, что старт отсылает сообщение .... но тогда логично было бы сделать чтоб и seek тоже отсылало сообщение, которое вставало бы в очередь и выполнялось сразу после старта, но ни как не игнорировалось.
P_Igorek
Автор темы, Новичок
Репутация: 0
С нами: 8 лет 11 месяцев


Вернуться в Программирование foobar2000