Как раскодировать mp3 файл

Обновлено: 06.07.2024

Владельцам сайтов, которые постоянно выкладывают видео и аудиоконтент, стоит помнить о тех, кто по тем или иным причинам просмотреть или прослушать информацию не может. Зато может ее прочитать.

Расшифровка аудио и видеофайлов — занятие нудное и не самое приятное. Но мы живем в век технологий, а, значит, к нашим услугам множество возможностей, чтобы транскрибировать аудио и видеофайлы.

В этой статье мы расскажем, как легко и быстро перевести аудио и видео в текст.

Способы перевода аудиозаписей и видео в текст

1. Онлайн-конвертеры

Вот несколько сервисов, которые могут быть вам полезны, когда необходимо записать текст с видео или расшифровать аудиофайл.

Использование сервиса Google Документы — самый простой и доступный любому способ перевести видео в текст или расшифровать аудио.

Чтобы перевести видео в текст онлайн, необходимо открыть и запустить функцию «Голосовой ввод» во вкладке «Инструменты». Если одновременно включить воспроизведение видео или аудио рядом с микрофоном, система начнет сама набирать текст. Конечный результат зависит от качества звука и отсутствия посторонних шумов.

Распознавание текста с видео в Google

Онлайн-сервис Speechpad позволяет через браузер Google Chrome переводить речь в текст. Имеет поддержку русского языка. Может преобразовать в текст речь, сказанную на микрофон компьютера, получить текст с видео или перевести аудиофайл в печатный текст.

Онлайн-сервис, чтобы конвертировать видео в текст

Зарубежный сервис Dictation поддерживает более 100 языков, в том числе русский. Принцип работы схож с функцией «Голосового ввода» в Google Документах, так как сервис использует алгоритмы распознавания речи Google.

Программа, которая позволяет получить из видео текст

Онлайн-сервис RealSpeaker станет хорошим решением для пользователей, которые хотят расшифровать звуковые дорожки и видеофайлы. Конвертер имеет поддержку русского языка. Из недостатков — текстовая расшифровка файлов, длина которых превышает полторы минуты, будет платной.

Сервис для расшифровки аудио и перевода в текст

Онлайн-сервис для расшифровки аудио и видео

Также сервис предоставляет возможность расшифровки аудио и видеофайлов, записанных в форматах .aac, .m4a, .avi, .mp3, .mp4, .mpeg, .ogg, .raw, .flac, .wav. Но эта функция платная.

Отличный сервис, который может перевести аудио или преобразовать видео в текст. Имеет поддержку русского языка. Для использования необходима регистрация.

Система за пару минут делает расшифровку и отправляет ссылку на готовый вариант на электронную почту. Сервис умеет распознавать даже песни.

Сервис для расшифровки аудиофайлов

У сервиса предусмотрено несколько тарифных планов. Бесплатная версия включает только 30 минут расшифровки аудио в формате MP3. Если вы исчерпали лимит, за транскрибацию придется заплатить, выбрав один из тарифов.

2. Профессиональные сервисы расшифровки

Наиболее качественный вариант перевода аудио в текст обеспечивают профессиональные сервисы расшифровки. Единственный их недостаток — они платные. Но и достоинств у них больше по сравнению с бесплатными способами — качественная расшифровка, предсказуемый результат.

Для расшифровки аудио и видео на русском языке пока существует только один профессиональный сервис — Zapisano. Помимо русского он также поддерживает английский, французский, испанский, итальянский, немецкий и другие языки. Расшифровку текстов осуществляют специалисты.

Для начала работы необходимо загрузить файл или вставить на него ссылку.

Для расшифровки аудио и видео на русском языке пока существует только один профессиональный сервис — Zapisano

Ставки за расшифровку начинаются от 19 рублей за минуту и зависят от срочности исполнения и сложности материала. Тестовая расшифровка бесплатна.

Специалисты не только расшифруют текст, но и расставят знаки препинания, проверят орфографию и сделают легкую редактуру, убрав слова-паразиты и оговорки.

3. Программное обеспечение для десктопных устройств

Существует множество платных и бесплатных версий ПО, которые позволяют конвертировать видео в текст. И аудио тоже. Принцип работы и функционал такого программного обеспечения схож с онлайн-сервисами. Но если онлайн-конвертеры требуют подключения к интернету, ПО можно использовать всегда, когда необходимо перевести звук из видео в текст или преобразовать в текст аудио.

