Я пытаюсь написать программу, которая поможет читать текстовые и pdf документы на C, используя программы с открытым исходным кодом на Raspberry Pi.
программа простая, ничего сложного .....
Я подключаюсь к Raspberry Pi через SSH с моего ноутбука ...Переадресация X работает нормально, потому что я могу запускать приложения X из командной строки без каких-либо проблем.
Я использую apache2 на Raspberry Pi, и я сделал пользовательский интерфейс для этой программы, где вы можете вставлять текст, загружать текстовые файлы или PDF-файлы.
Текст преобразуется в речь с помощью espeak, который сохраняет выходные данные в волновой файл.
Теперь проблема в том, что я использую:
system("xmms2 play file.wav &")
в коде C ........ просто краткое описание
он компилируется ..... когда я пробую его с веб-страницы, он отображает ошибки:
Gtk-WARNING **: cannot open display: localhost:10.0
cannot start xmms2d.....failed to start xmms2 server
я даже попробовал другой аудиоплеер под названием aqualung, и он работал один раз, но на следующий день, когда я перезагружаю компьютер, он больше не работает.
Я гуглил и сделал все, начиная с export DISPLAY=:0.0
чтобы убедиться, что имя хоста на клиенте и хосте не localhost, но безуспешно
Поэтому я думаю, что, может быть, есть что-то, чего я не добавил в программу C, возможно, файл заголовка, который нужно добавить, или что-то в этом роде .....Gtk+ установлен на моей малины ....
Или, может быть, я не должен делать это как программу на C, но делать все в Bash или PHP ....
если я использую aplay для воспроизведения wav-файла, я получаю вывод звука, единственная разница в том, что мне нужно что-то с командной строкой и пользовательским интерфейсом. поэтому я могу отправлять команды из программы, а также пользователь может приостанавливать и воспроизводить файл в любое время.
Просьба некоторый совет нужен .... вот код
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <wiringPi.h>
char readcmd(void) //reading from text file /home/pi/cmdrdy.txt first character is read
{ //whenever text is received a 1 is written to this file, 2 for file received
FILE *stream;
int ch;
if( (stream = fopen("/home/pi/txtrdy.txt", "r")) == NULL )
return 0;
ch = fgetc( stream );
fclose( stream );
return (ch-'0');
}
void reset()
{
FILE *ft;
char ch;
ft = fopen( "/home/pi/cmdrdy.txt", "w" );
ch = '0';
fprintf(ft, "%c", ch );
fclose(ft);
}
void checktxt(){
if(readcmd() == 1)
{
system("espeak -v en -f /home/pi/book.txt -w /home/pi/text.wav &");
reset(); //to reset the text received flag to 0
system("xmms2 play /home/pi/text.wav &");
}
if(readcmd2() == 2)
{
system("pdftotext -layout /home/pi/upload/*.pdf /home/pi/converted.txt &");
delay(300);
system("espeak -v en -f /home/pi/converted.txt -w /home/pi/book.wav &");
delay(500);
system("sudo rm /home/pi/converted.txt");
system("sudo rm /home/pi/upload/*.pdf");
system("xmm2 play /home/pi/book.wav &");
}
}
void main(){
while(1){
checktxt();
}
}