반응형



품명  

New Pro Mini atmega328 Board 5V 16M Replace ATmega128 For Arduino Compatible Nano


링크 (다른 판매자)

 

http://bit.ly/AliexpressArduinoProMini


가격  

$1.62


배송 방법  

China Post Ordinary Small Packet Plus


배송 비용  

$0.00


배송 소요 기간  

40일




업로드를 하기 위해서는 FT232어뎁터가 필요함

http://limecolor.tistory.com/entry/AliexpressFT232RL-TTL-Serial-Adapter


ㄱ자로 꺽인 핀을 납땜해서 브레드보드를 사용해 컴퓨터로 연결하였는데

그냥 핀을 안 붙이고 어뎁터를 구멍에 걸치고 업로드하는 방법도 있음


테스트로 업로드 할 때 실수로 보드 선택을 nano로 했는데 문제없이 잘 동작했다...



장점은... 작고 정말 저렴하다!

아무래도 편하기는 나노가 좀더... 마이크로는 조금 다른 애고...



반응형
반응형

쭉 사용하면서 발생한 문제들을 정리와 해결(땜빵...)






===== 2017-05-27 확인 =====

괄호 생략 문제



(테스트)

입력을 했더니

responseCode:500 {"errorMessage":"Internal server errors","errorCode":"VS99"}

서버 에러가 발생

네이버 번역기에서도 마찬가지로 에러 발생



1(테스트)2

로 테스트를 했더니 중간은 무시하고 십이 로만 결과가 나옴


1. 네이버 TTS는 괄호 안에 들어있는 내용은 음성 출력을 안함


(테스트)의 경우 괄호를 무시했더니 아무것도 출력 할 내용이 없어서 서버 에러로 출력한 것으로 보임



해결(땜빵)

replace("(", "");


...


괄호를 부수어서 출력이 되도록 변경


알라딘 ebook앱에도 괄호 안 내용은 생략하기 기능이 있는데

개인적으로는 생략할 이유가 없기에 무조건 다 출력하는 방법으로 충분함

만약 생략을 하고 싶으면 TTS서버에 전송하기 전에 괄호를 빼면 내용이 남는게 있는지 검증을 한 후에

서버에 요청을 하면 될것으로 생각









===== 2017-05-27 확인 =====

일본어 장음 히라+가타카나 조합 문제



膝がァァァ

라는 소설의 구절에서 서버 에러가 발생

네이버 번역기에서도 마찬가지로 에러 발생



膝が

ァァァ

두개를 분리해 보니 ァァァ에서 에러가 발생



がぁぁぁ

ガァァァ

둘다 정상적으로 출력



ァ이 붙으면 앞의 글자에 따라

サァ - 사아-

タァ - 타아-

カァ - 카아-

ハァ - 하아-


같이 길게 발음이 되어야 하는데


膝がァァァ의 상황에서

형태소 보고 ァ의 앞글자가 히라가나인걸 보고 膝が와 ァァァ를 별도로 보고

부모 없이 ァァァ --- 장음 소리를 만들어야 해서 에러가 나온것으로 추정


일단은 이번 땜빵은 좀 애매한데 

1.가타카나를 전부 히라가나로 바꾸거나...

예문 내용은 '무릎ㅇㅣㅣㅣ!' 같은 소리지르는 부분인데

일본어로 히자ㄱㅏㅏㅏ  가 되어야 정상


전부 히라가나로 바꾸면 히자가 가 되어버리고

전부 가타카나로 바꾸면 저 문장은 히자ㄱㅏㅏㅏ 같이 잘 나오지만

다른 문장에서의 부작용이 너무 큼

사실 가타카나->히라가나도 부작용이 있음



1.장음 앞을 변경


아직 테스트해보지 않고 지금 글로 정리하면서 떠오른 거지만

replace("がァ", "ガァ"); 같이 바꾸어 주는것도 방법일것 같다.

물론 아카사타 등등 * 아이우에오로 가짓수가 꽤 많을것 같지만...








