Технический форум по робототехнике.
_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.
Буква Е использует только один звуковой фрагмент, в согласных же их обычно несколько.
При использовании флешки такое сжатие, конечно можно и даже нужно выбросить, для повышения качества. И просто записать набор фонем отдельными целиковыми семплами.
А вот как записать словарь фонем, я к сожалению не знаю. Готовый бы где взять.
ZIV » 21 апр 2009, 21:15
Я плохо пока еще разбираюсь в МК и программировании... Подскажите как это засунуть в мой проект, созданный в CVAVR?
ZIV » 22 апр 2009, 17:18
помогите разобраться, пожалуйста(
galex1981 » 22 апр 2009, 17:28
Уточни пожалуйста что значит твой проект и куда что ты хочешь "засовывать"?
ZIV » 22 апр 2009, 17:30
У меня в CVAVR создана простая программа для робота, и я хочу добавить ему возможность говорить...
EdGull » 22 апр 2009, 19:57
а что мешает, религия?
ZIV » 22 апр 2009, 20:04
я просто не понимаю, как то что лежит в архиве, засунуть в квавр...
EdGull » 22 апр 2009, 20:11
ну для начала нужно распаковать архив
ZIV » 22 апр 2009, 20:18
издеваетесь??... Может быть, я и нуб... но до этого я как то сам догадался...
EdGull » 22 апр 2009, 20:19
т.е. у тебя архив в архиве?
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
что дальше??
ALHIMIK » 22 апр 2009, 20:26
Ctrl + C Ctrl V ?
ZIV » 22 апр 2009, 20:28
что именно и куда скопипастить?
galex1981 » 22 апр 2009, 23:59
все *.c и *.h - исходники
_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