Эта отечественная программа для перевода видео в текст работает на ОС Windows. Она станет помощником для тех пользователей, которые не хотят расшифровывать аудиофайлы самостоятельно. Текст можно наговорить в микрофон, взять готовую аудиозапись или звуковую дорожку из видео. Программа работает со всеми популярными аудиоформатами. Программа осуществит и перевод видео в текст. Качество расшифровки — довольно высокое. Единственный и главный минус — программа платная.

Программа-конвертер перевода аудио и видео в печатный текст

Программа Express Scribe для Windows позволяет расшифровывать аудио и видео вручную. Для этого в программе предусмотрены кнопки воспроизведения, паузы и скорости проигрывания записей. Если самостоятельно набирать текст не хочется, можно включить запись, установить нужную скорость, выставить громкость и дополнительно запустить любой сервис голосового ввода, например, Google Документы.

Программа, которая позволяет получить из видео текст

Недостаток программы — нет версии на русском языке. При этом она интуитивно понятна и проста в использовании.

4. Приложения для смартфонов

Функция голосового ввода и распознавания речи реализована во многих приложениях для смартфонов и планшетов. Работает также, как ПО для десктопов и онлайн-сервисы. Для расшифровки аудио или распознавания текста с видео требуется открыть приложение, включить голосовой ввод и нажать воспроизведение звуковой дорожки рядом с микрофоном мобильного устройства.

Приложение для Android с функцией преобразования речи в текст. Умеет набирать текст под диктовку. Из недостатков — не работает без подключения к интернету.

Расшифровка аудио с помощью мобильного приложения

Android-приложение, которое поддерживает русский язык и умеет распознавать речь. Просто включите рядом с микрофоном ролик, в котором хотите преобразовать видео в текст.

Приложение под Android для транскрибации аудио

5. Расшифровка видео в текст с помощью YouTube

Когда вы ищете конвертер видео в текст, YouTube может оказаться последним сервисом, который придет к вам в голову. Однако многие успешно используют возможности видеохостинга для расшифровки видеозаписей. Все, что нужно, чтобы получить готовый текст из видео, загрузить ролик на сервис. YouTube автоматически сгенерирует субтитры для видео, которые можно будет скопировать и вставить в документ. Расшифрованный текст для видео готов!

Расшифровка видеофайлов с помощью сервиса YouTube

6. Расширения для браузеров

Найти бесплатное расширение для браузера, которое качественно может сделать из видео текст или расшифровать звуковую дорожку, задача не из легких. Те, кто готовы к экспериментам и небольшим денежным затратам, могут попробовать следующие плагины из нашего списка.

Полезное расширение для браузера Chrome с функцией распознавания голоса. Может использоваться для диктовки текстов для разных сайтов, даже для заполнения форм или оставления комментариев. Если рядом с микрофоном включить аудио или видео, приложение будет набирать текст в документе. Поддерживает более 120 языков. Пробная версия бесплатна. Тем, кто захочет полноценно пользоваться расширением, придется его купить.

Расшифровка аудио и звуковых дорожек с помощью браузера Chrome

Chrome-приложение с функцией распознавания голоса. Имеет поддержку более 60 языков, в том числе русского. Работает по тому же принципу, что и другие сервисы распознавания речи: вы диктуете или включаете запись, приложение набирает текст. Видео также можно расшифровать, если поднести устройство с записанным роликом близко к микрофону.

Расширение для Google Chrome, чтобы перевести аудио в текст

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

Расширение для браузера, которое умеет переводить аудио в печатный текст

7. Преобразование речи в текст в Windows

Владельцы подписки Office 365 могут использовать функции диктовки для преобразования аудио в текст. Для начала требуется войти в учетную запись и активировать микрофон. Затем необходимо включить функцию диктовки. Произнесенный в микрофон текст отобразится на экране.

Функция диктовки и распознавания речи в Office

Также владельцы ПК, у которых установлена ОС Windows 8 и 10, могут преобразовывать речь в текст безо всякого дополнительного ПО. Для этого необходимо активировать «Распознавание речи», а потом можно диктовать тексты прямо в документы.

Функция перевода аудио в текст в Microsoft Windows

