Перейти к содержанию
    

Привет форумчанам.

 

Гоняю Helix MP3 декодер.

Если посмотреть на структуру простого MP3 файла (без всяких там расширений), то он состоит из последовательности блоков кодированных данных и не имеет общего заголовка, в отличие от, например, WAV (RIFF) файлов. Таким образом, узнать, какова длительность воспроизведения, нельзя, не прочитав весь файл или не прикинув приблизительно, поделив размер файла на размер блока. Последний метод дает, однако, ошибку, т.к. файл может иметь блоки, которые содержат всякую фигню, кроме, собственно, звука: иконки, информацию об альбоме, и пр... Может я чего проглядел? Действительно ли надо прошустрить весь файл, чтобы точно узнать его длительность звучания?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Какой у вас камень? Битрейт 320 тянет?

 

@zksystem: множество файлов, как я установил, не имеют указанного тэга.

 

@Alex_1811: Я гоняю на SAM3U на 96MHz. 320kbps не создает никаких проблем: измерял осциллоскопом время декодирования блока в 1045 байт в выходные самплы (2304 16-битных слова), получал времена от 10.5мс до 12мс. Причем, бьется в такт басу (чем круче бас, тем больше время). 2304 слова (1152 стерео выборки) при 44.1kHz проигрываются за 26.1мс. SD-карточка, заведеная на SDIO, подчитывает очередную порцию за 1.2мс.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я гоняю на SAM3U на 96MHz. 320kbps не создает никаких проблем: измерял осциллоскопом время декодирования блока в 1045 байт в выходные самплы (2304 16-битных слова), получал времена от 10.5мс до 12мс. Причем, бьется в такт басу (чем круче бас, тем больше время). 2304 слова (1152 стерео выборки) при 44.1kHz проигрываются за 26.1мс. SD-карточка, заведеная на SDIO, подчитывает очередную порцию за 1.2мс.

То есть, получается загрузка процессора в 50%?

А декодер сколько оперативной памяти требует для работы?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

К сожалению совсем быстро не получится.

Потому что может быть еще VBR.

Можно здесь посмотреть

http://www.codeproject.com/KB/audio-video/...nded&fr=101

или на PHP

http://pear.php.net/package/MP3_Id/download/

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

То есть, получается загрузка процессора в 50%?

Примерно так. То есть, 12мс на вызов к "MP3Decode(...)", который заполняет буфер на 26.1мс стереозвучания 44.1kHz. Далее буфер выплевывается через I2S в режиме DMA в кодек Wolfson 8731 (который есть точная копия кодека TLV320AIC23B от Texas Instruments, упоминаемого в известном проекте ARM MP3).

 

А декодер сколько оперативной памяти требует для работы?

 

В "главном" файле Helix MP3 декодера "mp3dec.c" приведена следующая информация:

 

MP3DecInfo mp3DecInfo; // 0x7f0 = 2032

SubbandInfo sbi; // 0x2204 = 8708

IMDCTInfo mi; // 0x1b20 = 6944

HuffmanInfo hi; // 0x1210 = 4624

DequantInfo di; // 0x348 = 840

ScaleFactorInfo sfi; // 0x124 = 292

SideInfo si; // 0x148 = 328

FrameHeader fh; // 0x38 = 56

//-------------------------------------------

// 0x5d10 = 23824 bytes

Безусловно, нужна еще память на внешние буферы: 1045 байт на входной MP3 блок (320kbps), выходной буфер в 4608 байт (2х2304 PCM-16 слова), а вообще-то два таких: у меня пока в один декодируется, второй выплевывается по I2S, т.к. кольцевой буфер реализовать сложнее, не хотелось возиться. Плюс файловая система требует на себя до 4KB. Плюс стек и там всякие мои вещи по мелочам, итого в общем компиляция показывает чуть более 43KB занятого RAM.

 

К сожалению совсем быстро не получится.

Потому что может быть еще VBR.

 

Спасибо за ссылки.

VBR не поддерживается Helix декодером. Да и во всей своей куче MP3 музыки я пока не встречал Variable Bit Rate.

Изменено пользователем KnightIgor

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

кодек Wolfson 8731

Понятно, спасибо.

А кодек как тактируете?

Он в каком режиме работает - мастер или слэйв?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Понятно, спасибо.

А кодек как тактируете?

Он в каком режиме работает - мастер или слэйв?

В отличие от примера от ATMEL с совершенно кривой процессорной частотой в 98 с копейками MHz, получаемых из крутой, надо сказать, внутренней PLL, у меня проц бежит на стандартной 96MHz, а DAC тактируется соответственно 12MHz и работает чисто как слэйв. Дело в том, что создатели I2S DACов прекрасно понимали, что их продукты будут использоваться в системах с USB, где кратность частоте в 12MHz просто неизбежна. Поэтому наряду с прецизионным "нормальным" режимом тактирования от 12.288MHz и других кривых частот, дающих точно 48kHz и/или 44.1kHz, предусмотрен так называемый режим "USB" от упомянутых 12MHz и делителемм 250 (48kHz) и 272 (44.1kHz, а точно - 44.117kHz). Конечно, DAC нужно переключать в этот режим через I2C или SPI, т.к. по умолчанию установлен "нормальный" режим.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

VBR не поддерживается Helix декодером.

VBR поддерживается. И музыка встречается...

LPC17 тоже декодирует фрейм за 12-13мс. Правда при 72 МГц тактовой...

 

 

post-7267-1307463905_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

VBR поддерживается. И музыка встречается...

Рад за него. Читал, однако, иное.

Не ли файла с VBR? - До сих пор не видел, хочу попробовать.

 

LPC17 тоже декодирует фрейм за 12-13мс. Правда при 72 МГц тактовой...

Примерно сходится: как я писал, наблюдал времена от 10.5мс до 12мс (12мс биение в момент удара баса). 72MHz/96MHz*13мс=9.75мс. Учитывая точность осциллографа...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

LPC17xx это монстр, производительность впечатляющая, максимальная среди кортексов м3.

Интересно, смогут ли с ними потягаться новые STM32F2?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

LPC17xx это монстр, производительность впечатляющая

Точно, монстр! Особенно впечатляет АЦП. :)

http://electronix.ru/forum/index.php?showtopic=90799

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не ли файла с VBR? - До сих пор не видел, хочу попробовать.

 

В составе Nero есть примочка Wave Editir. там можно создать MP3 файл с любым битрейтом, включая VBR.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В составе Nero есть примочка Wave Editir. там можно создать MP3 файл с любым битрейтом, включая VBR.

Нашел, сделал VBR: Helix проигрывает без проблем. Мне казалось, что я читал, что Helix не может VBR. Значит ошибся. Или это была libmad?

 

Дополнение, кому интересно: привожу графики времен декодирования (прикреплен JPG). Синяя линия - 320kbps, красная - 128kbps, желтая - VBR, созданый с опцией максимального качества. Вертикальная ось - миллисекунды.

Измерение проводилось просто: перед входом и после выхода из MP3Decode() сохранялись значения SysTick, после чего разница делилась на тактовую частоту (96000kHz).

post-49725-1307839155_thumb.jpg

Изменено пользователем KnightIgor

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...