Я пытаюсь написать программу, которая поможет читать текстовые и pdf-документы на C помощью программ с открытым исходным кодом на raspberry pi.
программа простая, ничего сложного.....
я подключаюсь к raspberry pi через ssh с моего ноутбука...Х проброс работает нормально, потому что я могу запускать X-приложения из командной строки без каких-либо проблем.
Я использую apache2 на raspberry pi, и я сделал пользовательский интерфейс для этой программы где вы можете вставить текст, загрузить текстовые файлы или pdf-файлы.
текст преобразуется в речь с помощью espeak, который сохраняет вывод в файл wave.
теперь проблема в том, что я использую:
system("xmms2 play file.wav &")
в C код ........просто краткое описание
он компилирует.....когда я пытаюсь его с веб-страницы отображаются ошибки:
Gtk-WARNING **: cannot open display: localhost:10.0
cannot start xmms2d.....failed to start xmms2 server
Я даже попробовал другой аудиоплеер под названием aqualung, и он работал один раз, но на следующий день, когда я перезагрузить компьютер, это больше не работает.
Я Google вокруг и сделал все от export DISPLAY=:0.0
чтобы убедиться, что имя хоста на клиенте и хосте не localhost, но не успех
так что я думаю, может быть, есть что-то, что я не добавил в программу C, может быть, файл заголовка, который должен быть добавлен или что-то в этом роде.....Gtk + установлен на моей малине....
или, может быть, я не должен делать это как программа C, но делать все в bash или php....
если я использую проигрываю wav файл, получаю звуковой вывод, разница только в том, что мне нужно что-то с командной строкой и пользовательским интерфейсом. таким образом, я могу отправлять команды из программы, а также пользователь может приостановить и воспроизвести файл, когда захочет.
Pls некоторый совет необходим.... вот такой вот код
#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();
}
}