Самостоятельная расшифровка

Ничто не заменит старой доброй ручной расшифровки видео и аудио, если нужны 100% точность и качество. Чтобы работа проходила эффективнее, существуют приложения и программы, облегчающие транскрибацию. Например, oTranscribe или уже упомянутый Express Scribe помогают видеть перед глазами аудио или видео, сразу вводить прослушанный текст, также имеют горячие клавиши для остановки и включения записи.

Если самостоятельно заморачиваться с расшифровкой лень, всегда можно обратиться к фрилансерам. На любой бирже фриланса можно найти исполнителей, которые помогут записать текст с видео или аудио за небольшую плату. Расшифровка одной минуты аудио или видео в среднем обойдется в 10 рублей.

Заключение

Перед каждым из нас однажды может остро встать вопрос, как перевести видео в текст или расшифровать аудио с минимальными усилиями с нашей стороны. Выбор способа транскрибации будет зависеть от материальных возможностей, срочности выполнения задачи и качества звука. Будьте готовы, что наилучший результат дают платные программы для преобразования видео в текст. А в некоторых случаях, когда качество записи очень плохое и слышны посторонние шумы, придется взяться за расшифровку самостоятельно или прибегнуть к услугам фрилансеров.

10 лучших сервисов для расшифровки аудио в текст

Транскрибация (расшифровка) – это метод перевода информации из аудио или видео в текстовый формат. Такой подход актуален для слабослышащих, при расшифровке интервью и создании субтитров (для тех, кому нужно посмотреть видеоролик или прослушать аудио без звука). Цель транскрибации – перевести речь в текстовый формат, который будет понятен любому человеку.

Для расшифровки аудио в текст сегодня используется профессиональный софт. О лучших программах для расшифровки аудио мы и поговорим в данной статье.

Google Docs

Google Docs как перевести запись с микрофона в текст

Google Docs – онлайн-сервис для работы с текстом и данными. Внутри платформы можно включить микрофон, который поможет перевести речь в письменный формат. Для его активации следует воспользоваться комбинацией клавиш Ctrl+Shift+S, затем выбрать язык и нажать на значок микрофона.

Увы, но сервис очень плохо справляется с тихой и шумной диктофонной записью, но отлично с диктовкой в микрофон. Главный недостаток – работает только в активном окне Google Docs, то есть наговорить что-то с другой вкладки или включить запись на компьютере не получится.

Плюсы:

  • бесплатный продукт;
  • автоматическое сохранение текста;
  • возможность сразу же отредактировать материал.

Минусы:

  • медленная расшифровка;
  • распознает не все слова: требуется хорошая диктовка, чтобы получить качественный текст;
  • не сможет распознать запись из другой вкладки браузера или плеера.

Операционная система: Web

Ссылка на сервис: Google Docs

Google Keep

Google Keep приложение для расшифровки аудио в текст

Google Keep – это мобильное приложение для заметок, с помощью которого можно также переводить голосовые записи в текст. Для этого нужно нажать на значок микрофона на панели инструментов. Разговор в аудиоформате будет сохранен вместе с расшифрованным текстом.

Для длительных записей Google Keep, к сожалению, не подойдет, потому что останавливает запись после коротких пауз в диалоге. Но его можно использовать, чтобы расшифровывать уже готовые записи по кускам.

По какой‑то причине распознавание голоса в Keep работает лучше, чем в Гугл-документах: приложение даже угадывает начало новой фразы и помечает его заглавной буквой.

Плюсы:

  • легко перевести голосовую запись через микрофон;
  • достаточно точно расшифровывает аудио.

Минусы:

  • нельзя записывать голосовые аудио с паузами;
  • работает только с микрофоном.

Операционная система: Android, iOS, Web

Ссылка на скачивание: Google Keep

Speechpad

Speechpad сервис для распознавания аудио в текст

Speechpad – бесплатный онлайн-инструмент, с помощью которого можно расшифровать голосовую запись. Работает исключительно со звуком из микрофона, поэтому следует позаботиться о качестве оборудования.

Поддерживается Google Chrome, но есть приложения для iOS и Android. Также возможна интеграция в Windows, Mac и Linux, чтобы обеспечить голосовой ввод в любом текстовом поле. Четкий звук понимает достаточно хорошо, плохой – крайне посредственно.

