C++ implementa su propio programa de texto a voz (versión simple)

                                   

Tabla de contenido

                                       Texto a audio 

1. Prefacio

2. Requisito

3. Análisis e Implementación

4. Resumen y expectativa

5. Aprecio

Referencias


                                        Texto a audio

1. Prefacio

       Esta tarea debería haberse completado hace mucho tiempo, pero no encontré una buena idea antes de eso, y hay otras tareas para completar todos los días, y di vueltas y la arrastré hasta hoy. Esta idea surgió de una tarea extracurricular de "Tecnología y aplicación de desarrollo de software". En ese momento, estaba leyendo el libro "C++ Primer 5", pero siempre sentí que leer libros de gramática era aburrido. En ese momento, seguía pensando en C++ hasta que pude Por qué, justo cuando no podía seguir estudiando, recordé esta tarea, ¡puedo escribir un programa simple de texto a voz en C++! Aunque puede ser más fácil de implementar en otros idiomas, y habrá más materiales de referencia en Internet, ¡puede ser que siempre haya habido una obsesión ciega! Así que busqué desesperadamente información sobre la escritura de texto a voz en C++, pero la mayoría de ellos son TTS y kits de desarrollo de voz de Microsoft, que han sido empaquetados. Aunque todos son de código abierto, el código escrito es difícil de entender. no. Al final, incluso quería mirar el código fuente de TTS y similares, y luego imitar y escribir uno, pero es imposible en poco tiempo, sin mencionar que no tengo tanto tiempo, y finalmente Dios recompensa a los que trabajan duro, y obtuve la ayuda del gran dios, de repente me di cuenta de que mi idea en realidad era un poco parcial, ¡pero en realidad era bastante simple!

       ¡Así que escribí este artículo para conmemorar este proceso de desarrollo y guardarlo como recuerdo en el futuro! También se puede mejorar gradualmente en el futuro, ¡y espero que todos me den algún consejo!

2. Requisito

  1.  Implemente un programa simple de "texto a voz" y no pueda llamar directamente a kits de desarrollo de "texto a voz" como TTS
  2.  Los materiales de audio deben ser grabados por sí mismos.
  3.  El programa puede aceptar un fragmento de texto ingresado por el usuario y luego convertirlo en su propia grabación y reproducirlo.

3. Análisis e Implementación

      Este programa implementa una versión simple de un programa de texto a voz, es decir, solo realiza la conversión de una cadena de números en voz y la transmite. Los siguientes son los pasos principales de la implementación de este programa (espero que pueda inspirarte un poco):

1. Primero grabe la pronunciación de cada número en un solo archivo MP3 y guárdelo

2. El programa primero preprocesa el texto de entrada. Por ejemplo, no se permiten caracteres que no sean números en el texto. Además, considerando el número limitado de enteros legibles, se estipula que la longitud superior a 10 se lee como una cadena de números simples uno por uno La parte de implementación específica del código es la siguiente:

std::vector<std::string> StringHandler::prase()
{
	switch (flag) {
		case 1:  // 将字符串转化为一个长整数
		{
			long num = std::stol(sourceString);
			if (num == 0) {
				targetVector.push_back(posTable[0]);
			}
			else {
				int pos = 0;
				while (num != 0) {
					targetVector.push_back(std::to_string(num % 10));
					if (num / 10 != 0)
						targetVector.push_back(posTable[++pos]);
					num /= 10;
				}
				/*for (auto it = targetVector.rbegin(); it != targetVector.rend(); ++it)
					std::cout << *it << " ";
				std::cout << std::endl;*/
			}
			break;
		}
		case 2:  //将每个字符转化为数字
		{
			for (int i = sourceString.size() - 1; i >= 0; --i)
				targetVector.push_back(sourceString.substr(i, 1));
			break;
		}
		case 0:
			std::cout << "The length of source string is zero!" << std::endl;
			break;
		default:
			std::cerr << "X error!" << std::endl;
	}

	return targetVector;
}

3. Almacene la cadena convertida en el contenedor de vectores y haga una asignación de los elementos en el vector al archivo de audio

std::string posTable[10] = { "0","10","100","1000","10000","100000","1000000","10000000","100000000","1000000000" };

4. Finalmente, use la función mciSendString para abrir (reproducir) múltiples archivos de audio convertidos a su vez

void TextPlayer::play(std::vector<std::string> &vec)
{
	for (auto it = vec.rbegin(); it != vec.rend(); ++it) {
		std::string comm = "play msc/" + *it + ".mp3 wait";
		mciSendString(comm.c_str(), 0, 0, 0);
	}
}

4. Resumen y expectativa

       Este programa aún es demasiado simple y la idea es relativamente simple, pero aún optimiza las habilidades de programación tanto como sea posible, como encapsular operaciones de preprocesamiento y reproducción de voz en clases; además, puede considerarse como una prueba del efecto de leyendo un libro hace un tiempo Bar!

       El próximo trabajo es realizar aún más la operación de texto a voz , ¡y estoy muy feliz de dejar sus valiosas opiniones! Mi nivel personal es limitado, no quería compartirlo públicamente, pero de acuerdo con el principio de compartir la inocencia, ¡espero progresar junto con todos (por favor, levanten la mano~v~)!

5. Aprecio

       Aquí me gustaría agradecer al gran dios mencionado anteriormente --- mi maestro, quien realmente despertó al soñador con una palabra (aunque he estado soñando 2333), espero que esta respuesta aún pueda entrar en tus ojos.


Referencias

1.  Sitios de clips de música en línea 

2.  Código fuente (bienvenido a dejar un mensaje)

Supongo que te gusta

Origin blog.csdn.net/dubulingbo/article/details/103566540
Recomendado
Clasificación