Я делаю основной музыкальный проигрыватель на C ++ на встроенной платформе Linux (Intel Edison).
Он работает путем отправки команд в оболочку для воспроизведения музыки с помощью mpg123
,
Воспроизведение музыки работает нормально, но теперь мне нужно добавить средства управления медиа. Я использую mpg123
команда для воспроизведения моих файлов MP3, и если вы передаете его -C
флаг, то он слушает такие команды, как p
для паузы, q
для выхода и т. д.
Я использую код из этого другого ответа SO для выполнения команд Как выполнить команду и получить вывод команды в C ++, используя POSIX?
Теперь дело в том, когда я запускаю команду для воспроизведения выбранной песни из c ++ (например, mpg123 -C /media/sdcard/Music/<songname>
) она вешает программу на с ++ до тех пор, пока не вернется команда, которая не вернется, пока не закончится воспроизведение песни. Я могу устранить эту проблему с помощью pthead
выполнить команду в параллельном потоке, но это все еще не позволяет мне вводить команды так, как мне нужно.
Я подумал, может быть, как-то запустить команду в другом tty
и затем как-то передавая команды mpg123
отправив их другому tty
, но я не смог найти способ сделать это. (и я не уверен, что это возможно)
Я пытался делать это часами, так что теперь я готов попросить здесь о помощи 🙂
У кого-нибудь из вас есть какие-либо идеи о том, как запустить команду без замораживания потока (в pthread или как-то еще), и при этом иметь возможность отправлять команды mpg123
?
Похоже, вы захотите использовать режим FIFO в mpg123. Вы устанавливаете путь, который будет использоваться, наведите на него mpg123 и затем введите в него ваши команды.
это ответ имеет отличный пример
FIFO_MPG='/srv/http/newsctl'
mpg123 -R --fifo "$FIFO_MPG"echo 'load filename.mp3' >> "$FIFO_MPG"
Других решений пока нет …