Плюсы:

  • бесплатная программа на русском языке;
  • можно отредактировать текст;
  • есть инструкции по работе с сервисом;
  • воспринимает звуки с соседних вкладок браузера – можно работать с одного устройства.

Минусы:

  • транскрибация из файла требует хорошего качества звука, в ином случае расшифровка будет неполной.

Операционная система: Web

Ссылка на сервис: Speechpad

RealSpeaker

RealSpeaker сервис для распознавания аудио в текст

RealSpeaker – платный сервис для перевода аудиофайлов в текстовый контент. Работает исключительно с готовыми файлами, поэтому использовать микрофон, как в предыдущих случаях, не получится.

Перевод аудио в текст бесплатен только в том случае, если запись длится не более 1.5 минут. Далее – 8 руб. за минуту, максимальная продолжительность аудио – 180 мин. Поддерживается более 40 языков, включая русский.

Для работы с сервисом достаточно выбрать язык озвучки, загрузить файл, рассчитать время расшифровки и оплатить услугу.

Плюсы:

  • есть возможность работать с файлами;
  • простой в использовании сервис.

Минусы:

  • платный сервис;
  • не позволяет надиктовать текст в микрофон;
  • в течение 24 часов файл доступен всем, и его нельзя скрыть.

Операционная система: Web

Ссылка на сервис: RealSpeaker

Dictation

Dictation сервис для распознавания аудио в текст

Dictation – бесплатный онлайн-сервис, позволяющий распознавать запись с микрофона. Понимает не только русские слова, но и десятки команд: тире, новую строку и так далее.

Из недостатков – распознает только качественную речь. Если запись была сделана на слабенький микрофон, то получить хороший результат не получится.

Плюсы:

  • быстрая отправка результата на почту и в социальные сети;
  • есть встроенный редактор;
  • отлично и максимально точно справляется с хорошо записанной речью.

Минусы:

Операционная система: Web

Ссылка на сервис: Dictation

oTranscribe

oTranscribe сервис для распознавания аудио в текст

Бесплатный веб-сервис для ручной транскрибации текста. Работает как с аудио, так и видео, в том числе с YouTube-роликами. Открывает множество форматов: WAV, MP3, MPEG, WEBM и другие. Можно назначить горячие клавиши для управления воспроизведением. Есть автосохранение, простой текстовый редактор, интерактивные метки, упрощающие навигацию.

Плюсы:

  • минималистичный редактор текста;
  • автоматически сохраняет документ в формате HTML;
  • для удобства пользования можно настроить горячие клавиши.

Минусы:

  • нет автоматизации процесса, все нужно делать вручную.

Операционная система: Web

Ссылка на сервис: oTranscribe

Transcribe

Transcribe сервис для распознавания аудио в текст

Из особенностей можно отметить поддержку множества форматов – 3GP, AAC, AIF, AIFF, AMR, CAF, DSS, FLAC, M4A, MOV, MP3, MP4, OGG, WAV, WEBM, WMA, WMV. Максимальный размер файла – 6 Гб или 420 минут.

Плюсы:

  • простой в управлении сервис;
  • есть редактор текста в самостоятельной расшифровке;
  • поддерживает ссылки с YouTube;
  • есть таймкоды;
  • файлы можно загрузить как с ПК, так и с облачных сервисов;
  • есть подробная инструкция;
  • поддерживает большое количество языков и диалектов;
  • есть горячие клавиши для быстрой работы.

Минусы:

Операционная система: Web

Ссылка на сервис: Transcribe

Dragon Dictation

Dragon Dictation приложение для распознавания аудио в текст

Dragon Dictation – платная программа для iOS-устройств, способная распознавать продиктованный текст с микрофона. Есть тестовый период на неделю, далее необходимо оформить подписку – $14.99 в месяц или $149 единоразово.

Плюсы:

Минусы:

  • нельзя расшифровать файлы или ссылки из YouTube;
  • платное приложение.

Операционная система: iOS

Ссылка на скачивание: Dragon Dictation

Speechnotes

Speechnotes сервис для распознавания аудио в текст