부족한 쿼리 제한

사실 문제는 아니지만 원래 TTS 엔진으로 만들려고 한

개인적인 이유는 소설책을 읽기 위함이였는데

소설을 읽기에는 쿼리량이 너무 적어서 한 챕터를 다 못 읽고 제한이 걸려버린다...ㅠㅠ


그렇다고 개인에게는 제휴로 쿼리 제한이 풀리지도 않을것 같고...



반응형
반응형


English

Hello. Nice to meet you

Japanese

初めまして。どうぞよろしく。

Chinese

您好,见到您很高兴。

Korean

안녕하세요. 만나서 반가워요



어느게 더 좋다는 취향의 차이도 있겠지만

네이버의 소리가 훨씬 자연스럽다.

대신 구글쪽 소리는 각이 진? 느낌의 소리지만 명확히 들려 잘 알아듣는게 많은 것 같다.(일본어 기준)


무엇보다의 차이는 구글의 안드로이드 TTS는 오프라인으로의 재생이 가능해

네이버보다 빠를 수 밖에 없다. 데이터 요금도 걱정되고...

그리고 네이버 Clova api에서는 웨일 브라우저에서 제공하는 kyuri의 음성을 제공하지 않는게 가장 아쉬운점




Google TTS from Android

https://play.google.com/store/apps/details?id=com.google.android.tts


Naver Clova

https://developers.naver.com/docs/labs/tts/

반응형
반응형

네이버 TTS api에는 한국어, 영어, 일본어, 중국어를 지원



CheckVoiceData클래스와

onIsLanguageAvailable(String lang, String country, String variant) 에서 지원 언어를 추가해 준 후




request에 있는 언어 정보로 speaker를 변경

(남자는 무시한다.)





이제 정말로 끝! 이라고 생각했는데

이때까지는 yuri로 일본어만을 테스트 하였는데

한국어로 변경하니 고음이 발생하였다.


...


분명 저음이 나오는 경우가 있었는데...





일본어와 영어는 24000Hz로 출력이 되는데

한국어와 중국어는 16000Hz로 출력이 됨



역시 간단히 분기해서 별도로 초기화 하도록 변경하고 끝




******

솔직히 네이버 TTS api의 영어, 일본어는 정말 좋은데

한국어는 좀... 별로다

음질도 좀 아쉽고 발음이 꼭 수능의 국어 듣기 시간처럼 너무 정확하지만 재미가 없다

(네이버 TTS가 처음 나왔을 때 사전 발음 듣기로 나왔던 걸로 기억으로하는데 아무래도 정확한 발음에 초점을 맞춘듯 하다)


한국어 중국어는 버젼1 같은 느낌이고

일본어 영어는 더 발젼된 형태로 개발된 느낌이다


추가로 네이버의 웨일 브라우저의 내장 TTS의 음성은 mijin의 음성이 아니라

훨씬 발전된 형태의 음성이 나온다.



지금 다시 확인해보니 중국어도 24000Hz였다.... 그사이 업데이트 된건가?

******


반응형
반응형



애써 눈을 돌렸지만 네이버 TTS api의 mp3를 디코딩을 해야 하므로




mp3spi(LGPL)을 사용해서 디코딩 하기로





네이버 TTS api에서 데이터를 받아 오는건 정말 예제 그대로 사용



그리고 디코딩...



끝!


역시나 삽질을 좀 했지만 생각보다 빨리 끝났다.






반응형
반응형


먼저 네이버api로 데이터를 받아서 바로 콜백으로 적어주면 될 줄 알았는데

api에서 제공해주는 데이터는 mp3로밖에 출력이 안되는걸 발견

mp3는 암축되어있기에 바로 사용하지 못하고 디코딩 하는 과정이 필요함


...


일단 출력이 정말 제대로 되는지를 먼저 테스트하기로 하고

컴퓨터에서 수동으로 wav로 변환하고 raw에 넣고 그 파일로 음성을 출력 해 보기로




