Text to speach - как заставить ардуино говорить

axill
Offline
Зарегистрирован: 05.09.2011

есть такая классная примочка на гугле - пример воспроизведения на русском "доброе утро" http://translate.google.com/translate_tts?tl=ru&q=доброе утро

судя по всему возвращаетмя поток содержащий mp3 звук

вот интересно как mp3 упаковано? если взять ардуино с ethernet шилдом и с mp3 шилдом что нужно запрограмировать, чтобы воспроизвести вразу с гугла в динамик?

если такая штука получится то можно в комнатах ставить устройства воспроизведенич любых фраз на любом языке

есть идеи? как мог бы выглядеть пограммный код такой ардуины? я пока не получил mp3 шилд, поэтому не могу попробовать методом тыка. открывают URL и получаю TCP stream или  UDP stream? потом побайтно его запихиваю в mp3 шилд?

шилд купил такой http://dx.com/p/sd-card-mp3-music-shield-audio-expansion-board-white-171917

Клапауций
Offline
Зарегистрирован: 10.02.2013

axill пишет:
судя по всему возвращаетмя поток содержащий mp3 звук

вот интересно как mp3 упаковано? если взять ардуино с ethernet шилдом и с mp3 шилдом что нужно запрограмировать, чтобы воспроизвести вразу с гугла в динамик?

Если открыть вашу ссылку Хромом и сохранить файлег, то можно посмотреть ега свойства.

axill пишет:
если такая штука получится то можно в комнатах ставить устройства воспроизведенич любых фраз на любом языке

Не только воспроизведения, но и распознования и перевода.

axill пишет:
есть идеи? как мог бы выглядеть пограммный код такой ардуины?

Идея чисто абстрактная - сохранять локально файлег по запросу и воспроизводить его... не важно чем.

зы

Для лучшего понимания, куда народ это прикручивает

http://habrahabr.ru/post/129936/

http://habrahabr.ru/post/133782/

axill
Offline
Зарегистрирован: 05.09.2011

Клапауций пишет:

Если открыть вашу ссылку Хромом и сохранить файлег, то можно посмотреть ега свойства.

да, сохраняет обычный mp3

Цитата:
Не только воспроизведения, но и распознования и перевода.

спасибо за ссылке ниже, да, распознование будет в плюс.

Цитата:
Идея чисто абстрактная - сохранять локально файлег по запросу и воспроизводить его... не важно чем.

файл я думаю лишний - можно сразу считывать поток с ethernet шилда и отправлять поток на music шилд

мне пока не ясно как это програмировать на ардуине. Считать текстовый заголовок HTTP, а потом после новой строки все байты будут потоком mp3? т.е. примерно так?

- открываем TCP соединение на translate.goolge.com порт 80

- формируем клиентом заголовок по стандарту HTTP и там же указываем нужную нам ссылку на воспроизведение голоса

- ждем входящих данных, считываем несколько строк пришедшего заголовка HTTP, как только считаем пустую строку переключаемся на передачу бинарных данных на musci шилд и в цикле передаем все байты без остатка на  music шилд до исчерпания потока.

 

leshak
Offline
Зарегистрирован: 29.09.2011

axill пишет:

- формируем клиентом заголовок по стандарту HTTP и там же указываем нужную нам ссылку на воспроизведение голоса

Да, думаю имено так и есть.