Speechnotes – онлайн-сервис для браузеров и приложение для Android. В онлайн-версии расшифровка файлов платная – $0.1 за минуту. В приложении же есть бесплатный тестовый период, после его окончания нужно приобрести подписку за 69 рублей в месяц. Также в нем можно сохранять файлы в облако, отправлять их в соцсети и по почте. Онлайн-сервис воспринимает знаки препинания, а приложение распознает еще и смайлики.

Плюсы:

  • сохраняет документ в форматах doc и txt, позволяет работать с PDF;
  • простой интерфейс;
  • есть редактор текста;
  • более 50 языков.

Минусы:

Операционная система: Web, Android

Ссылка на сервис: Speechnotes, на Android: Speechnotes

Otter

Otter сервис для распознавания аудио в текст

Последний в нашем списке инструмент для расшифровки аудио в текст – это Otter. Работает только с английским языком, но у сервиса есть отличительная особенность: он может запоминать голос диктора – такая возможность позволяет разделять реплики в записях с несколькими собеседниками.

Также можно загрузить аудио или видео с английской речью, в результате чего сервис выведет текст. Некоторые спорные моменты из-за произношения могут расшифровываться неправильно.

Программа будет полезна, если вы работаете с англоязычными источниками.

Плюсы:

  • есть функция запоминания голоса;
  • бесплатный функционал;
  • легко распознает аудио или видео на английском языке.

Минусы:

Операционная система: Web, iOS

Ссылка на сервис: Otter

Заключение

Пилу на выходе ЦАП увидели (и при желании услышали), теперь хочется вывести звуки, более приятные для наших ушей. «Музыку давай»! Однако, не стоит торопиться. Контроллеру нужно предоставить поток MP3, который он сможет декодировать. Сегодня мы подключим карту памяти SD, освоим драйвер файловой системы и напоследок — запустим декодер MP3.

Итак, музыкальные файлы будем читать с карты памяти SD. Это удобно, практично и недорого.

Настройка файловой системы

После появления в свободном доступе нескольких замечательных библиотек поддержкой файловой системы в микроконтроллерном устройстве сейчас никого не удивишь. Не будем оригинальничать, и воспользуемся драйвером FatFs от великого ChaN`a. Расписывать достоинства/недостатки и давать описание смысла не вижу, в Сети есть масса подобной и подробной информации. Рассмотрим особенности применения.

1. В нашем проекте заводим ещё одну папку FatFs, в которую помещаем основные файлы библиотеки FatFs: ff.c, ff.h, ffconf.h, integer.h и diskio.h.

2. Выполняем настройку драйвера в файле ffconf.h. Большинство параметров можно оставить пока без изменений. Отдельно только указываем кодовую страницу


3. Описываем аппаратно-зависимые функции доступа к карте памяти. Здесь могут возникнуть некоторые затруднения, — с нуля драйвер для карты писать неблагодарное дело. Однако Martin THOMAS в сообществе с ChaN`ом уже сделали всё за нас. Из архива stm32_chanfat_mthomas_20100704b.zip берём файл sd_spi_stm32.c, это и есть нужный драйвер.

Версия «из коробки» доработок практически не требует, так как она поддерживает и нашу отладочную плату Olimex STM32-P103. Необходимо только обеспечить вызов функции disk_timerproc() с интервалом 10 мс. Например, можно использовать отдельный аппаратный таймер, у нас свободных таймеров предостаточно. Но мы воспользуемся для разнообразия сервисом программного таймера, предоставляемым операционной системой CoOS:


При использовании таймера CoOS не забываем, что callBack-функция disk_timerproc() выполняется в потоке системного прерывания SysTimer. Поэтому она должна быть короткой и быстрой, а также не должна использовать API-функции ОС. Собственно, этим условиям функция вполне удовлетворяет.

Ещё модулю FatFs нужно знать текущее системное время. Это совсем просто:

Тест-драйв файловой системы

Посмотрим, как быстро выполняются те или иные файловые операции. Тестовая программа имеет следующий упрощённый вид:


Контроль времени выполним при помощи аппаратного таймера. Результаты измерений выведем в терминальное окно через отладочный UART.

Результаты:
  • при работе с SPI использован программный поллинг;
  • использован побайтный доступ к данным, _WORD_ACCESS = 0

Проверим возможности по разгону. Сначала укажем _WORD_ACCESS = 1 (не пропадать ведь добру — 32 разрядам контроллера):

А практически ничего не изменилось. Даже стало немного хуже (пока не понял почему, возможно — невыровненный доступ к 32-битным словам). Только прошивка уменьшилась на 532 байта.

Совсем другое дело. SPI работает со скоростью 72/8 = 9 МГц, что примерно соответствует полученной скорости чтения. Не только быстрее читаем, но и экономим процессорное время. Во время транзакции DMA можем вернуть управление операционной системе и занять проц другими полезными делами.

Продолжим эксперименты. Уменьшим порцию чтения до 512 байт:

Скорость упала в 1,5 раза. Увеличились накладные расходы на чтение сектора. Смотрим осциллограмму:



Чтению сектора предшествует операция выбора этого сектора. Причём длительность этого интервала определяется самой картой памяти, драйвер FatFs лишь опрашивает её готовность. Ну а далее выполняется «честное» чтение 512 байт.
Мораль: если нужно максимальное быстродействие, файл необходимо читать блоками максимального размера. Ну собственно, про это и так все знают (или догадываются).

Далее пробуем чтение блоков, невыровненных по границе сектора. Для чего предварительно воспользуемся функцией f_lseek:

Скорость упала, но не существенно. Оказывается, при невыровненном чтении функцией f_read используются результаты предыдущего цикла, которые хранятся в буфере buf файловой структуры FIL. И читать по два сектора каждый раз не нужно, что вполне логично. Значит, при последовательном чтении файла можно особо не беспокоиться о выравнивании порции данных по границе сектора, потери времени будут незначительными.
При рандомном чтении или при использовании опции _FS_TINY читать, конечно, лучше строго по секторам.
Если кто заинтересуется дальнейшими исследованиями, прикладываю проект mp3_player_step3_1.

и наконец, долгожданное…

Декодирование MP3

Формат MPEG layer 3 защищён патентами и до сих пор приносит прибыль его авторам. Потому конторы, купившие лицензии, не спешат делиться с народными массами своими наработками. Но есть и приятное исключение.
В далёком 2002 году компания Real Networks предоставила в свободный доступ собственные наработки в традиционной для неё области потокового вещания (см. статью в Компьютерре). Все открытые проекты компания собрала под единым названием «Helix». В частности, были открыты исходники популярного RealPlayer, содержащего в свою очередь, вполне удачный декодер MP3.
На просторах Интернета можно найти ещё несколько бесплатных и открытых декодеров (LibMAD, разработанный примерно в те же годы, есть примеры самодельных плейеров; mpg123 — порта для ARM не видел; ffmpeg — вообще круть, мега аудио-видеокодек, без поллитры не разобраться).

Ну а мы воспользуемся проверенным вариантом — Хеликсом (или, точнее, «Хилексом»).

Настройка декодера
1. Качаем архив с исходниками RealPlayer. Внутри (datatype\mp3\codec\) будет лежать нужный нам декодер. Воспользуемся вариантом, основанным на целочисленной арифметике — папка fixpt.
Копируем в наш проект следующие файлы:

и начинаем адаптировать их под наш проект и наоборот.

1. Декодер использует память ОЗУ, выделяемую из кучи во время инициализации. За выделение памяти отвечает функция AllocateBuffers в модуле buffers.c. Соответственно в нашем проекте нужно реализовать поддержку функций malloc и free.

Можем использовать соответствующие функции библиотеки newlib либо сторонние библиотеки. CoOS в этом вопросе нам тоже может помочь. Для начала нужно включить поддержку памяти и задать размер области, отводимый для кучи:

Работа с выделяемой памятью в CoOS практически ничем не отличается от стандарного malloc/free, только нужно добавить к названию функций приставку «CoK»:

Чтобы не ломать исходники декодера-Хеликса, определяем функции в отдельном файле heap.h:
и подключаем его куда необходимо.

Если использование выделяемой памяти нежелательно или проблематично, то в Сети можно найти модификацию модуля buffers.c от Kasper Jepsen со статическими переменными.

2. В алгоритме декодирования используется полифазный фильтр. Это одна из наиболее ресурсоёмких функций декодера. Авторы декодера предлагают несколько вариантов реализации функций PolyphaseStereo и PolyphaseMono в зависимости от аппаратного обеспечения.

