3 место Синтез текста в речь

Обрезать непроблемма,сложно выловить тот ролик куда яндекс плюнул свою метку. Когда отправляешь несколько текстов, что бы потом склеить в одно длинное. Не во все роики он вставляет. Бывает два перых чисто потм с 3 го вставляет сою метку. бывает с 4, тоесть как то рандомно. и вставляет то в конце ролика то в начале.
В таком случае да, сложновато будет.
Но думаю можно это обойти. Там конвертация аудио происходит в массив байтов. Нужно вот вычислить озвучку от Яндекса и сохранить эти байты.
Потом делать проверку на наличие этих байтов, если есть, то удалять их... Думаю должно сработать, я бы попробовал так. Но на практике не знаю как будет это работать.
 
В таком случае да, сложновато будет.
Но думаю можно это обойти. Там конвертация аудио происходит в массив байтов. Нужно вот вычислить озвучку от Яндекса и сохранить эти байты.
Потом делать проверку на наличие этих байтов, если есть, то удалять их... Думаю должно сработать, я бы попробовал так. Но на практике не знаю как будет это работать.
А Вы можете помочь в данном воросе. Как отлавливать массивы байтов янндекса!
 
А Вы можете помочь в данном воросе. Как отлавливать массивы байтов янндекса!
В коде есть этот код, где получаем массив байтов. Вот с ним нужно возиться,
как вариант можно сохранять этот массив в файл, а потом там редактировать..
Т.е. нужно:
Делать одну и туже озвучку несколько раз, до появления вставки от яндекс и сохранять массив байтов в разные файлы.
Затем эти файлы сравнить между собой, разница и будет вставка от яндекс, вот этот "кусок" нужно будет запомнить и сделать условие на проверку содержания этого "куска", и если есть - то удалять его.

У меня пока нет времени возиться с этим.
 
  • Спасибо
Реакции: DemonX
В коде есть этот код, где получаем массив байтов. Вот с ним нужно возиться,
как вариант можно сохранять этот массив в файл, а потом там редактировать..
Т.е. нужно:
Делать одну и туже озвучку несколько раз, до появления вставки от яндекс и сохранять массив байтов в разные файлы.
Затем эти файлы сравнить между собой, разница и будет вставка от яндекс, вот этот "кусок" нужно будет запомнить и сделать условие на проверку содержания этого "куска", и если есть - то удалять его.

У меня пока нет времени возиться с этим.
А за разумню сумму,Вы найдете время покопаться в данном вопросе
 
До недавнего времени пользовался шабом, сейчас отвалился..
C#:
Развернуть Свернуть Копировать
Выполнение действия CSharp OwnCode: Yandex SpeechKit Демо v2. Ошибка на стороне клиента. Код состояния: 400
78005

Вроде как поменялся адрес пост-запроса. Пробую вводить этот:
HTML:
Развернуть Свернуть Копировать
https://tts.api.cloud.yandex.net/speech/v1/tts:synthesize
Ошибка та же.. Может кто подскажет что нужно поправить?
 
Последнее редактирование:
друзья, у кого есть варианты как при помощи кубика POST сделать озвучку на яндекс? постоянно ловлю ошибку 400
 
Спасибо за шаблон.
У всех работает шаблон через прокси?
Мне выдаёт ошибку:
Выполнение действия CSharp OwnCode: Yandex SpeechKit Демо v2. Получен пустой ответ от HTTP-сервера 'cloud.yandex.ru'.
Пробовал разные прокси, в том числе мобильные.
 
Спасибо за шаблон!
Немного под свои нужны пвытаюсь его подправить, но не получается изза ошибки. Прошу помощи, уже сломал всю голову что не так в коде C#^
C#:
Развернуть Свернуть Копировать
    //сохраняем фаил
    if (!Directory.Exists(pathPholder+ @"\fact\")) Directory.CreateDirectory(pathPholder+ @"\fact\");
    File.WriteAllBytes(pathPholder+ @"\fact\project.Variables["voicename"].Value.ogg", dataBytes);
}

Что-то с синтезем написания переменной, но не могу понять что не так...
 
Спасибо за шаблон!
Немного под свои нужны пвытаюсь его подправить, но не получается изза ошибки. Прошу помощи, уже сломал всю голову что не так в коде C#^
C#:
Развернуть Свернуть Копировать
    //сохраняем фаил
    if (!Directory.Exists(pathPholder+ @"\fact\")) Directory.CreateDirectory(pathPholder+ @"\fact\");
    File.WriteAllBytes(pathPholder+ @"\fact\project.Variables["voicename"].Value.ogg", dataBytes);
}

Что-то с синтезем написания переменной, но не могу понять что не так...

Привет, а что именно нужно? Какая версия Zenno?
Как минимум вижу ошибку тут:

scr.jpg



Если нужно сохранить и подставить свою переменную, то можно так:
Если версия Zenno > 7.3.2.0
C#:
Развернуть Свернуть Копировать
File.WriteAllBytes($@"{pathPholder}\fact\{project.Variables["voicename"].Value}.ogg", dataBytes);

Если версия Zenno < 7.3.2.0
C#:
Развернуть Свернуть Копировать
 File.WriteAllBytes(pathPholder + @"\fact\" + project.Variables["voicename"].Value + ".ogg", dataBytes);
 
Последнее редактирование:
  • Спасибо
Реакции: mrstorm
Привет, а что именно нужно? Какая версия Zenno?
Как минимум вижу ошибку тут:

Посмотреть вложение 83403


Если нужно сохранить и подставить свою переменную, то можно так:
Если версия Zenno > 7.3.2.0
C#:
Развернуть Свернуть Копировать
File.WriteAllBytes($@"{pathPholder}\fact\{project.Variables["voicename"].Value}.ogg", dataBytes);

Если версия Zenno < 7.3.2.0
C#:
Развернуть Свернуть Копировать
 File.WriteAllBytes(pathPholder + @"\fact\" + project.Variables["voicename"].Value + ".ogg", dataBytes);
Спасибо! Все заработало как надо!
Суть задачи такая - при массовой обработки текста, сохранение почему то происходило не в той же последовательности по сравнению с текстовыми файлами, была перемешка. По этому переделал шаблон для того чтобы брался оотдельно каждый файл и обрабатывался. В дальнейшем уже будет маячек, по которому можно обрабатывать и текст и иметь соответствующий аудио файл.
 
Здравствуйте!
Спасибо вам за шаблон!
Не могли бы вы подсказать по такой ситуации.
Если озвучивать длинный текст, то полученный файл при проигрывании имеет полную длину (т.е. обработан весь текст). Но при этом длина файла: в видеоредакторах и проигрывателях определяется неправильно (т.е. время проигрывания последнего озвученного файла 06:27 http://joxi.ru/82Q49nvcVxWlym , а на шкале видеоредактора и конвертера 03:15 http://joxi.ru/5mdnLbeUazLNJA http://joxi.ru/52ae6jVSgzq8W2 ).
А в свойствах файла, его продолжительность и вовсе неизвестна http://joxi.ru/zANB9RvU890EnA
Как можно решить эту проблему?
Своих мозгов к сожалению не хватило (
 
Последнее редактирование:
Здравствуйте!
Спасибо вам за шаблон!
Не могли бы вы подсказать по такой ситуации.
Если озвучивать длинный текст, то полученный файл при проигрывании имеет полную длину (т.е. обработан весь текст). Но при этом длина файла: в видеоредакторах и проигрывателях определяется неправильно (т.е. время проигрывания последнего озвученного файла 06:27 http://joxi.ru/82Q49nvcVxWlym , а на шкале видеоредактора и конвертера 03:15 http://joxi.ru/5mdnLbeUazLNJA http://joxi.ru/52ae6jVSgzq8W2 ).
А в свойствах файла, его продолжительность и вовсе неизвестна http://joxi.ru/zANB9RvU890EnA
Как можно решить эту проблему?
Своих мозгов к сожалению не хватило (
А после конвертации файла, все корректно воспроизводится? Время тоже идет нормально или зависает время и звук идет далее?
 
  • Спасибо
Реакции: genic
А после конвертации файла, все корректно воспроизводится? Время тоже идет нормально или зависает время и звук идет далее?
Здравствуйте!
После конвертации звучит вторая половина текста. Как будто при конвертации файл перезаписывается.
Вот тут на облако загрузил текст на котором сейчас пробовал, оригинал озвучки ogg, и результат конвертации mp3 https://cloud.mail.ru/public/R21r/KkgY9Y88T
 
Здравствуйте!
После конвертации звучит вторая половина текста. Как будто при конвертации файл перезаписывается.
Вот тут на облако загрузил текст на котором сейчас пробовал, оригинал озвучки ogg, и результат конвертации mp3 https://cloud.mail.ru/public/R21r/KkgY9Y88T
Ну косяк в конвертации... У вас конвертируется вторая часть
 
  • Спасибо
Реакции: genic
Ну косяк в конвертации... У вас конвертируется вторая часть
Здравствуйте!
Действительно конвертер так себя ведет ( Попробовал онлайн конвертер, все в порядке.
Спасибо!
 
  • Спасибо
Реакции: Serjio Leone
Правильно я понял, что эта программа позволяет упрощённо использовать премиум голоса Yansdex Speachkit?
 
Правильно я понял, что эта программа позволяет упрощённо использовать премиум голоса Yansdex Speachkit?
Да, позволяет использовать голоса Yansdex Speachkit или голоса от Windows (если они установлены в вашей системе)
 
Здравствуйте прошу подскажите, вот я ввожу текст больше 500 символов для Yandex demo v2, а он выдает ошибку 400.
Если ввыдить текст до 500 символов, то вроде все сохраняется в аудиоформате + реклама яндекса иногд авставляется ааудио, ПОдскажите пожалуйста как то можно это обойти: может тип автоматически делить длинный текст на кусочки по 500, озвучивать последовательно а затем, все эти кусочки сшивать в единый аудифоайл.
ЧТо нужно в коде поменять дополнительно и можете ли вы это сделать? иль кто может даст API платный ключ Yandex speechkit?) озвучка яндекса самая приятная, мне для образовательных целей
 
Здравствуйте прошу подскажите, вот я ввожу текст больше 500 символов для Yandex demo v2, а он выдает ошибку 400.
Если ввыдить текст до 500 символов, то вроде все сохраняется в аудиоформате + реклама яндекса иногд авставляется ааудио, ПОдскажите пожалуйста как то можно это обойти: может тип автоматически делить длинный текст на кусочки по 500, озвучивать последовательно а затем, все эти кусочки сшивать в единый аудифоайл.
ЧТо нужно в коде поменять дополнительно и можете ли вы это сделать? иль кто может даст API платный ключ Yandex speechkit?) озвучка яндекса самая приятная, мне для образовательных целей
Доброго времени! Да можете разделить длинный текст на необходимое кол-во символов, а затем склеить все это например с помощью ffmpeg, или можете посмотреть как реализовано деление в кубике с API.

По поводу платного ключа API вряд ли кто-то вам его даст. Почему сами не создадите его? Не знаю как сейчас, но раньше при создании API ключа давали пробный период на 2 месяца.
 
Хорошая реализация, но есть проблема при обработке с помощью прокси. Возвращает ошибку. Немного посмотрел код, ошибка появляется в момент парсинга token, приходит пустое значение.

А пустое значение там, потому что ответ приходит в таком виде

C#:
Развернуть Свернуть Копировать
<!doctype html><html prefix="og: http://ogp.me/ns#">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
<title data-react-helmet="true">Ой!</title><meta data-react-helmet="true" property="og:title" content="Яндекс">
<meta data-react-helmet="true" property="og:description" content="Найдётся всё"></div>......

А должен приходить примерно в таком

C#:
Развернуть Свернуть Копировать
<!DOCTYPE html><html lang="ru-RU" class="desktop adaptive">
<head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<meta name="csrf-token" content="e72a2d6e3a0b9b226bc7cc1c56836d8f427aa54b:1653468912"/>
<link rel="icon" href="/favicon.ico" sizes="any"/>
<link rel="shortcut icon" href="/favicon.png" sizes="16x16"/>.....

Чтобы можно было спарсить вот этот токен <meta name="csrf-token" content="e72a2d6e3a0b9b226bc7cc1c56836d8f427aa54b:1653468912"/>.

Я глубоко не искал, но похоже есть проблема с преобразованием вида прокси из стандартного для zenno в вид для xnet. Прокси рабочие, на обычном get-запросе отрабатывают правильно. Ну и странно конечно, что приходят символы вида
content="Яндекс"> .
<meta data-react-helmet="true" property="og:description" content="Найдётся всё">.
Скорее всего просто кодировка слетела и надо добавить что-то типа request.CharacterSet = Encoding.GetEncoding("utf-8");
Но без прокси отрабатывает нормально.

Возможно в директивах using есть какая-то ошибка, связанная с
/// <summary>
/// Класс для прокси
/// </summary>
public class Proxys

Делал себе подобный проект, только на Leaf.xNet, там тоже работает хорошо, но я сразу указывал формат прокси в виде ip:port:login:password.

Вдруг кому-то пригодится, выше видел, что писали про эту ошибку.

p.s. Сменил кодировку ради интереса, действительно выдает - Нам очень жаль, но запросы с вашего устройства похожи на автоматические. Но через обычный гет-запрос из зеннопостера опять же работает. Странно это всё :-) И через Leaf.Xnet тоже работает.

p.p.s. Вобщем ради интереса еще поковырял этот xNet, видимо да, кривая библиотека, на форумах тоже про неё много нехорошего пишут, пользуйтесь Leaf.Xnet кому нужно. Самый простой способ проверить кривизну, это запустить код на 2ip ru. Там будет понятно работает ли прокси или нет. Вобщем вопрос можно закрывать :-) Кому нужно просто вместо xNet добавьте в Externals и в ссылки из GAC Leaf.xNet. Удалите везде xNet, чтобы не было конфликтов. Ну и немного код подправьте, например вместо request.Proxy = ProxyClient.Parse(ProxyType.Http..., нужно прописать request.Proxy = ProxyClient.Parse(ProxyType.HTTP.

Ну и еще по мелочи, смотря что вам нужно, например тот же трим и парсинг token можно и стандартными экшенами делать, чтобы потом не искать где ошибка в коде. Да вобщем то и get и post запрос тоже можно стандартными экшенами сделать ))
 
Последнее редактирование:
  • Спасибо
Реакции: nrg8601 и Serjio Leone
Кстати еще ошибка 400 может возникать у тех, кто использует голос Оксана, она больше не поддерживается.

Голоса oksana и alena созданы на основе записей одного диктора. Голос oksana больше не представлен в списке поддерживаемых голосов, однако он доступен для старых проектов. Для новых проектов используйте поддерживаемые голоса.
 
  • Спасибо
Реакции: Serjio Leone
Хорошая реализация, но есть проблема при обработке с помощью прокси. Возвращает ошибку. Немного посмотрел код, ошибка появляется в момент парсинга token, приходит пустое значение.

А пустое значение там, потому что ответ приходит в таком виде

C#:
Развернуть Свернуть Копировать
<!doctype html><html prefix="og: http://ogp.me/ns#">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
<title data-react-helmet="true">Ой!</title><meta data-react-helmet="true" property="og:title" content="Яндекс">
<meta data-react-helmet="true" property="og:description" content="Найдётся всё"></div>......

А должен приходить примерно в таком

C#:
Развернуть Свернуть Копировать
<!DOCTYPE html><html lang="ru-RU" class="desktop adaptive">
<head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<meta name="csrf-token" content="e72a2d6e3a0b9b226bc7cc1c56836d8f427aa54b:1653468912"/>
<link rel="icon" href="/favicon.ico" sizes="any"/>
<link rel="shortcut icon" href="/favicon.png" sizes="16x16"/>.....

Чтобы можно было спарсить вот этот токен <meta name="csrf-token" content="e72a2d6e3a0b9b226bc7cc1c56836d8f427aa54b:1653468912"/>.

Я глубоко не искал, но похоже есть проблема с преобразованием вида прокси из стандартного для zenno в вид для xnet. Прокси рабочие, на обычном get-запросе отрабатывают правильно. Ну и странно конечно, что приходят символы вида
content="Яндекс"> .
<meta data-react-helmet="true" property="og:description" content="Найдётся всё">.
Скорее всего просто кодировка слетела и надо добавить что-то типа request.CharacterSet = Encoding.GetEncoding("utf-8");
Но без прокси отрабатывает нормально.

Возможно в директивах using есть какая-то ошибка, связанная с
/// <summary>
/// Класс для прокси
/// </summary>
public class Proxys

Делал себе подобный проект, только на Leaf.xNet, там тоже работает хорошо, но я сразу указывал формат прокси в виде ip:port:login:password.

Вдруг кому-то пригодится, выше видел, что писали про эту ошибку.

p.s. Сменил кодировку ради интереса, действительно выдает - Нам очень жаль, но запросы с вашего устройства похожи на автоматические. Но через обычный гет-запрос из зеннопостера опять же работает. Странно это всё :-) И через Leaf.Xnet тоже работает.

p.p.s. Вобщем ради интереса еще поковырял этот xNet, видимо да, кривая библиотека, на форумах тоже про неё много нехорошего пишут, пользуйтесь Leaf.Xnet кому нужно. Самый простой способ проверить кривизну, это запустить код на 2ip ru. Там будет понятно работает ли прокси или нет. Вобщем вопрос можно закрывать :-) Кому нужно просто вместо xNet добавьте в Externals и в ссылки из GAC Leaf.xNet. Удалите везде xNet, чтобы не было конфликтов. Ну и немного код подправьте, например вместо request.Proxy = ProxyClient.Parse(ProxyType.Http..., нужно прописать request.Proxy = ProxyClient.Parse(ProxyType.HTTP.

Ну и еще по мелочи, смотря что вам нужно, например тот же трим и парсинг token можно и стандартными экшенами делать, чтобы потом не искать где ошибка в коде. Да вобщем то и get и post запрос тоже можно стандартными экшенами сделать ))
Когда писал этот шаблон, тестировал с прокси, вроде все норм было. Сейчас, возможно, уже что-то поменялось...
Ну и да xNet - уже сильно устарел, сейчас я бы его уже не использовал...

А так спасибо, полезная информация. :ay:
 
  • Спасибо
Реакции: stmult
Кстати, если кто-то занимается генерацией подобных видео, было бы интересно узнать , каким способом вы ловите фразы от яндекса типа - видео сгенерировано с помощью Яндекс спич кит и там еще есть несколько подобных фраз. Я делаю каждый звуковой файл около 300 символов, это примерно 7-8 секунд, затем измеряю его длину в миллисекундах и делаю в этом месте слайд с помощью ffmpeg (там есть возможность вставлять по миллисекундам изображение в нужном месте). Поэтому мне в этом плане демо версия идеально подходит, чтобы знать где и какое изображение при генерации видео должно быть.

Я пробовал переводить аудио файлы в редактируемый вид, но всё равно не смог подобрать нужный кусок, чтобы потом как-то с ним работать. Пробовал считать количество слов и символов, а потом считать общую длину аудио в миллисекундах. Получалось более или менее , но иногда были сбои. Но в принципе можно вычислить среднестатистическое количество символов и длину аудио. Потом делить длину аудио на количество символов и если значение отклоняется от нормы, тогда высока вероятность, что добавлен текст от яндекса.

В итоге сейчас использую вариант с генерацией видео на прокси. Делаю запрос от первого прокси, потом от второго и если длина отличается, значит добавлен текст. Но можно попробовать и с одного прокси например 3 раза подряд сгенерировать аудио и брать самое короткое. 3 раза подряд яндекс не накладывает свою рекламу. Потом берем следующий текст и новую прокси.

Будет интересно, если кто-то поделится более стабильным вариантом.
 
Кстати, если кто-то занимается генерацией подобных видео, было бы интересно узнать , каким способом вы ловите фразы от яндекса типа - видео сгенерировано с помощью Яндекс спич кит и там еще есть несколько подобных фраз. Я делаю каждый звуковой файл около 300 символов, это примерно 7-8 секунд, затем измеряю его длину в миллисекундах и делаю в этом месте слайд с помощью ffmpeg (там есть возможность вставлять по миллисекундам изображение в нужном месте). Поэтому мне в этом плане демо версия идеально подходит, чтобы знать где и какое изображение при генерации видео должно быть.

Я пробовал переводить аудио файлы в редактируемый вид, но всё равно не смог подобрать нужный кусок, чтобы потом как-то с ним работать. Пробовал считать количество слов и символов, а потом считать общую длину аудио в миллисекундах. Получалось более или менее , но иногда были сбои. Но в принципе можно вычислить среднестатистическое количество символов и длину аудио. Потом делить длину аудио на количество символов и если значение отклоняется от нормы, тогда высока вероятность, что добавлен текст от яндекса.

В итоге сейчас использую вариант с генерацией видео на прокси. Делаю запрос от первого прокси, потом от второго и если длина отличается, значит добавлен текст. Но можно попробовать и с одного прокси например 3 раза подряд сгенерировать аудио и брать самое короткое. 3 раза подряд яндекс не накладывает свою рекламу. Потом берем следующий текст и новую прокси.

Будет интересно, если кто-то поделится более стабильным вариантом.
То же делаю несколько озвучек и выбираю самую короткую, но было бы интересно найти какое-то менее замороченное решение вопроса (кроме покупки токена для спичкита конечно же )
 
Приветствую! Спасибо огромное за шаблон, адаптировал под свои нужды. Только никак не могу найти кряк под Speechtogo по сети. Видел, что автор писал, что у него есть, но не могу почему-то тут в личку писать
 
доброго времени суток,а как сохранить файл в формате WAV ?
 
Всем привет. Вопрос не совсем в тему, но тоже интересно: У меня стоит задача — подбирать максимально точные ответы на вопросы пользователей, с помощью программы. ТС, какую нейронную сеть порекомендуете для этого?
 
Всем привет. Вопрос не совсем в тему, но тоже интересно: У меня стоит задача — подбирать максимально точные ответы на вопросы пользователей, с помощью программы. ТС, какую нейронную сеть порекомендуете для этого?
Привет, с нейро сетью особо не работал, поэтому тут не могу подсказать. Но в свое время для подобной задачи использовал Dialogflow от гугла. Уверен что есть более интересные инструменты для этого, либо писать самому нейросеть)
Если найдешь что-то интересное, дай знать.
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)