Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.188.20.56] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Привет всем
Необходимо определять длительность звучания и прочих параметров (частота, битрейт и т.д.) файлов wma, midi, ogg и flac. Причём надо это делать на голом Си, без всяких DirectShow и прочих супер библиотек, т.к. конечное предназначение - портативный плеер на микроконтроллере. Всё, что там есть - стандартные файловые операции Си - fopen, fread, fwrite, lseek и fclose. lseek ущербный, умеет позиционироваться только вперёд и только от начала. Но это я уже успешно преодолел . На настоящий момент я умею вытягивать всю информацию из mp3 (иногда наблюдаются глюки с определением частоты, но это уже мелочи ), считывать название и исполнителя из wma (успешно выдрал из какой-то проги на VB.NET) и получать всю инфу из wav. Я знаю, что midi - это не оцифрованный звук, поэтому тут стоит вопрос только о длительности звучания. Просьба поделиться информацией, как это делать. Желательно примерами кода, т.к. из голых спецификаций фиг что поймёшь. Я пытался читать многочисленные описания midi и спецификации WMA (ASF), ничего про длительность звучания я там не нашёл, а то, как там хранятся ноты, объекты и всё прочее меня совершенно не волнует, т.к. абсолютно все форматы проигрываются специальной микросхемой, которая их прекрасно понимает без каких-либо усилий с моей стороны. Интересует исключительно описательная часть для вывода на дисплей. Спасибо. PS. Я создал эту тему не в разделе про микроконтроллеры, потому что чтение этой информации может потребоваться и в программе на компе, а не только в МК. Если я не прав, то сорри |
Сообщ.
#2
,
|
|
|
hd44780
А почему не взять готовый код на Си? Выкинуть лишнее проще чем добавлять новое. Поэтому предлагаю разобраться с исходниками на FFMpeg тем более они простые. https://github.com/FFmpeg/FFmpeg/tree/master/libavformat или Lame http://lame.sourceforge.net/download.php Для Midi первое что попалось это https://wiki.videolan.org/Midi |
Сообщ.
#3
,
|
|
|
И самое смешное это то, что контейнеры кроме собственно дорожек имеют чанк заголовка в котором и указаны все атрибуты. Эти атрибуты и читают медиа библиотеки. Если их нет или они записаны неверно или повреждены - контейнер нечитаем. Посмотри хедеры нужных форматов контейнеров. Создай указатель на структуру типа чанка и из полей читай нужные данные.
|
Сообщ.
#4
,
|
|
|
Да, посмотрю, спасибо.
Сейчас накопал CoolPlayer, он читает ogg, смотрю, как он его длительность определяет. ffmpeg смотрел, там, похоже, из аудио только mp3. Который у меня уже есть. Но может я и неправ.. А видео мне пока не нужно, проц дохлый для этого. |
Сообщ.
#5
,
|
|
|
Круто. А проект будет открытый? (в плане исходного кода)
|
Сообщ.
#6
,
|
|
|
Цитата hd44780 @ успешно выдрал из какой-то проги на VB.NET Может, Audio Tools Library сможешь портировать? Там есть всё кроме midi. Для midi можно поковырять исходники MODlist, но там тоже Delphi... |
Сообщ.
#7
,
|
|
|
Цитата DIS @ Круто. А проект будет открытый? (в плане исходного кода) Да. Потом где-нибудь статью опубликую. Пока оно ещё не готово - плейлистов фактически нет, просто сканирую USB-флэшку/SD карту и пишу туда же текстовый файлик с путями к нужным файлам, оттуда же их и читаю потом, интерфейс не доработан и прочее. Ну это уже не для этого форума. Добавлено Цитата Filka @ Цитата hd44780 @ успешно выдрал из какой-то проги на VB.NET Может, Audio Tools Library сможешь портировать? Там есть всё кроме midi. Для midi можно поковырять исходники MODlist, но там тоже Delphi... Может гляну ... Но с делфи у меня туго... Я в основном C/C++/C#. VB.NET довольно близок с C#, поэтому я его довольно легко понял. Но та прога, которую я потрошил, длительность WMA не определяет, только теги |
Сообщ.
#9
,
|
|
|
packages.ubuntu.com/ru/lucid/mpg321
packages.ubuntu.com/ru/lucid/libmpg123-0 тоже линуксовые, первый вроде попроще, а у второго зависимостей меньше если может воспроизвести, наверно и инфу покажет |
Сообщ.
#10
,
|
|
|
Ну я в процессе, как что будет получаться/не получаться, буду отписываться.
|
Сообщ.
#11
,
|
|
|
Снова привет всем . Долго меня тут не было ...
В Донецке, который в "самостийной" т.н. стране украине довольно хреновая обстановка, мало способствующая какому-либо программо-писанию. Ну да ладно .. Теперь по делу. Перерывши тонну разных исходников программ на предмет получения информации из .ogg файлов, я убедился, что все они построены на официальных vorbis-овских либах, которые довольно древние (2007 год, если правильно помню) и в современных VS2010/2012 даже не компилятся, выдавая кучу разных ошибок. Нормально компилится лишь вышеупомянутый coolplayer. Видать, его автор неплохо потрудился в плане адаптации ворбисовского старья под новые компиляторы. Но и с него оказалось крайне мало толку, т.к. официальная либа написана крайне путанно и очень неоптимально с точки зрения расхода памяти. Чего стоит только выделение 64 кил блока динамической памяти и чтения туда куска файла ради получения какого-там заголовка длиной в 15-20 байт... Короче, потраченное время ушло совершенно впустую. Потом, довольно случайно я наткнулся вот на эту - http://getid3.sourceforge.net/ штуковину. Это набор PHP библиотек для получения различной информации из кучи разных аудио/видео файлов. Тоже читает кучу лишнего, но хоть без ненужных выкрутасов и выделения диких объёмов памяти. На нём я и остановился. На его основе сделал "считыватель" информации из OGG - прилагаю. Делал в VS2010. Имя файла вшито в программу. Вложение здесь - Как определить длительность звучания файлов wma, midi, ogg и flac? Тот вариант, который был здесь, неверно читал русские комментарии. |
Сообщ.
#12
,
|
|
|
Всё, и в плеере алгоритм работает. Приступаю к mid, там только время звучания вычислить.
По OGG только один вопрос остался. Я так и не понял, в какой кодировке там русские названия хранятся? Перекодировал mp3 с русскоязычными тегами в OGG каким-то он-лайн перекодировщиком, он туда какой-то фигни написал. Каждый символ 2-байтный, а-ля Unicode, но я даже на компе на 100% не сумел прочитать эти строчки. Они только в режиме DOS кодировки наполовину читабельны. Естественно, через один символ. |
Сообщ.
#13
,
|
|
|
То же самое для WMA.
Также под VS.NET 2010, имя читаемого файла вшито в программу. Прикреплённый файлWMA_Reader.zip (11,55 Кбайт, скачиваний: 232) |
Сообщ.
#14
,
|
|
|
Цитата hd44780 @ По OGG только один вопрос остался. Я так и не понял, в какой кодировке там русские названия хранятся? Рискну предположить, что в UTF-8. |
Сообщ.
#15
,
|
|
|
Да хз ...
Я даже не нашёл нормальной проги для конвертирования в OGG. Пробовал Total Audio Converter - на конвертировании в OGG он вылетает WMA в плеере работает . |