Слияние кода завершено, страница обновится автоматически
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include "common.h"
#include "head.h"
#define WAV "/tmp/a.wav"
/*-------接收音频-------*/
void recv_wav(int fd)
{
//读取音频数据的总大小
char size[10];
bzero(size,10);
read(fd,size,10);
long wavsize = atol(size);
FILE *fp = fopen(WAV, "w");
char buf[1024];
while(wavsize)
{
// 读取从Ubuntu发来的音频数据
bzero(buf, 1024);
int n = read(fd, buf, 1024);
if(n <= 0)
break;
fwrite(buf, n, 1, fp);
wavsize -= n;
}
fclose(fp);
}
void playback(void)
{
system("aplay /tmp/a.wav");
}
int main(int argc, char **argv)
{
// 1,准备好TCP套接字,和服务端的地址
int fd = Socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in addr;
socklen_t len = sizeof(addr);
bzero(&addr, len);
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr(argv[1]);
addr.sin_port = htons(atoi(argv[2]));
// 2,试图连接Ubuntu上的语音合成引擎
Connect(fd, (struct sockaddr *)&addr, len);
//打开管道
int fifo_SQLite_ALSA = open(SQLite_ALSA, O_RDWR);
char msg[200];
while(1)
{
// 3,从管道(数据库)接收需要语言合成的文本
bzero(msg, 200);
if(read(fifo_SQLite_ALSA,msg,200) == 0)
break;
// 4,将文本发送给语音合成引擎
Write(fd, msg, strlen(msg));
// 5,等待返回的语音数据,并播放出来
recv_wav(fd);
playback();
}
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )