Многопоточное приложение GTK RaspberryPI C, программирующее файл воспроизведения волны с использованием omxplayer OpenMAX API - PullRequest
0 голосов
/ 05 апреля 2020

Согласно popcornmix omxplayer

Вы можете использовать omxplayer и dbuscontrol. sh, используя fork () для воспроизведения волнового файла. Что работает.

Я хочу знать, кого играть, останавливать и регулировать громкость с помощью API OpenMAX, на котором основан omxplayer. Не нужно видео, только остановка запуска звука и регулировка громкости через приложение.

Я уже создал многопоточное приложение GTK 3 и отлично работает. Это приложение на основе списков GTK 3, которое при нажатии кнопки запуска в GUI создает новую ветку и обновляет текст в GUI et c. Я попытался использовать команду fork (), как описано для dbuscontrol. sh, чтобы управлять громкостью в созданном потоке, а затем убить процесс omxplayer, но научился не смешивать вилки и потоки.

Я не могу найти примеров в C, чтобы открыть и воспроизвести волновой файл, используя OpenMAX API на Debian Stretch в RaspberryPI.

Либо перед моим лицом, но я не вижу свет или я просто не понимая. Если я смогу научиться создавать многопоточное приложение GTK 3, обновляющее GUI, без проблем, я должен что-то упустить.

Должен ли я просто создать поток как обычно, когда pu sh кнопка запуска, затем создать поток из этого потока для воспроизведения файла на определенном уровне? Все еще исследую и пробую разные методы, но нужно посмотреть некоторые примеры OpenMAX API, основанные на C, если они могут быть найдены. Ниже то, что работает само по себе. Хотите использовать OpenMAX API и, возможно, создать поток как обычно, передать уровень громкости и / или возможность остановить поток и выполнить очистку.

Мои темы обычно просто проваливаются до выхода. Никогда не было необходимости воспроизводить звук или передавать параметры потоку, или прерывать поток, и останавливать воспроизведение звука, и управлять громкостью с помощью вызовов функций. Я знаю, это долго, но мой разум жарен LOL. СПАСИБО за любые ссылки, указатели или документы, примеры или материалы для чтения, относящиеся к C программированию.

int pid;
pid = fork();
char buf[29];

if(pid==0)
{
    execlp("/usr/bin/omxplayer", " ", "-o", "local", "file.wav",  "-- vol", "-1800", NULL);
    _exit(0);
}
// ramp up wave volume
for (float i = 0; i < 1; i = i + 0.01)
{
    sprintf(buf, "./dbuscontrol.sh volume %.2f", i);
    system(buf);
}
system("killall omxplayer.bin");
...