roboforum.ru

Технический форум по робототехнике.

Говорилка для AVR

Re: Говорилка для AVR

_kp » 03 апр 2009, 15:58

мне надо чтобы кто-нибудь объяснил назначения фонем в массиве
например, понятно что "sound_E" в массиве - это гласная "Е"
а вот какую букву этот массив воспроизводит - вообще не понятно:


В массивах sound_xx хранятся не фонемы а звуковые фрагменты частей фонемы, где первая цифра длина, а далее битовый массив.
А вот фонема Е описывается так:
uint16_t PROGMEM f_E []={ fonem(snd_E, 6)+Stop }; //(snd_E индекс для sound_E)
Описывает, что надо sound_E воспроизвести 6 раз с паузой между семплами FonTime. Пауза между битами BitTime.
Буква Е использует только один звуковой фрагмент, в согласных же их обычно несколько.

При использовании флешки такое сжатие, конечно можно и даже нужно выбросить, для повышения качества. И просто записать набор фонем отдельными целиковыми семплами.
А вот как записать словарь фонем, я к сожалению не знаю. Готовый бы где взять.

Re: Говорилка для AVR

ZIV » 21 апр 2009, 21:15

Я плохо пока еще разбираюсь в МК и программировании... Подскажите как это засунуть в мой проект, созданный в CVAVR?

Re: Говорилка для AVR

ZIV » 22 апр 2009, 17:18

помогите разобраться, пожалуйста(

Re: Говорилка для AVR

galex1981 » 22 апр 2009, 17:28

Уточни пожалуйста что значит твой проект и куда что ты хочешь "засовывать"?

Re: Говорилка для AVR

ZIV » 22 апр 2009, 17:30

У меня в CVAVR создана простая программа для робота, и я хочу добавить ему возможность говорить...

Re: Говорилка для AVR

EdGull » 22 апр 2009, 19:57

а что мешает, религия?

Re: Говорилка для AVR

ZIV » 22 апр 2009, 20:04

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

Re: Говорилка для AVR

EdGull » 22 апр 2009, 20:11

ну для начала нужно распаковать архив

Re: Говорилка для AVR

ZIV » 22 апр 2009, 20:18

издеваетесь??... Может быть, я и нуб... но до этого я как то сам догадался...

Re: Говорилка для AVR

EdGull » 22 апр 2009, 20:19

т.е. у тебя архив в архиве?

Re: Говорилка для AVR

ZIV » 22 апр 2009, 20:24

вообщем я имею файлы из архива:
_MAKE.BAT
_SP12DEV
_sp12rc
COMPILER.H
m8515_prog.BAT
MAIN.C
MAKEFILE
project.elf
project.hex
SP_NUMB.C
Speaker2.c
speaker4.DSN
Speaker.h
uart_out.c
что дальше??

Re: Говорилка для AVR

ALHIMIK » 22 апр 2009, 20:26

Ctrl + C Ctrl V ? :crazy:

Re: Говорилка для AVR

ZIV » 22 апр 2009, 20:28

что именно и куда скопипастить?

Re: Говорилка для AVR

galex1981 » 22 апр 2009, 23:59

все *.c и *.h - исходники

Re: Говорилка для AVR

_kp » 27 апр 2009, 11:48

Для начинающих:

В проэкте используется компилятор gcc-avr (winavr).
Начинающим, мое мнение, лучше им и пользоваться. Хоть по началу не самый простой, но самый мощный, и более соответствующий стаднартам.
Сам им и пользуюсь в связке со средой разработки eclipse.
makefile - это и есть файл проэкта.
speaker4.DSN - документ эмулятора Proteus, в котором все это можно запустить и послушать, без реального железа.

Но, при желании перенести проэкт под другой компилятор, или другой процессор нужно:
Добавить в свой проэкт файлы "Speaker2.c" и "Speaker.h", а пример использования посмотреть в "main.c".


1. Удалить в Speaker2.c строки:
#include "avr/io.h"
#include "avr/pgmspace.h"
И заменить на свои файлы каксающиеся периферии процессора, например:
#include <iom8.h>


2. Заменить атрибуты PROGMEM на атрибуты, указывающие размещение данных во флэш.
Например:
/*gcc-avr */ uint8_t PROGMEM sound_A []={( 46), 0xE1,0xC3,0xE1,0xC7,0x8F,0x0F };
/* ICCAVR */ flash unsigned char sound_A []={( 46), 0xE1,0xC3,0xE1,0xC7,0x8F,0x0F };
/*чистый с */ const uint8_t sound_A []={( 46), 0xE1,0xC3,0xE1,0xC7,0x8F,0x0F };


3. Заменить макросы pgm_read_byte и pgm_read_word на нормальное обращение к данным.
Например:
/*gcc-avr */ uint16_t FW=pgm_read_word(pFonem);
/*чистый с */ uint16_t FW=pFonem*;

/*gcc-avr */ Result.Addr=pgm_read_word( &snd_list[SndCode] );
/*чистый с */ Result.Addr=snd_list[SndCode];

4. Для отсчета задержек используется переменная F_CPU.
У меня она передаётся из makefile. Но можно и прямо в файле "Speaker2.c" переопределить её значение.
Сама задержка у меня генерируется ассемлерной вставкой:
#define delay_us(Time_uS)
При другом компиляторе или другом процессоре нужно изменить её.

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

А вообще, в конечном устройстве задержки лучше обрабатывать через таймер.
Предоставленный же здесь пример - чисто дидактический, без всего лишнего.


5. Если не нужен, отладочный вывод, выкидаваем строку:
#include "stdio.h"
и закоментируем все printf/putchar.

Добавлено спустя 4 минуты 50 секунд:
Для русских букв в проэкте используется кодировка CP866(DOS).
Если удобнее работать с символами в кодировке Windows-1251, то для этого варириата
выкладываю изменённый файл "Speaker2.c".
Вложения
Speaker2_1251.zip
(5.58 КиБ) Скачиваний: 66


Rambler\'s Top100 Mail.ru counter