|
VS1053 и запись звука, может кто делал? |
|
|
|
May 25 2010, 05:53
|

Местный
  
Группа: Свой
Сообщений: 307
Регистрация: 6-02-08
Из: Россия, Екатеринбург
Пользователь №: 34 798

|
Пытаюсь сделать запись с микрофона на SD карточку. В ДШ на VS1053 приведен код инициализации ADPCM энкодера, запускаю - работает, звук с микрофона начинает идти в наушники... Но в ДШ еще сказано, что необходимо применить патч, патч применяю, но его надо запустить и тут начинаются приколы: в ДШ про запуск патча ничего вообще не сказано, а в примере плеера от VLSI идет запуск огг/ворбис патча... Код vs_write(VS_AICTRL0, 16000U); delay_ms(10); while(!DREQ); vs_write(VS_AICTRL1, 0); delay_ms(10); while(!DREQ); vs_write(VS_AICTRL2, 4096U); delay_ms(10); while(!DREQ); vs_write(VS_AICTRL3, 0); delay_ms(10); while(!DREQ); LoadUserCode(); vs_write(VS_AIADDR, 0x0034); while(!DREQ); vs_write(VS_MODE, 0x1804); delay_ms(10); while(!DREQ); Кароче путанница, если кто делал - помогите пожалуйста...
--------------------
Разработчик
|
|
|
|
|
 |
Ответов
|
May 25 2010, 09:02
|

Местный
  
Группа: Свой
Сообщений: 307
Регистрация: 6-02-08
Из: Россия, Екатеринбург
Пользователь №: 34 798

|
Faradey спасибо огромное! по поводу огг-ворбис - у меня патч ворбиса во флеш уже не влезет (atmega32), поэтому думаю сделать просто ADPCM. Как я понимаю, для ADPCM нужен только загрузить в VS1053 маленький патчик, но! в ДШ ничего не сказано, что я должен записывать в SCI_AIADDR после загрузки этого патчика. Выдержка из ДШ: Код WriteVS10xxRegister(SCI_AICTRL0, 16000U); WriteVS10xxRegister(SCI_AICTRL1, 0); WriteVS10xxRegister(SCI_AICTRL2, 4096U); WriteVS10xxRegister(SCI_AICTRL3, 0); WriteVS10xxRegister(SCI_MODE, ReadVS10xxRegister(SCI_MODE) | SM_RESET | SM_ADPCM | SM_LINE1); WriteVS10xxPatch(); /* Only for VS1053b */
Сообщение отредактировал Ivan Kuznetzov - May 25 2010, 09:04
--------------------
Разработчик
|
|
|
|
|
May 25 2010, 09:44
|
Частый гость
 
Группа: Свой
Сообщений: 127
Регистрация: 31-05-06
Из: Belarus, Minsk
Пользователь №: 17 638

|
Цитата(Ivan Kuznetzov @ May 25 2010, 12:02)  Faradey спасибо огромное! по поводу огг-ворбис - у меня патч ворбиса во флеш уже не влезет (atmega32), поэтому думаю сделать просто ADPCM. Как я понимаю, для ADPCM нужен только загрузить в VS1053 маленький патчик, но! в ДШ ничего не сказано, что я должен записывать в SCI_AIADDR после загрузки этого патчика. Выдержка из ДШ: Код WriteVS10xxRegister(SCI_AICTRL0, 16000U); WriteVS10xxRegister(SCI_AICTRL1, 0); WriteVS10xxRegister(SCI_AICTRL2, 4096U); WriteVS10xxRegister(SCI_AICTRL3, 0); WriteVS10xxRegister(SCI_MODE, ReadVS10xxRegister(SCI_MODE) | SM_RESET | SM_ADPCM | SM_LINE1); WriteVS10xxPatch(); /* Only for VS1053b */ Не могу понять вашу проблему, прочитайте внимательно файл "readme.txt" из архива, там всё описано по шагам. либо обратить внимание на файл с примером "vs1053_freertos.c" вот интересующая вас часть от-туда: Код _VS1053_SetCS( p->platform ); _VS1053_SetRESET( p->platform ); _VS1053_Delay_ms( 10 ); _VS1053_ResetDCS( p->platform ); _VS1053_ResetRESET( p->platform ); _VS1053_ResetCS( p->platform ); _VS1053_WaitDREQ( p->platform );
VS1053_SetupHighSpeedSPI( p );
// Run plugin VS1053_LoadUserCode( p, vs1053_decode_patch, ARRSIZEOF( vs1053_decode_patch ) );
// Set AICTRL registers VS1053_WriteRegister( p, VS1053_SCI_AICTRL0, sample_rate ); VS1053_WriteRegister( p, VS1053_SCI_AICTRL1, rec_gain ); VS1053_WriteRegister( p, VS1053_SCI_AICTRL2, max_autogain ); VS1053_WriteRegister( p, VS1053_SCI_AICTRL3, 0x0002 ); // 2 = left channel, 3 = right channel
VS1053_WriteRegister( p, VS1053_SCI_MODE, VS1053_ReadRegister( p, VS1053_SCI_MODE ) | VS1053_SM_ADPCM ); // VS1053_SM_RESET VS1053_WriteRegister( p, VS1053_SCI_AIADDR , 0x300 );
--------------------
Завтра пойму, что нужно было сделать вчера...
|
|
|
|
|
May 25 2010, 10:18
|

Местный
  
Группа: Свой
Сообщений: 307
Регистрация: 6-02-08
Из: Россия, Екатеринбург
Пользователь №: 34 798

|
Цитата(Faradey @ May 25 2010, 15:44)  Не могу понять вашу проблему там для ogg все описано. а мне необходио просто wav записывать? зачем мне ogg/vorbis патч грузить?
--------------------
Разработчик
|
|
|
|
|
May 25 2010, 10:39
|
Частый гость
 
Группа: Свой
Сообщений: 127
Регистрация: 31-05-06
Из: Belarus, Minsk
Пользователь №: 17 638

|
Цитата(Ivan Kuznetzov @ May 25 2010, 13:18)  там для ogg все описано. а мне необходио просто wav записывать? зачем мне ogg/vorbis патч грузить? ?  что то я совсем ничего не понимаю. Попробую еще раз разобраться: Итак: 1. вам надо оцифровать в формате ADPCM. 2. записать в wav-файл В моём примере: 1. ф-ция оцифровки в ADPCM формат VS1053_ADPCM_RecordData(...) 2. ф-ция-поток для FreeRTOS в которой как раз сохраняетс в wav-файл под FatFS ------ а, вот по поводу Цитата что я должен записывать в SCI_AIADDR после загрузки этого патчика. я вам уже отвечал, пожалуйста ещё раз Код VS1053_WriteRegister( p, VS1053_SCI_AIADDR , 0x300 ); З.Ы. видно что моем примере грузится не ogg патч, а ADPCM патч: Код /** * патч для корректной записи ADPCM */ static const unsigned short vs1053_decode_patch[] = { #include "vorbis53b.plg" };
// чтение данных с кодека void VS1053_ADPCM_RecordData( VS1053Type *p, CIR_BUF *pcb, u16 sample_rate, u16 rec_gain, u16 max_autogain ) { ... // Run plugin VS1053_LoadUserCode( p, vs1053_decode_patch, ARRSIZEOF( vs1053_decode_patch ) ); ... }
--------------------
Завтра пойму, что нужно было сделать вчера...
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|