Во-первых, есть сишная реализация, файл polyphase.c. Однако она заточена под взрослые процессоры x86 (см. ассемблерные вставки MADD64/SHL64/SAR64). Фтопку его.

Во-вторых, для контроллеров ARM необходимые функции полностью написаны на ассемблере. Нам предлагается на выбор для варианта: asmpoly.s и asmpoly_gcc.s, отличающиеся синтаксисом. Судя по названию, нужно использовать второй. Переименовываем расширение файла в «S», чтобы Eclipse воспринял его как ассемблерный файл. И снова проблема. Не переваривает GCC-компилятор этот файл. Видимо, граната GCC у нас не той системы. Покопавшись в примерах, нашёл подходящий исходник с названием asmpoly_thumb2.S.

И ещё один файл asmmisc.s оказался ненужным. Единственная его функция уже описана в модуле assembly.h. Кроме того, inline-функции (в assembly.h) не требуют лишних команд перехода/возврата и поэтому работают заметно быстрее.

На этом этапе настройку декодера можно считать законченной и приступить к его запуску.

API-функции декодера

Все необходимые для работы функции описаны в заголовочном файле mp3dec.h.

1. Инициализация декодера
Вызывается однократно при инициализации драйвера. Функция отвечает за выделение оперативной памяти для декодера (используется malloc). Возвращает указатель на её начало. Если возвращено значение NULL, значит выделить требуемый размер памяти не удалось.

2. Деинициализация декодера
Выполняется обратная операция — освобождение памяти декодера. В качестве параметра передаётся указатель на выделенную ранее память.

3. Поиск следующего фрейма
Функция осуществляет поиск маркера начала фрейма в последовательности байт.
Возвращает позицию первого байта синхрослова (начала фрейма) относительно начала буфера. Возвращает -1, если синхрослово не найдено.

  • указатель на выделенную память декодера hMP3Decoder;
  • указатель на структуру с описанием фрейма mp3FrameInfo;
  • указатель на буфер данных с первым байтом заголовка (синхрослово) buf.
  • указатель на выделенную память декодера hMP3Decoder;
  • двойной указатель на буфер с кадром MP3 inbuf;
  • указатель счётчика данных во входном буфере bytesLeft;
  • указатель на выходной буфер, куда будут помещаться дешифрованные сэмплы outbuf;
  • флаг useSize.

6. Чтение параметров последнего фрейма
Функция заполняет структуру mp3FrameInfo в соответствии с параметрами последнего декодированного фрейма. Функция должна вызываться после успешного декодирования текущего фрейма. В отличии от вызова функции MP3GetNextFrameInfo, дополнительно указывается количество сэмплов в текущем фрейме (помещённых в выходной буфер outbuf).

Количество семплов левого и правого каналов суммируется. Например, после декодирования фрейма MPEG1 Layer3 в буфере будет лежать 1152*2=2304 сэмплов, а минимально необходимый размер буфера соответственно должен составлять 2304*2=4608 байт.

Подробнее про формат заголовка фрейма и про сам формат MP3 можно немного почитать в Википедии и, например, на Хабре.

Алгоритм декодирования


Перечисленные функции декодера применяем в следующем порядке:

Кстати: формат сэмплов, выходящих из декодера, не подходит для встроенного ЦАП. Декодер даёт знаковые числа -32768..+32767, а ЦАП понимает 0. 65535. Поэтому результирующие значения сэмплов перед подачей на ЦАП необходимо сместить на 32768 ед.

Код см. в архиве mp3_player_step3_2.zip. Компилируем, запускаем и анализируем…

При выключенной оптимизации кода (-O0) декодирование требует более 80%, контроллер не справляется с задачей, заикаясь и давясь неоптимизированным кодом. Поэтому обязательно включаем оптимизацию, принося в жертву удобство отладки.

Первый музыкальный фрагмент:

BitRate = 320 kbit/s
SampleRate = 44100 s/s
CPUspeed = 72 MHz
Compiler Optimization = Os
  • период прерывания DMA 26,1 мс, что соответствует 1152 сэмплам при дискретизации 44100 Гц;
  • время чтения данных с карты памяти 1,5-2 мс (за один фрейм «переваривается» 1070 байт);
  • время декодирования (функция MP3Decode) 11..13 мс, что составляет примерно 40-50% загрузки контроллера.