(이전 코드를 정확히 복원하지 못해서 이런 형태로...)

(callback.audioAvailable()에 write함)




...



사운드가 나오고 확실히 뭔가의 단어를 말하고는 있는데

괴상한 사운드가 나온다.


일단 하나씩 문제를 해결하기 위해

테스트에 사용한 음성 파일부터 다시 살펴보았다.




16bit 24000Hz mono인데




16000hz로 초기화를 하고 있었음


낮은 음정으로 재생되는 문제 해결





생각해보니 wav파일을 그대로 사용하고 있었음


파일의 헤더부분을 스킵하고 출력함


재생 초기에 탓 하고 이상한 소리가 들리는 문제 해결




마지막으로 큰 문제는 음성이 중간중간 끊어지는 문제가 발생

ㅌ'ㅔ'ㅅ'ㅡ'ㅌ'ㅡ 같은 느낌으로 음이 끊겨서 들림


다행히 스택오버 플로우에 같은 현상에 대한 답변이 있었고

24000hz이하면 *2 mono면 *2로 건너 띄면서 파일을 읽어야만 했다.



음성 재생중에 툭툭 끊기는 문제 해결





일단 출력 부분은 이걸로 형태를 다 잡았다.







반응형
반응형

안드로이드 TTS에 대해 검색해도 보통 앱에서 글자를 읽어주는걸 설명하지 엔진 만드는거에 대한 자료는 적었다.


https://android.googlesource.com/platform/development/+/master/samples/TtsEngine/src/com/example/android/ttsengine/RobotSpeakTtsService.java



그러다 구글 샘플을 발견!

sdk14버젼의 샘플이지만 개인적으로 충분하기에 바로 코드를 살펴보기로



지원 언어에 대한 반환을 하고...



사실상 이 함수 하나가 핵심이고 끝 (앱의 99%)


콜백으로 텍스트가 오면 이 샘플이 글자마자 주파수로 버퍼에 적어주기만 하고 있는,

실제로 돌려보지 않아도 정말 로봇같은... 아니 r2d2보다 수준 낮아보이는 사운드가 나올 거라는 상상이 들게하는 샘플이지만

그만큼 정말 단순하고 알기 쉬운 샘플!






다음은 네이버쪽을 조사



그냥 복사해서 붙여넣기만 해도 바로 되는 정말 친절한 샘플 코드와

몇가지 변수에 대한 rest api정보 설명


api이름이 Clova로 변경되어서 TTS api가 어디있지? 하고 찾았던게 가장 어려웠던 일이였을 정도





너무 쉽게 일이 풀려서 오히려 당활할 정도...

그리고...


3편에?





반응형
반응형

개인적으로 눈이 불편하다보니 핸드폰으로 글을 읽을 때에는 TTS기능을 사용하길 좋아합니다.




일본의 웹소설도 즐겨 보기에 인코딩이나 언어설정을 좀 편하게 앱을 만들기도 하고

https://play.google.com/store/apps/details?id=com.limecolor.ttstxtreader&hl=ko

(개인적으로 사용하기 위해 만들다 보니 메모리와 버그들이 많지만...)


알X딘에서 구입한 책도 거의 TTS로만 읽고 있습니다.




 안드로이드의 구글 TTS의 발음은 정말 좋습니다.

하지만 네이버의 일본어 발음은 정말 좋았습니다.

http://limecolor.tistory.com/entry/%EA%B5%AC%EA%B8%80-%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EB%84%A4%EC%9D%B4%EB%B2%84-Clova-TTS-%EB%B9%84%EA%B5%90


인터넷이 안되면 사용을 못한다는 약점이 있지만

네이버의 api를 사용해서 텍스트를 들을 수 있도록 TTS엔진으로 만들려고 합니다.



(유진님 수진님 민준님에게는 죄송하지만 구글의 발음을 선호합니다.)


반응형

+ Recent posts