Вот, смотрите как со стороны сервера выглядит отправка файла в браузер по http  (C#)

 public void ProcessRequest(HttpContext context)
        {
      
            var outFileName = GetOutFileName(context);
            var outputPdf = GetPdfStream(context); // generate PDF
            
            

            var response = context.Response;
            

            response.ContentType = "application/pdf";
            if (context.Request[DOWNLOAD_PARAM_NAME] == "true")
            {
                response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", outFileName)); // start download      
            }
            else
            {
                response.AddHeader("Content-Disposition", string.Format("inline;filename={0}", outFileName));     // view in browser
            }
          
            

            outputPdf.Seek(0, SeekOrigin.Begin);
            outputPdf.CopyTo(context.Response.OutputStream);

        }

Тут я правда отправляю, не mp3, а PDF, но суть, думаю та же самая.

Главное - отправил Content-Disposition заголовок и правильный ContentType

А потому тупо копирую бинарные данные файла в выходной поток ответа.

Не вникал, есть вероятность, что потом еще сам сервер этот поток в base64 энкодит, но не уверен. Возможно отправляет "как есть".

А вообщем-то можно особо не гадать, а просто взять вот такую тулзу Fiddler - The Free Web Debugging Proxy by Telerik и просто посмотреть что там бегает между браузером и сервисом гугла.

axill
Offline
Зарегистрирован: 05.09.2011

leshak пишет:

А вообщем-то можно особо не гадать, а просто взять вот такую тулзу Fiddler - The Free Web Debugging Proxy by Telerik и просто посмотреть что там бегает между браузером и сервисом гугла.

спасибо за ссылку - запустил, посомтрел, судя по всему там бинарный поток с mp3, нет кодирования

вот как выглядит заголовок и начало сообщения

HTTP/1.1 200 OK
Date: Tue, 21 May 2013 10:24:24 GMT
Expires: Tue, 21 May 2013 10:24:24 GMT
Cache-Control: private, max-age=86400
Content-Type: audio/mpeg
X-Content-Type-Options: nosniff
Server: HTTP server (unknown)
Content-Length: 7628
X-XSS-Protection: 1; mode=block

@H@f$H
\Y
ߣ8C'1-yxQ	GN3"Ǎ#jnI"|?/Ab
8B[%+,
P͑

*** FIDDLER

 

Клапауций
Offline
Зарегистрирован: 10.02.2013

axill пишет:
файл я думаю лишний - можно сразу считывать поток с ethernet шилда и отправлять поток на music шилд

Я бы кешировал фразы постоянного употребления - просто так, в случае отвала инета получить хотя бы минимальный функционал. Да и помнить нужно, что у этой гугловской тузлы есть лимит на количество запросов за единицу времени, как то захотел сохранить файлегов произношения частотного словаря, создал плейлист для фубара на две тысячи слов и сказал "Copy to...", после двухсотого сохранённого файла получил бан по IP, на страничке-заглушке было сказано, что негоже вести себя так активно. 

axill
Offline
Зарегистрирован: 05.09.2011

Клапауций пишет:

axill пишет:
файл я думаю лишний - можно сразу считывать поток с ethernet шилда и отправлять поток на music шилд

Я бы кешировал фразы постоянного употребления - просто так, в случае отвала инета получить хотя бы минимальный функционал. Да и помнить нужно, что у этой гугловской тузлы есть лимит на количество запросов за единицу времени, как то захотел сохранить файлегов произношения частотного словаря, создал плейлист для фубара на две тысячи слов и сказал "Copy to...", после двухсотого сохранённого файла получил бан по IP, на страничке-заглушке было сказано, что негоже вести себя так активно. 

хорошая идея))) я не думаю что десяток запросов в час даст бан, умному дому больше не нужно, но кэшировать дейсвтительно можно было бы. теоретически можно сделать какое-то центрально устройство которое будет это все кэшировать. начать надо с простого

смотрю в сторону чипов VS1053 - они имеют SPI интерфейс и умеют декодировать mp3, что-то типа такого и стоит на music шилде

Geronimo
Offline
Зарегистрирован: 06.05.2013

Насколько я знаю там есть слот для сд карты, залить туда мп3 и не терзать гугл...

или события динамически генерятся?

axill
Offline
Зарегистрирован: 05.09.2011

Geronimo пишет:

Насколько я знаю там есть слот для сд карты, залить туда мп3 и не терзать гугл...

или события динамически генерятся?

может быть по разному, хочется универсальности

leshak
Offline
Зарегистрирован: 29.09.2011

axill пишет:

Geronimo пишет:

Насколько я знаю там есть слот для сд карты, залить туда мп3 и не терзать гугл...

или события динамически генерятся?

может быть по разному, хочется универсальности

Забейте. Оверинжиниринг - одна из самых распространенных и вредных болезней. Ну то есть "универсальность" - это хорошо, но все время нужно себя сдерживать в этом :) Тем паче в контроллерах. Где ресурсов мало. И "жесткие костыли" намного чаще чем на PC являются более приемлемым решением.

А SD/MP3 - все одно осваивать нужно будет. Начинать же с чего-то нужно. И первые тесты делать на готовых MP3 шках - будет самым мудрым решением. Самый быстрый способ услышать как "ардуина заговорила".

Тем более что mp3 плеер, если память не изменяет, есть в семплах от производителя этого шилда. Можно его брать за базу, и потом его курочить пытатся заставить играть "из сети", а не "с SD"

axill
Offline
Зарегистрирован: 05.09.2011

leshak пишет:

Забейте. Оверинжиниринг - одна из самых распространенных и вредных болезней. Ну то есть "универсальность" - это хорошо, но все время нужно себя сдерживать в этом :) Тем паче в контроллерах. Где ресурсов мало. И "жесткие костыли" намного чаще чем на PC являются более приемлемым решением.

А SD/MP3 - все одно осваивать нужно будет. Начинать же с чего-то нужно. И первые тесты делать на готовых MP3 шках - будет самым мудрым решением. Самый быстрый способ услышать как "ардуина заговорила".

Тем более что mp3 плеер, если память не изменяет, есть в семплах от производителя этого шилда. Можно его брать за базу, и потом его курочить пытатся заставить играть "из сети", а не "с SD"

как посмотреть)) воспроизведение хотя бы чего то не интересно - можно wav  без шилда сделать. интересен именно минимальный интеллект - например динамические сообщения. и тут как раз наоборот наворачивания кэширования - сильно усложнение! а прикрутить ethernet к mp3 и перекидывать байты оттуда туда дело должно быть не хитрое

leshak
Offline
Зарегистрирован: 29.09.2011

waw - да. mp3 - а тут вам шилд нужен будет и разбиратся с ним. а тут первым шагом - в любом случае будет воспроизведение фиксированного mp3

Да банально - ну вот собрали вы. И не работает. То ли c ethernet не верно работает, то ли в шилд не так шлете - не ведомо.

А так хотя бы уже знаете "mp3 я играть умеют", теперь задача "как играть его из другого источника".

Вообщем, все-таки очередность задачь идет

1. Играть mp3
2. Играть из своего источника

И, могу ошибатся, но не факт что "дело не хитрое" окажется не хитрым. Давно с ним копался, но что-то смутно маячит в памяти, что и с SD карты он играл треки - напрямую. То есть чипу говорится "играй вот такой сектор", а он сам обращается/читает SD карту. Не через ардуино прогоняя поток.

Так что еще нужно будет разобратся как в него поток подать. И сам чип много чего умеет, но вот на некоторых шилдах китаезы далеко не все его ноги разводят и часть функций/интерфейсов - не доступна (я при работе с Midi с этим столкнулся).

Так что скорее всего все у вас должно получится, скорее всего я в пугалки играю, но "никогда не говори..." ;)

leshak
Offline
Зарегистрирован: 29.09.2011

leshak пишет:

Так что скорее всего все у вас должно получится, скорее всего я в пугалки играю, но "никогда не говори..." ;)

Так и вышло. Похоже зря пугал

Вот примерчик

http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Dev/Arduino/Shields/MP3_Shield_Example.zip

Играет MP3 не с SD карты, а из массива в памяти дуины.

Ну значит, осталось только, через Ethernet заполнить этот массив потоком из http response

axill
Offline
Зарегистрирован: 05.09.2011

leshak пишет:

Ну значит, осталось только, через Ethernet заполнить этот массив потоком из http response

спасибо за пример, придет шилд попробую

если пойдет то куплкю голые vs1053 - можно будет сделать кастомное устройство