На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual C++ / MFC / WTL (далее Раздела)
1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

Полезные ссылки:
user posted image FAQ Раздела user posted image Обновления для FAQ Раздела user posted image Поиск по Разделу user posted image MSDN Library Online
Модераторы: ElcnU
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> Как определить длительность звучания файлов wma, midi, ogg и flac? , На голом Си
    Привет всем :)

    Необходимо определять длительность звучания и прочих параметров (частота, битрейт и т.д.) файлов wma, midi, ogg и flac.
    Причём надо это делать на голом Си, без всяких DirectShow и прочих супер библиотек, т.к. конечное предназначение - портативный плеер на микроконтроллере.

    Всё, что там есть - стандартные файловые операции Си - fopen, fread, fwrite, lseek и fclose. lseek ущербный, умеет позиционироваться только вперёд и только от начала. Но это я уже успешно преодолел :) .

    На настоящий момент я умею вытягивать всю информацию из mp3 (иногда наблюдаются глюки с определением частоты, но это уже мелочи :) ), считывать название и исполнителя из wma (успешно выдрал из какой-то проги на VB.NET) и получать всю инфу из wav.
    Я знаю, что midi - это не оцифрованный звук, поэтому тут стоит вопрос только о длительности звучания.

    Просьба поделиться информацией, как это делать. Желательно примерами кода, т.к. из голых спецификаций фиг что поймёшь. Я пытался читать многочисленные описания midi и спецификации WMA (ASF), ничего про длительность звучания я там не нашёл, а то, как там хранятся ноты, объекты и всё прочее меня совершенно не волнует, т.к. абсолютно все форматы проигрываются специальной микросхемой, которая их прекрасно понимает без каких-либо усилий с моей стороны.

    Интересует исключительно описательная часть для вывода на дисплей.

    Спасибо.

    PS. Я создал эту тему не в разделе про микроконтроллеры, потому что чтение этой информации может потребоваться и в программе на компе, а не только в МК.
    Если я не прав, то сорри :)
    Сообщение отредактировано: hd44780 -
      hd44780
      А почему не взять готовый код на Си?
      Выкинуть лишнее проще чем добавлять новое. Поэтому предлагаю разобраться с исходниками на FFMpeg тем более они простые.
      https://github.com/FFmpeg/FFmpeg/tree/master/libavformat
      или Lame
      http://lame.sourceforge.net/download.php
      Для Midi первое что попалось это
      https://wiki.videolan.org/Midi
        И самое смешное это то, что контейнеры кроме собственно дорожек имеют чанк заголовка в котором и указаны все атрибуты. Эти атрибуты и читают медиа библиотеки. Если их нет или они записаны неверно или повреждены - контейнер нечитаем. Посмотри хедеры нужных форматов контейнеров. Создай указатель на структуру типа чанка и из полей читай нужные данные.
          Да, посмотрю, спасибо.
          Сейчас накопал CoolPlayer, он читает ogg, смотрю, как он его длительность определяет.

          ffmpeg смотрел, там, похоже, из аудио только mp3. Который у меня уже есть. Но может я и неправ..
          А видео мне пока не нужно, проц дохлый для этого.
          Сообщение отредактировано: hd44780 -
            Круто. А проект будет открытый? (в плане исходного кода)
              Цитата hd44780 @
              успешно выдрал из какой-то проги на VB.NET

              Может, Audio Tools Library сможешь портировать? Там есть всё кроме midi. Для midi можно поковырять исходники MODlist, но там тоже Delphi...
                Цитата DIS @
                Круто. А проект будет открытый? (в плане исходного кода)

                Да. Потом где-нибудь статью опубликую.
                Пока оно ещё не готово - плейлистов фактически нет, просто сканирую USB-флэшку/SD карту и пишу туда же текстовый файлик с путями к нужным файлам, оттуда же их и читаю потом, интерфейс не доработан и прочее.
                Ну это уже не для этого форума.

                Добавлено
                Цитата Filka @
                Цитата hd44780 @
                успешно выдрал из какой-то проги на VB.NET

                Может, Audio Tools Library сможешь портировать? Там есть всё кроме midi. Для midi можно поковырять исходники MODlist, но там тоже Delphi...

                Может гляну ...
                Но с делфи у меня туго...
                Я в основном C/C++/C#. VB.NET довольно близок с C#, поэтому я его довольно легко понял. Но та прога, которую я потрошил, длительность WMA не определяет, только теги :(
                    packages.ubuntu.com/ru/lucid/mpg321
                    packages.ubuntu.com/ru/lucid/libmpg123-0
                    тоже линуксовые, первый вроде попроще, а у второго зависимостей меньше
                    если может воспроизвести, наверно и инфу покажет
                    Сообщение отредактировано: Romzecs -
                      Ну я в процессе, как что будет получаться/не получаться, буду отписываться.
                        Снова привет всем :) . Долго меня тут не было ...
                        В Донецке, который в "самостийной" т.н. стране украине довольно хреновая обстановка, мало способствующая какому-либо программо-писанию. Ну да ладно ..

                        Теперь по делу.
                        Перерывши тонну разных исходников программ на предмет получения информации из .ogg файлов, я убедился, что все они построены на официальных vorbis-овских либах, которые довольно древние (2007 год, если правильно помню) и в современных VS2010/2012 даже не компилятся, выдавая кучу разных ошибок.
                        Нормально компилится лишь вышеупомянутый coolplayer. Видать, его автор неплохо потрудился в плане адаптации ворбисовского старья под новые компиляторы.
                        Но и с него оказалось крайне мало толку, т.к. официальная либа написана крайне путанно и очень неоптимально с точки зрения расхода памяти. Чего стоит только выделение 64 кил блока динамической памяти и чтения туда куска файла ради получения какого-там заголовка длиной в 15-20 байт...
                        Короче, потраченное время ушло совершенно впустую.
                        Потом, довольно случайно я наткнулся вот на эту - http://getid3.sourceforge.net/ штуковину.
                        Это набор PHP библиотек для получения различной информации из кучи разных аудио/видео файлов.

                        Тоже читает кучу лишнего, но хоть без ненужных выкрутасов и выделения диких объёмов памяти.
                        На нём я и остановился.
                        На его основе сделал "считыватель" информации из OGG - прилагаю. Делал в VS2010. Имя файла вшито в программу.

                        Вложение здесь - Как определить длительность звучания файлов wma, midi, ogg и flac?
                        Тот вариант, который был здесь, неверно читал русские комментарии.
                        Сообщение отредактировано: hd44780 -
                          Всё, и в плеере алгоритм работает. Приступаю к mid, там только время звучания вычислить.

                          По OGG только один вопрос остался. Я так и не понял, в какой кодировке там русские названия хранятся?
                          Перекодировал mp3 с русскоязычными тегами в OGG каким-то он-лайн перекодировщиком, он туда какой-то фигни написал. Каждый символ 2-байтный, а-ля Unicode, но я даже на компе на 100% не сумел прочитать эти строчки. Они только в режиме DOS кодировки наполовину читабельны. Естественно, через один символ.
                          Сообщение отредактировано: hd44780 -
                            То же самое для WMA.
                            Также под VS.NET 2010, имя читаемого файла вшито в программу.

                            Прикреплённый файлПрикреплённый файлWMA_Reader.zip (11,55 Кбайт, скачиваний: 232)
                            Сообщение отредактировано: hd44780 -
                              Цитата hd44780 @
                              По OGG только один вопрос остался. Я так и не понял, в какой кодировке там русские названия хранятся?

                              Рискну предположить, что в UTF-8.
                                Да хз ...
                                Я даже не нашёл нормальной проги для конвертирования в OGG. Пробовал Total Audio Converter - на конвертировании в OGG он вылетает :(

                                WMA в плеере работает :) .
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,1519 ]   [ 19 queries used ]   [ Generated: 26.04.24, 16:39 GMT ]