Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Сколько МИПСов надо АРМу, чтоб МР3 играть?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
zhenja
Есть задача на АРМе играть МР3. Большинство АРМов не имеет мат. сопроцессора. В связи с этим вопрос. Какой производительности АРМ выбрать, чтоб не было проблем? Кто имел опыт - отзовитесь.
aaarrr
Вот табличка от ARM (для 32bit zero wait-state памятей):
Код
Sample    Content   Channels ARM7TDMI ARM9TDMI ARM9E
Rate
----------------------------------------------------
48kHz     320kbits  Stereo   29MHz    25MHz    19MHz
          (peak)

44.1kHz   128kbits  Stereo   25MHz    22MHz    18MHz
          (average)

Плюс еще 21Кбайт RAM. Не знаю, насколько этим данным можно доверять, но цифирки похожи на жестоко оптимизированную правду.
klen
Вот ссылка на открытый проект
http://www.underbit.com/products/mad/
ivstech
Цитата(aaarrr @ Jul 17 2006, 20:25) *
Вот табличка от ARM (для 32bit zero wait-state памятей):
Код
Sample    Content   Channels ARM7TDMI ARM9TDMI ARM9E
Rate
----------------------------------------------------
48kHz     320kbits  Stereo   29MHz    25MHz    19MHz
          (peak)

44.1kHz   128kbits  Stereo   25MHz    22MHz    18MHz
          (average)

Плюс еще 21Кбайт RAM. Не знаю, насколько этим данным можно доверять, но цифирки похожи на жестоко оптимизированную правду.

Я использовал MAD. Получается (естественно, DCT32 и т.п. на ассемблере), что 44100 128 кбит требует точно не меньше 48МГц (в симуляторе)
asen
так на LPC2148 можно mp3 фаилы юзать если I2C кодек приципить. А интересно есть где готовые библиотеки для декодирования mp3
Alechek
Цитата(asen @ Jul 18 2006, 08:07) *
так на LPC2148 можно mp3 фаилы юзать если I2C кодек приципить. А интересно есть где готовые библиотеки для декодирования mp3

меня больше интересует есть ли библиотеки для декодирования AC3?
COMA
Цитата(asen @ Jul 18 2006, 06:07) *
так на LPC2148 можно mp3 фаилы юзать если I2C кодек приципить. А интересно есть где готовые библиотеки для декодирования mp3


http://www.underbit.com/products/mad/
этого достаточно. Легко запускаеться в IAR. Для проверки производительности гонял на LPC2106. Точно сказать не могу, но получилось порядка 2сек. на декодирование 3сек. MP3 файла.
GetSmart
2 COMA

О какой конкретно ссылке говорится для процессора LPC2106 ?
Там очень много разных ссылок. У меня глаза просто разбежались.
COMA
Цитата(GetSmart @ Jul 20 2006, 12:35) *
2 COMA

О какой конкретно ссылке говорится для процессора LPC2106 ?
Там очень много разных ссылок. У меня глаза просто разбежались.


Нигде не говориться о LPC2106.
Я собрал libmad под ARM (LPC2106) и проверил на живой плате. Всего то smile.gif
asen
а проект можете выложить это же была не комерчиская разработка и если можно примерную топологию подключения ЦАПа
COMA
Проект не сохранился. ЦАП не подключал, задача была только оценить скорость ARM при декодировании.
GetSmart
А я когда хотел сделать MP3-плейер, то собирался сделать ЦАП на ШИМе того же АРМ-процессора, а точнее сразу на выходе полный мост с динамиком посередине. Получился бы усилитель класса D с максимальным КПД. Для автономных устройств самое то. По сути схема на процессоре и четырёх транзисторах и всё.
asen
ну и что как получилось ? там ШИМ не медленный для этого хотябы при 16 битной глубене помоему меденный максимум 8 бит

COMA а вообще есть гденить описание по использованию этих библиоте куда че пихать и от куда забирать
beer_warrior
Цитата
COMA а вообще есть гденить описание по использованию этих библиоте куда че пихать и от куда забирать

Да, если возможно больше информации.Как собирается.Скоки памяти жрет. Как привязывается к конкретному кристаллу и.т.п
COMA
Давно было.

Ищи в сурцах это:

/*
* This is the output callback function. It is called after each frame of
* MPEG audio data has been completely decoded. The purpose of this callback
* is to output (or play) the decoded PCM audio.
*/

static enum mad_flow output(void *data,
struct mad_header const *header,
struct mad_pcm *pcm)

Все что осталось -
GetSmart
Цитата(asen)
ну и что как получилось ? там ШИМ не медленный для этого хотябы при 16 битной глубене помоему меденный максимум 8 бит

Нормальный там ШИМ. При работе процессора на 44236800 Гц (11,0592 * 4) получится 10 бит. Точнее даже 11 бит. Короче для карманного плейера это качество выше крыши.

2 COMA

А что, для работы требуется 42 КБ данных?
Как это могло влезть в LPC2106 ?
COMA
Цитата
А что, для работы требуется 42 КБ данных?
Как это могло влезть в LPC2106 ?


LPC2106 64k RAM 128k FLASH, влезает.
Make_Pic
ГЫ! smile.gif

ТУТА
GetSmart
Цитата
high-quality, uncompressed, 16-bit digital audio

Ну и где тут "ГЫ" ?
Воспроизведение несжатого звука. Даром никому не надо.
COMA
Вещь ! smile.gif

Осталось приделать декодер MP3
Make_Pic
Цитата(GetSmart @ Jul 20 2006, 15:12) *
Цитата
high-quality, uncompressed, 16-bit digital audio

Ну и где тут "ГЫ" ?
Воспроизведение несжатого звука. Даром никому не надо.


А может немного мозгами пошевелить?
Или вам ключи от квартиры - где деньги лежат?
Make_Pic
Цитата(Make_Pic @ Jul 20 2006, 15:47) *
Цитата(GetSmart @ Jul 20 2006, 15:12) *

Цитата
high-quality, uncompressed, 16-bit digital audio

Ну и где тут "ГЫ" ?
Воспроизведение несжатого звука. Даром никому не надо.


А может немного мозгами пошевелить?
Или вам ключи от квартиры - где деньги лежат?


От туда-же:
"The author was able to implement the MP3 decoding software with limited success only – the data is taken from on-board flash (no RAM for extra input buffer)
As the measurements shows , the software is able to perform mp3 decoding in real time."

Используйте 2106 вместо 2138 и будет у вас успех (как у меня например smile.gif!
Rst7
Так, вопрос к тем, кто компилировал этот MAD.

С выводом все понятно:
Код
static
enum mad_flow output(void *data,
             struct mad_header const *header,
             struct mad_pcm *pcm)
...


Патчим эту функцию, там внутри все по семплам.

Вот со входным потоком непонятки

Если так (вызов декодера):

Код
char fbuffer[8192];
unsigned int fsize;


int main(void)
{
  fsize=4000000; //Сколько-то там
  decode((unsigned char const *)fbuffer, fsize);
  return 0;
}


Ну и еще мы тут файл открываем, но это опущено...

А далее патчим input:

Код
/*
* This is a private message structure. A generic pointer to this structure
* is passed to each of the callback functions. Put here any data you need
* to access from within the callbacks.
*/

struct buffer {
  unsigned char const *start;
  unsigned long length;
};

/*
* This is the input callback. The purpose of this callback is to (re)fill
* the stream buffer which is to be decoded. In this example, an entire file
* has been mapped into memory, so we just call mad_stream_buffer() with the
* address and length of the mapping. When this callback is called a second
* time, we are finished decoding.
*/

static
enum mad_flow input(void *data,
            struct mad_stream *stream)
{
  struct buffer *buffer = data;

  if (!buffer->length)
    return MAD_FLOW_STOP;

  fread(infile,fbuffer,sizeof(fbuffer));


  if (buffer->length>=sizeof(fbuffer))
  {
    mad_stream_buffer(stream, buffer->start, sizeof(fbuffer));
    buffer->length-=sizeof(fbuffer);
  }
  else
  {
    mad_stream_buffer(stream, buffer->start, buffer->length);
    buffer->length=0;
  }
  return MAD_FLOW_CONTINUE;
}


А тут мы по кусочкам вычитываем из файла и вызываем mad_stream_buffer с вычитанным кусочком... Так стрельнет? В оригинале там маппинг ВСЕГО файла на память, как-то слабо без MMU wink.gif
COMA
За всех не отвечу. smile.gif
Когда тестил MAD на скорость, сделал следующее - разместил кусочек MP3 файла в свободной flash. Что-то около 60k. Разместил как обычный массив - unsigned char const mp3_data[] = {0xAA, ..., 0xAA}.
Вызов функции был следующим - decode(mp3_data, state);
Kopa
Цитата(Make_Pic @ Jul 20 2006, 15:47) *
А может немного мозгами пошевелить?
Или вам ключи от квартиры - где деньги лежат?

Для интересующихся. Вот проект продвинутого MP3 плеера с исходниками. ( Для КПК)
http://hp.vector.co.jp/authors/VA032810/

А на сайте tcmp.org проект видео проигрывателяsmile.gif
Make_Pic
Цитата(Kopa @ Jul 25 2006, 08:12) *
Цитата(Make_Pic @ Jul 20 2006, 15:47) *

А может немного мозгами пошевелить?
Или вам ключи от квартиры - где деньги лежат?

Для интересующихся. Вот проект продвинутого MP3 плеера с исходниками. ( Для КПК)
http://hp.vector.co.jp/authors/VA032810/

А на сайте tcmp.org проект видео проигрывателяsmile.gif

Вариация все того же MADа - на жирный проц под 120MIPS и более переносится, а на LPC21XX только с кастрацией!!!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.