C# Распаковать MP3 в текст

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

Согласно TRiD (http://mark0.net/soft-trid-e.html) файл на 100% соответствует MP3, чего бы это ни стоило, вот первые несколько байтов файла:

FF FF AD 00 C0 7E AA 00 21 C0 AD 00 AE 02 00 00 00 00 00 00 0C 86 00 
00 52 81 00 00 00 00 00 00 CC 01 00 00 42 54 47 42 91 00 00 00 57 01 00 40 
32 00 30 00 34 12 EE 1F 00 00 01 00 00 02 01 04 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 54 1C 73 5A 00 00 49 02 FF 00 
02 00 AF 89 00 00 00 00 00 00 6B 04 00 00 56 1C 73 5A B3 06 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00

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

Если я хочу сделать это со сжатым файлом, мне нужно сначала распаковать весь файл, а затем сохранить только его часть, или я могу сказать ему, чтобы он взял первые 30 КБ файла, распаковал то, что он нашел, и записал это в файл? Я знаю, что будет много дополнительных символов Unicode / control, но пока строковые значения можно распечатать, я выясню все остальное.

public static FileStream stream = new FileStream(@"DB.dat", FileMode.Open, FileAccess.Read);
public static FileStream shortFile = null;
int limit = 30000;

public MainWindow()
{
    byte[] block = new byte[limit];

    using (FileStream fs = File.Create("tempfile.dat"))
    {
        stream.Position = 0;
        stream.Read(block, 0, limit);

        fs.Write(block, 0, block.Length);

    }

    InitializeComponent();
}

Обновлено: добавление информации об идентификаторе для образца файла http://64.72.211.216/ZIPCODE.dat

TrID/32 - File Identifier v2.24 - (C) 2003-16 By M.Pontello
Definitions found:  10674
Analyzing...

Collecting data from file: ZIPCODE.dat
100.0% (.MP3) MP3 audio (1000/1)
         Mime type  : audio/mpeg3
       Definition   : audio-mp3.trid.xml
         Files      : 34
       Author       : Marco Pontello
         E-Mail     : [email protected]
         Home Page  : http://mark0.net

Я не могу понять, насколько это хорошая идея. Произвольно редактировать фреймы MP3 по тексту? Хм. Из интереса, каков ваш предполагаемый сценарий использования?

spender 21.09.2018 17:02

Формат сжатия MP3 применяется к тексту, который хранится в базе данных.

Alan 21.09.2018 17:13

Я сбит с толку больше, чем когда-либо. MP3 - это формат с потерями для аудио, специально адаптированный к тонкостям человеческого уха. Вы никогда не отправите текст в оба конца через MP3 ... это просто не сработает.

spender 21.09.2018 17:15

Т.е. Данные PCM, которые подаются в компрессор MP3, существенно отличаются от данных PCM, которые передаются из декомпрессора MP3. Для человеческого уха это может звучать одинаково, но на этом сходство заканчивается.

spender 21.09.2018 17:21

Вот образец 64.72.211.216/ZIPCODE.dat

Alan 21.09.2018 17:34

Это не файл MP3. Вы были сбиты с толку из-за неправильной идентификации. Если бы это был настоящий mp3, вы могли бы переименовать его в coolmusic.mp3 и не ожидать ошибок при воспроизведении в аудиоплеере. Это более реалистичный тест, чем тот TRiD, который вы используете. Такое бывает? Что вы на самом деле пытаетесь здесь сделать? Расшифровать файлы неизвестного происхождения? Откуда на самом деле берутся эти данные и почему вы не знаете, что это такое?

spender 21.09.2018 17:41

Я знаю, что на самом деле это не музыкальный файл MP3, но есть формат сжатия, используемый MP3, который можно было бы использовать по-другому, верно? Мой первый инструмент извлекает данные из базы данных C-Tree Plus, которой более 20 лет, и после того, как она заработала, я подумал, что посмотрю на их новый формат базы данных, чтобы увидеть, на что способен мой инструмент. В своей работе я подключаюсь к ШИРОКОМУ массиву баз данных (Sybase, Mysql, C-TreeACE, C-Tree Plus, ElevateDB, Cache, MSSQL, список которых продолжает расти). Я всегда знаю, откуда взялся файл, но я ищу, как декодировать строковые значения, тогда я смогу выяснить структуру позже.

Alan 21.09.2018 18:16

Похоже, это было сжатие zlib, я опубликую новый вопрос и задам соответствующий вопрос. docs.faircom.com/doc/v10ace/55874.htm

Alan 21.09.2018 18:21

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

spender 21.09.2018 19:26

Он не похож ни на MP3, ни на ZIP. Он блочно-ориентированный, с блоками размером с дисковый блок (512 байт). Я не знаю, что это такое, но это исключает многие хорошо известные типы файлов.

harold 22.09.2018 09:16
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
10
159
0

Другие вопросы по теме