BitRate = 128 kbit/s
SampleRate = 44100 s/s
CPUspeed = 72 MHz
Compiler Optimization = Os
  • время декодирования уменьшилось на 1 мс (10..12 мс).

Третий музыкальный фрагмент:

BitRate = 32 kbit/s
SampleRate = 44100 s/s
CPUspeed = 72 MHz
Compiler Optimization = Os
  • длительность декодирования (функция MP3Decode) 7..9 мс, это 30-35% загрузки контроллера.

Ну что ж, у нас остаётся ещё примерно 30% свободного процессорного времени. Вполне неплохо. Теперь можно и расслабиться, поморгать светодиодами, нарисовать что-нибудь на LCD-экране, опросить клавиатуру и сделать массу других нужных и ненужных действий.


Продолжаем эксперименты. Воспроизведение файла 320 кбит/с при тактировании 72 МГц (FLASH_LATENCY=2) и 36 МГц (FLASH_LATENCY=0):

Впритык, но справляется. Оставшиеся 20% ресурсов уходят на чтение файла, обслуживание ЦАП и прочие мелочи.


И напоследок, проверим опции оптимизации компилятора GCC (на файле с битрейтом 32 кбит/с):

Как видим, опции -O2 и -O3 практически бесполезны. -O1 даёт самый быстрый код, -Os ему мало уступает, экономя однако ещё 10% памяти FLASH. При выключенной оптимизации -O0 контроллер не справится с декодированием высоких битрейтов.

1. Изначально данный проект планировался как проигрыватель трекерной музыки, а воспроизведение MP3 стало его побочной функцией. На текущий момент вполне адекватно проигрываются файлы формата MOD. Если Сообщество заинтересуется, можно будет рассмотреть данное направление подробнее.
2. Заказал плату STM32F4DISCOVERY. Как придёт, переложу проект на его основу. Интересно будет сравнить его возможности и производительность. Плюс на борту уже имеется аудиоЦАП.
3. Если будет время, можно запустить декодер LibMAD и сравнить его с Helix.

  • декодирование MP3 вынесено в отдельную задачу;
  • реализована задача-проигрыватель, отвечающая за общую координацию работы проигрывателя, открытие/закрытие файлов, инициализацию/запуск/деинициализацию декодера;
  • реализована задача опроса клавиатуры; единственная кнопка выполняет функцию «NEXT»;
  • добавлена поддержка воспроизведения монофонического звука.

Программа проигрывает файлы из директория "/music", при нажатии кнопки переходит к проигрыванию следующего файла. Воспроизведение файлов осуществляется в порядке их размещения на карте памяти. При необходимости проигрывания файлов по алфавиту необходимо предварительно создать список файлов и отсортировать его. Размер списка будет ограничен количеством свободной RAM-памяти.

upd2
Ещё вариант: предварительно составить на Большом Брате плейлист (с помощью того же винампа) и научить наш плейер играть файлы по порядку из этого листа.

Yandex.Music Cache Decoder
версия: 2.1

Последнее обновление программы в шапке: 07.01.2019

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Краткое описание:
Декодирование кэша приложения Яндекс.Музыка.

Описание:
Приложение, предназначеное для декодирования скачанного кэша через Яндекс.Музыка. Сохраняет расшифрованные файлы в другой каталог и добавляет тег к каждому аудиофайлу (если есть рут).

Требуется Android: 4.1 и выше
Русский интерфейс: Да

Прикрепленный файл

версия: 2.0
ymcd-v2.0.apk ( 1.65 МБ )

Прикрепленный файл

1.0: ymcd.apk ( 1.12 МБ )

Прикрепленный файл

1.1: ymcd-1.1.apk ( 1.33 МБ )

Прикрепленный файл

1.2: ymcd-v1.2.apk ( 1.36 МБ )

Прикрепленный файл

1.3: ymcd-v1.3.apk ( 1.37 МБ )

Прикрепленный файл

1.4: ymcd-v1.4.apk ( 1.37 МБ )

Прикрепленный файл

1.5: ymcd-v1.5.apk ( 1.48 МБ )

Прикрепленный файл

1.6: ymcd-v1.6.apk ( 1.51 МБ )

Прикрепленный файл

1.7: ymcd-v1.7.apk ( 1.63 МБ )

Читайте также: