Hip-Hop.Ru - Центральный сайт о Хип Хоп культуре в Рунете

Разговоры
  Hip-Hop.Ru Форум Комьюнити Сообщения за день Баня Поиск
 
пабмастер
Аватар для Le1T
Сообщения: 6,739
Регистрация: 29.12.2010
Старый пост, нажмите что бы добавить к себе блог 22 октября 2017, 14:07
  #1 (ПС)
Как устроен формат mp3?
https://www.youtube.com/watch?v=z2EUT4gwkr4

offline
Ответить с цитированием
активный пользователь
Аватар для GUNKIN
Сообщения: 2,506
Регистрация: 20.06.2013
Откуда: Воронеж
Старый пост, нажмите что бы добавить к себе блог 22 октября 2017, 14:11
ВКонтакте Отправить сообщение через twitter для GUNKIN
  #2 (ПС)
и что ты предлагаешь тут обсудить?

offline
Ответить с цитированием
пабмастер
Аватар для Le1T
Сообщения: 6,739
Регистрация: 29.12.2010
Старый пост, нажмите что бы добавить к себе блог 22 октября 2017, 14:16
  #3 (ПС)
-Цитата от все хотят мой реп Посмотреть сообщение
и что ты предлагаешь тут обсудить?
чуть промазал, думал, что это раздел компуктер и интернет

offline
Ответить с цитированием
активный пользователь
Сообщения: 14,305
Регистрация: 12.11.2014
Старый пост, нажмите что бы добавить к себе блог 22 октября 2017, 14:20
  #4 (ПС)
А я придумал открывать файл через текст редактор и продавать майки с любимыми песнями на заказ раскодом

offline
Ответить с цитированием
он же пики мольер
Аватар для PIKI
Сообщения: 21,439
Регистрация: 20.06.2005
Откуда: Казахстан актау
Старый пост, нажмите что бы добавить к себе блог 22 октября 2017, 14:26
ВКонтакте
  #5 (ПС)
mp 3 хороший формат он мне нравица

offline
Ответить с цитированием
трупашокк RIP
Аватар для Нэо
Сообщения: 6,572
Регистрация: 23.07.2016
Откуда: Нэосибирск
Старый пост, нажмите что бы добавить к себе блог 22 октября 2017, 14:43
  #6 (ПС)
не слишал такого

offline
Ответить с цитированием
Más que nada
Аватар для Barry Cada
Сообщения: 8,537
Регистрация: 09.12.2009
Откуда: Местный
Старый пост, нажмите что бы добавить к себе блог 22 октября 2017, 14:51
  #7 (ПС)
В смысле как устроен? Как любой кодек устроен? Набор цифер 0 и 1 в определённой последовательности при правильной расшифровке даёт тебе информацию, чё тут блять сложного? Азбука Морзе как устроена?

offline
Ответить с цитированием
пабмастер
Аватар для Le1T
Сообщения: 6,739
Регистрация: 29.12.2010
Старый пост, нажмите что бы добавить к себе блог 22 октября 2017, 14:56
  #8 (ПС)
-Цитата от Barry Cada Посмотреть сообщение
В смысле как устроен? Как любой кодек устроен? Набор цифер 0 и 1 в определённой последовательности при правильной расшифровке даёт тебе информацию, чё тут блять сложного? Азбука Морзе как устроена?
0ли и 1цы - это фундамент.
Чтобы построить здание в виде спирали недостаточно дедовских брусков-балок.
Так что просмотреть видео обязательно для большего понимания.

offline
Ответить с цитированием
Más que nada
Аватар для Barry Cada
Сообщения: 8,537
Регистрация: 09.12.2009
Откуда: Местный
Старый пост, нажмите что бы добавить к себе блог 22 октября 2017, 15:01
  #9 (ПС)
-Цитата от Le1T Посмотреть сообщение
-Цитата от Barry Cada Посмотреть сообщение
В смысле как устроен? Как любой кодек устроен? Набор цифер 0 и 1 в определённой последовательности при правильной расшифровке даёт тебе информацию, чё тут блять сложного? Азбука Морзе как устроена?
0ли и 1цы - это фундамент.
Чтобы построить здание в виде спирали недостаточно дедовских брусков-балок.
Так что просмотреть видео обязательно для большего понимания.
Бритвой Оккама по твоему видео, не множь сучности тут мне нихуя

offline
Ответить с цитированием
Слушаю Рэп..
Сообщения: 10,577
Регистрация: 28.05.2011
Откуда: Приволжский автономный округ
Старый пост, нажмите что бы добавить к себе блог 22 октября 2017, 15:06
  #10 (ПС)
Крутой канал. Я тебе ещё посоветую каналы" дай пять" , "научпок"

offline
Ответить с цитированием
пабмастер
Аватар для Le1T
Сообщения: 6,739
Регистрация: 29.12.2010
Старый пост, нажмите что бы добавить к себе блог 22 октября 2017, 15:06
  #11 (ПС)
-Цитата от Barry Cada Посмотреть сообщение
-Цитата от Le1T Посмотреть сообщение
-Цитата от Barry Cada Посмотреть сообщение
В смысле как устроен? Как любой кодек устроен? Набор цифер 0 и 1 в определённой последовательности при правильной расшифровке даёт тебе информацию, чё тут блять сложного? Азбука Морзе как устроена?
0ли и 1цы - это фундамент.
Чтобы построить здание в виде спирали недостаточно дедовских брусков-балок.
Так что просмотреть видео обязательно для большего понимания.
Бритвой Оккама по твоему видео, не множь сучности тут мне нихуя
Показать скрытый текст
11010000100100011101000010110000110100011000000011 01000010111000110100001011101011010000101100001101 00001011010011010000101100000010110000100000110100 00101111011101000110000011001000001101000010111111 11010000101111101101000110000001110100001011110011 01000010111110110100011000001011010001100000001101 00001011100000100000110100001011001011010000101110 00110100001011010011010000101101011101000010111110 00101100001000001101000110000101110100011000001111 01000010111011110100001011010100100000110100011000 00101101000010110101110100001011000111010000101101 010010110000100000110100001011000000111111


Добавлено через 2 минуты 19 секунд
-Цитата от MaGnitar Посмотреть сообщение
Крутой канал. Я тебе ещё посоветую каналы" дай пять" , "научпок"
с научпоком с детства

offline
Ответить с цитированием
Куртик
Guest
Сообщения: n/a
Старый пост, нажмите что бы добавить к себе блог 22 октября 2017, 15:28
  #12 (ПС)
лучше бы мэси эту тему закрыл а не пики

Ответить с цитированием
теперь тоже сми...
Аватар для ozon671games
Сообщения: 2,104
Регистрация: 23.06.2009
Старый пост, нажмите что бы добавить к себе блог 22 октября 2017, 18:01
  #13 (ПС)
-Цитата от Le1T Посмотреть сообщение
-Цитата от Barry Cada Посмотреть сообщение
В смысле как устроен? Как любой кодек устроен? Набор цифер 0 и 1 в определённой последовательности при правильной расшифровке даёт тебе информацию, чё тут блять сложного? Азбука Морзе как устроена?
0ли и 1цы - это фундамент.
Чтобы построить здание в виде спирали недостаточно дедовских брусков-балок.
Так что просмотреть видео обязательно для большего понимания.
Этот дурачек не сильно дальше в своих объяснениях зашел

offline
Ответить с цитированием
Что ты смотришь?
Аватар для Eazy-L
Сообщения: 3,886
Регистрация: 30.07.2009
Откуда: Нижний Тагил
Старый пост, нажмите что бы добавить к себе блог 22 октября 2017, 19:28
Домашняя страница LastFm Отправить сообщение через twitter для Eazy-L
  #14 (ПС)
Он устроен примерно так же, как ogg, но только хуже. В наше время прогрессивных технологий, он вроде бы и на фиг уже не нужен. Если бы не такое огромное количество различных устройств воспроизведения, которые его поддерживают, а более хорошие форматы со сжатием без потерь не поддерживают. Прикольно только то, что нелдавно срок патентов на него закончился и теперь он свободный формат стал. Почти, как ogg в плане свободы лицензии. Моджет быть скоро даже в дистрибутиве Линуха "Fedora" будет поставляться сразу "из коробки" без подключения сторонних репозиториев и установки дополнительных пакетов из сети.

offline
Ответить с цитированием
пабмастер
Аватар для Le1T
Сообщения: 6,739
Регистрация: 29.12.2010
Старый пост, нажмите что бы добавить к себе блог 22 октября 2017, 20:20
  #15 (ПС)
-Цитата от Eazy-L Посмотреть сообщение
Он устроен примерно так же, как ogg, но только хуже. В наше время прогрессивных технологий, он вроде бы и на фиг уже не нужен. Если бы не такое огромное количество различных устройств воспроизведения, которые его поддерживают, а более хорошие форматы со сжатием без потерь не поддерживают. Прикольно только то, что нелдавно срок патентов на него закончился и теперь он свободный формат стал. Почти, как ogg в плане свободы лицензии. Моджет быть скоро даже в дистрибутиве Линуха "Fedora" будет поставляться сразу "из коробки" без подключения сторонних репозиториев и установки дополнительных пакетов из сети.
нет смысла хранить все во флаке.
Хочешь качества - слушай пластинки.
АСС предостаточно на сегодняшний день, ибо м4а от флака на слух неотличим

offline
Ответить с цитированием
Что ты смотришь?
Аватар для Eazy-L
Сообщения: 3,886
Регистрация: 30.07.2009
Откуда: Нижний Тагил
Старый пост, нажмите что бы добавить к себе блог 22 октября 2017, 21:27
Домашняя страница LastFm Отправить сообщение через twitter для Eazy-L
  #16 (ПС)
-Цитата от Le1T Посмотреть сообщение
нет смысла хранить все во флаке.
Хочешь качества - слушай пластинки.
Как будто винил лучше качеством звучания современных цифровых форматов аудио, записанных и отмастеренных на современном оборудовании. У меня много совкового винила дома до сих пор хранится батиного и мне есть с чем сравнивать. И не только совкового. Есть альбом Metallica на виниле, который привезён из за бугра был в качестве подарка бате. Про более хорошее качество звучания винила — это всё мифы какие-то. Наверное, его придумали стариканы, у которых раньше солнышко светило ярче и трава была зеленее, а мы все поколение пепси и придурки. Такие ведь всегда были и дело не в молодом поколении, а в том что это они пердуны старые.

Показать скрытый текст
-
Нынешняя молодежь привыкла к роскоши, она отличается дурными манерами, презирает авторитеты, не уважает старших, дети спорят со взрослыми, жадно глотают пищу, изводят учителей.
(Сократ, V в. до н.э.)
-
Я утратил всякие надежды относительно будущего нашей страны, если сегодняшняя молодежь завтра возьмет в свои руки бразды правления. Ибо эта молодежь невыносима, невыдержанна, просто ужасна.
(Гесиод, 720 год до н.э.)

offline
Ответить с цитированием
Аватар для vadik_kot
Сообщения: 46,353
Регистрация: 10.05.2009
Старый пост, нажмите что бы добавить к себе блог 22 октября 2017, 22:05
ВКонтакте
  #17 (ПС)
если ебануть на вавку максимайзера (на -1dB) и сохранить потом в mp3, то после конвертации в mp3 - синусоида звука уже не будет такой ровной, что-то будет заходить за рамки -1dB, наглядно - на картинках

wav, mp3

но по сути разницы в качестве нет, я по-крайней мере не слышу

 
Фотографии:
(168.0 Кбайт / 118 просм.)
(173.8 Кбайт / 116 просм.)
 
online
Ответить с цитированием
☠☠☠
Аватар для Жертва Системы
Сообщения: 9,662
Регистрация: 29.12.2010
Откуда: Хуета
Старый пост, нажмите что бы добавить к себе блог 22 октября 2017, 22:06
  #18 (ПС)
Говорят поддержку форматпа емпетри прекратили, а вот и пруф
http://tass.ru/nauka/4252842

offline
Ответить с цитированием
Más que nada
Аватар для Barry Cada
Сообщения: 8,537
Регистрация: 09.12.2009
Откуда: Местный
Старый пост, нажмите что бы добавить к себе блог 23 октября 2017, 04:56
  #19 (ПС)
-Цитата от Le1T Посмотреть сообщение
-Цитата от Eazy-L Посмотреть сообщение
Он устроен примерно так же, как ogg, но только хуже. В наше время прогрессивных технологий, он вроде бы и на фиг уже не нужен. Если бы не такое огромное количество различных устройств воспроизведения, которые его поддерживают, а более хорошие форматы со сжатием без потерь не поддерживают. Прикольно только то, что нелдавно срок патентов на него закончился и теперь он свободный формат стал. Почти, как ogg в плане свободы лицензии. Моджет быть скоро даже в дистрибутиве Линуха "Fedora" будет поставляться сразу "из коробки" без подключения сторонних репозиториев и установки дополнительных пакетов из сети.
нет смысла хранить все во флаке.
Хочешь качества - слушай пластинки.
АСС предостаточно на сегодняшний день, ибо м4а от флака на слух неотличим
Я ваще в ВАВЕ всё храню, вот это отличный формат, дедовский, но переживёт атомную войну

offline
Ответить с цитированием
в Бане
Сообщения: 2,954
Регистрация: 13.08.2017
Откуда: милое послание
Старый пост, нажмите что бы добавить к себе блог 23 октября 2017, 07:23
  #20 (ПС)
Добавлено через 4 минуты 42 секунды
Вот
Показать скрытый текст
//------------------------------------------------
//--- 010 Editor v1.3.2 Binary Template
//
// File: MP3.bt
// Authors: Ivan Getta
// E-mail: [email protected]
// Version: 1.1
// Purpose: Parse an MP3 music file.
// Category: Audio
// File Mask: *.mp3
// ID Bytes: 49 44 33, FF
// History:
// 1.1 2016-01-29 SweetScape: Updated header for repository submission.
// 1.0 2005-02-18 I Getta: Initial release.
//
//--- Template features ----------------
//
// 1) MPEG frames support:
// * MPEG-1, MPEG-2
// * Layer 1,2,3
// 2) ID3v1 tags support
// 3) ID3v1.1 tags support
// 4) ID3v2.3 tags support
//
//--- Notes ----------------------------
//
// TODO:
// 1) MPEG 2.5 support
// 2) Resolve known bugs (see below)
//
// KNOWN BUGS (STILL PRESENT):
// 1) Incorrect frame size detection for MPEG 1.0 layer 3
// mono files with low bitrate (for example 56k, 64k).
// Frame size must be detected twice long.
// 2) Mp3pro files have some problems
//
//--- References -----------------------
//
// 1. "010 Editor templates"
// http://www.sweetscape.com/010editor/templates.html
//
// 2. "The private life of MP3 frames"
// http://www.id3.org/mp3frame.html
//
// 3. "ID3 made easy (ID3v1 & ID3v1.1)"
// http://www.id3.org/id3v1.html
//
// 4. "ID3 tag version 2.3.0 (Informal standard)"
// http://www.id3.org/id3v2.3.0.html
//
//------------------------------------------------


local uint32 bitrate, frame_size, sampling_freq, frames_count = 0;
local quad frame_header_offset, seek_pos, sum_bitrate = 0;
local short data;
local byte was_bad_sync, id3v1_tag_found = 0;
local ubyte buf[3];


enum <ubyte> ID3_GENRES
{
Blues, Classic_Rock, Country, Dance, Disco, Funk, Grunge, Hip_Hop, // 7
Jazz, Metal, New_Age, Oldies, Other, Pop, R_and_B, Rap, // 15
Reggae, Rock, Techno, Industrial, Alternative, Ska, Death_Metal, Pranks, // 23
Soundtrack, Euro_Techno, Ambient, Trip_Hop, Vocal, Jazz_Funk, Fusion, Trance, // 31
Classical, Instrumental, Acid, House, Game, Sound_Clip, Gospel, Noise, // 39
AlternRock, Bass, Soul, Punk, Space, Meditative, Instrumental_Pop, Instrumental_Rock, // 47
Ethnic, Gothic, Darkwave, Techno_Industrial, Electronic, Pop_Folk, Eurodance, Dream, // 55
Southern_Rock, Comedy, Cult, Gangsta, Top_40, Christian_Rap, Pop_Funk, Jungle, // 63
Native_American, Cabaret, New_Wave, Psychadelic, Rave, Showtunes, Trailer, Lo_Fi, // 71
Tribal, Acid_Punk, Acid_Jazz, Polka, Retro, Musical, Rock_n_Roll, Hard_Rock, // 79
Folk, Folk_Rock, National_Folk, Swing, Fast_Fusion, Bebob, Latin, Revival, // 87
Celtic, Bluegrass, Avantgarde, Gothic_Rock,
Progressive_Rock, Psychedelic_Rock, Symphonic_Rock, Slow_Rock, // 95
Big_Band, Chorus, Easy_Listening, Acoustic, Humour, Speech, Chanson, Opera, // 103
Chamber_Music, Sonata, Symphony, Booty_Bass, Primus, Porn_Groove, Satire, Slow_Jam, // 111
Club, Tango, Samba, Folklore, Ballad, Power_Ballad, Rhythmic_Soul, Freestyle, // 119
Duet, Punk_Rock, Drum_Solo, A_capella, Euro_House, Dance_Hall, Goa, Drum_and_Bass, // 127
Club_House, Hardcore, Terror, Indie, BritPop, Negerpunk, Polsk_Punk, Beat, // 135
Christian, Heavy_Metal, Black_Metal, Crossover,
Contemporary, Christian_Rock, Merengue, Salsa, Thrash_Metal, Anime, JPop, Synthpop // 147
};


struct ID3v1_TAG
{
DisplayFormatDecimal();

SetBackColor(0x33BC55);
char id[3]; // always must be "TAG"

SetBackColor(0x48E048);
char title[30];

SetBackColor(0x5DE45D);
char artist[30];

SetBackColor(0x72E872);
char album[30];

SetBackColor(0x87EC87);
char year[4];

if ( ReadByte(FTell()+28) == 0 && ReadByte(FTell()+29) != 0 )
{
// We have ID3v1.1 tag

SetBackColor(0x9CF09C);
char comment[28];

SetBackColor(0xB1F4B1);
byte zero;

SetBackColor(0xC6F8C6);
ubyte track;
}
else
{
// We have ID3v1.0 tag

SetBackColor(0x9CF09C);
char comment[30];
}

SetBackColor(0xDBFCDB);
ID3_GENRES genre;
};


struct ID3v2_HEADER
{
SetBackColor(0x91C4FF);

char head[3]; // always must be "ID3" ($49 44 33)

DisplayFormatDecimal();

ubyte ver_major; // this byte will never be $FF
ubyte ver_revision; // this byte will never be $FF

struct FLAGS {
ubyte UNSYNCHRONISATION_USED : 1;
ubyte EXTENDED_HEADER_PRESENT : 1;
ubyte EXPERIMENTAL_TAG : 1;
ubyte : 5;
} flags;

DisplayFormatHex();

ubyte size[4]; // Is the size of the complete tag after unsynchronisation,
// including padding, excluding the header but not excluding
// the extended header (total tag size - 10). Most
// significant bit (bit 7) of each byte is set to zero
};


struct ID3v2_EXTENDED_HEADER
{
SetBackColor(0xA1D4FF);

DisplayFormatDecimal();

uint32 size; // extended header size, excluding this 'size' field

uint16 FLAG_CRC_PRESENT : 1; // extended header flags
uint16 : 15; //

uint32 padding_sz;

if (FLAG_CRC_PRESENT)
{
DisplayFormatHex();
uint32 crc;
}
};


struct ID3v2_FRAME
{
char id[4]; // four alpha chars

DisplayFormatDecimal();

uint32 size; // frame size without frame header

struct FRAME_FLAGS {
uint16 TAG_ALTER_PRESERV : 1;
uint16 FILE_ALTER_PRESERV : 1;
uint16 READ_ONLY_FRAME : 1;
uint16 : 5;
uint16 COMPRESSED_FRAME : 1;
uint16 ENCRYPTED_FRAME : 1;
uint16 GROUP_MEMBER_FRAME : 1;
uint16 : 5;
} flags;

if (id[0] == 'T')
{
// frame contains text related data
if ( ReadByte(FTell()) == 0 && size > 1)
{
byte id_asciiz_str;
char frame_data [size - 1];
}
else
char frame_data [size];
}
else
{
DisplayFormatHex();
ubyte frame_data [size];
}
};


struct ID3v2_TAG
{
ID3v2_HEADER hdr;

// calculating real size of the ID3v2 tag
local uint32 tag_sz = hdr.size[0];
tag_sz <<= 7;
tag_sz |= hdr.size[1];
tag_sz <<= 7;
tag_sz |= hdr.size[2];
tag_sz <<= 7;
tag_sz |= hdr.size[3];

//
// An ID3v2 tag header can be detected with the following pattern:
// $49 44 33 yy yy xx zz zz zz zz
// Where yy is less than $FF, xx is the 'flags' byte and zz is less than $80.
//
if (hdr.ver_major == 0xFF || hdr.ver_revision == 0xFF ||
hdr.size[0] >= 0x80 || hdr.size[1] >= 0x80 ||
hdr.size[2] >= 0x80 || hdr.size[3] >= 0x80)
{
Printf("MP3: warning: invalid ID3v2 tag header\n");
}
else
{
if (hdr.ver_major != 3 || hdr.flags.UNSYNCHRONISATION_USED || hdr.flags.EXPERIMENTAL_TAG)
{
Printf("MP3: warning: skipping unsupported ID3v2.%d tag\n", hdr.ver_major);
SetBackColor(0xA9DCFF);
DisplayFormatHex();
ubyte id3v2_data[tag_sz];
}
else
{
if ( hdr.flags.EXTENDED_HEADER_PRESENT )
ID3v2_EXTENDED_HEADER ext_hdr;

// Now reading ID3v2 frames
// A tag must contain at least one frame. A frame must be
// at least 1 byte big, excluding the header.
//
local uint32 frame_color = 0xC9FCFF;
do
{
SetBackColor(frame_color);
ID3v2_FRAME tf;
frame_color -= 0x020200;
}
while ( FTell() < tag_sz + sizeof(hdr) && ReadByte(FTell()) != 0 );

SetBackColor(0x99CCFF);
ubyte id3v2_padding [ tag_sz + sizeof(hdr) - FTell() ];
}
}
};


// 32-bit MPEG frame header octets:
// AAAAAAAA AAABBCCD EEEEFFGH IIJJKLMM
//
struct MPEG_HEADER
{
SetBackColor(0xCC99FF);

DisplayFormatHex();

uint32 frame_sync : 12; // A

DisplayFormatDecimal();

uint32 mpeg_id : 1; // B
uint32 layer_id : 2; // C
uint32 protection_bit : 1; // D
uint32 bitrate_index : 4; // E
uint32 frequency_index : 2; // F
uint32 padding_bit : 1; // G
uint32 private_bit : 1; // H
uint32 channel_mode : 2; // I
uint32 mode_extension : 2; // J
uint32 copyright : 1; // K
uint32 original : 1; // L
uint32 emphasis : 2; // M

if (protection_bit == 0)
{
DisplayFormatHex();
uint16 checksum;
}
};


struct MPEG_FRAME
{
MPEG_HEADER mpeg_hdr;

// define frame bitrate
bitrate = 0;

// header sanity check
if (mpeg_hdr.frame_sync < 0xFFE || mpeg_hdr.layer_id == 0 ||
mpeg_hdr.bitrate_index == 0 || mpeg_hdr.bitrate_index == 15 ||
mpeg_hdr.frequency_index == 3)
{
Printf("MP3: warning: invalid MPEG header in frame at offset 0x%X\n",
FTell() - 4 - (mpeg_hdr.protection_bit==0 ? 2:0) );

// Try to find MPEG header starting from offset (current - 2)
FSeek( FTell() - 2 );
}
else
{
if (mpeg_hdr.layer_id == 3) // MPEG-1,2 Layer 1
{
bitrate = (uint32)mpeg_hdr.bitrate_index<<5;
}
else
{
if (mpeg_hdr.layer_id == 2) // MPEG-1,2 Layer 2
{
bitrate = (uint32)mpeg_hdr.bitrate_index==1 ? 32 :
(1 << 5+(uint32)mpeg_hdr.bitrate_index/4) +
( ((uint32)mpeg_hdr.bitrate_index&3) <<
3+(uint32)mpeg_hdr.bitrate_index/4 );
}
else
{
if (mpeg_hdr.mpeg_id == 1) // MPEG-1 (Layer 3)
{
bitrate = (1 << 5+((uint32)mpeg_hdr.bitrate_index-1)/4) +
( ((uint32)mpeg_hdr.bitrate_index-1&3) <<
3+((uint32)mpeg_hdr.bitrate_index-1)/4);
}
else // (MPEG-2) (Layer 3)
{
bitrate = (uint32)mpeg_hdr.bitrate_index<4 ?

8*(uint32)mpeg_hdr.bitrate_index :

(1<<4+(uint32)mpeg_hdr.bitrate_index/4) +
(
((uint32)mpeg_hdr.bitrate_index&3)==0 ? 0 :

((uint32)mpeg_hdr.bitrate_index&3)==1 ?
(1<<4+(uint32)mpeg_hdr.bitrate_index/4) :

((uint32)mpeg_hdr.bitrate_index&3)==2 ?
(1<<4+(uint32)mpeg_hdr.bitrate_index/4) +
((1<<4+(uint32)mpeg_hdr.bitrate_index/4)>>1) :

(1<<4+(uint32)mpeg_hdr.bitrate_index/4) -
((1<<4+(uint32)mpeg_hdr.bitrate_index/4)>>2)
);
}
}
}
}

if (bitrate != 0)
{
local uint16 freq[3];
freq[0] = 2205;
freq[1] = 2400;
freq[2] = 1600;

sampling_freq = freq[mpeg_hdr.frequency_index];

if (mpeg_hdr.mpeg_id == 1) // if MPEG-1
sampling_freq <<= 1;

frame_size = (bitrate * 14400) / sampling_freq;

if (mpeg_hdr.channel_mode == 3)
frame_size >>= 1;

frame_size -= 4 + (mpeg_hdr.protection_bit==0 ? 2:0) - mpeg_hdr.padding_bit;

frame_header_offset = FTell() - 4 - (mpeg_hdr.protection_bit==0 ? 2:0);

// read frame data
if ( FTell() + frame_size > FileSize() )
{
Printf("MP3: warning: cut MPEG frame at end of file (frame header offset = 0x%LX, data length = %u)\n",
frame_header_offset, frame_size);

Printf("MP3: file parsing completed!\nMP3: valid MPEG frames found: %d\n", frames_count);

if (frames_count != 0)
Printf("MP3: average frame bitrate: %d kbit\n", sum_bitrate / frames_count);

return;
}
else
{
DisplayFormatHex();
SetBackColor(0xCCCCFF);
ubyte mpeg_frame_data [ frame_size ];
}

sum_bitrate += bitrate;

frames_count++;
}
};


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


BigEndian();

ReadBytes(buf, 0, 3);

if ( ! Strcmp(buf, "ID3") )
{
Printf("MP3: ID3v2 tag found\n");
ID3v2_TAG id3v2_tag;
}

while ( !FEof() && !id3v1_tag_found )
{
// Reading file, until find frame synchronization
seek_pos = FTell();
was_bad_sync = 0;
do
{
data = ReadShort( seek_pos );

if ( (uint16)data == 0x5441 && (uchar)ReadByte(seek_pos+2) == 0x47 )
id3v1_tag_found = 1; // we found "TAG" identifier

if ( !was_bad_sync && (uint16)data < 0xFFE0 && !id3v1_tag_found )
{
Printf("MP3: warning: invalid MPEG frame synchronization at offset 0x%LX\n", seek_pos);
was_bad_sync = 1;
}

seek_pos++;
}
while ( (uint16)data < 0xFFE0 && seek_pos < (FileSize()-1) && !id3v1_tag_found );

if ( (uint16)data >= 0xFFE0 || id3v1_tag_found )
{
FSeek(seek_pos - 1);
}
else
{
Printf("MP3: file parsing completed!\nMP3: valid MPEG frames found: %d\n", frames_count);

if (frames_count != 0)
Printf("MP3: average frame bitrate: %d kbit\n", sum_bitrate / frames_count);

return;
}

if ( !id3v1_tag_found )
{
MPEG_FRAME mf;

if (frames_count == 1 && bitrate)
Printf("MP3: first found MPEG frame parameters:\nMP3:\t- header ofsset: 0x%LX\nMP3:\t- bitrate: %d kbit\nMP3:\t- MPEG-%d layer %d\nMP3:\t- sampling frequency: %d Hz\nMP3:\t- channel mode: %s\nMP3:\t- CRC protected: %s\n",
frame_header_offset,
bitrate,
mf.mpeg_hdr.mpeg_id==1 ? 1:2,
mf.mpeg_hdr.layer_id==1 ? 3 : mf.mpeg_hdr.layer_id==2 ? 2:1,
sampling_freq*10,
mf.mpeg_hdr.channel_mode==3 ? "mono" :
mf.mpeg_hdr.channel_mode==0 ? "stereo" :
mf.mpeg_hdr.channel_mode==1 ? "joint stereo" : "dual channel",
mf.mpeg_hdr.protection_bit==0 ? "Yes" : "No");
}
}

if (id3v1_tag_found)
{
Printf("MP3: ID3v1 tag found\n");
ID3v1_TAG id3v1_tag;
}

if ( !FEof() )
Printf("MP3: warning: there is some unknown extra-data after ID3v1 tag at end of file\n");

Printf("MP3: file parsing completed!\nMP3: valid MPEG frames found: %d\n", frames_count);

if (frames_count != 0)
Printf("MP3: average frame bitrate: %d kbit\n", sum_bitrate / frames_count);

offline
Ответить с цитированием
 
Ответ
Здесь присутствуют: 1 (пользователей - 0 , гостей - 1)
 
Похожие темы на: Как устроен формат mp3?
Тема Автор Раздел Ответов Последнее сообщение
Меннор (D1'Mon x Foem1ks) - Не формат (Ricand Thadeus prod.) [­Не формат (Fliensy, PhoeniX, МаксиМС, RэN) Diss] Foem1ks Демо-музыка 0 16 апреля 2014
Формат 3,07 (P. Lloyd, M. Clyde) - Наш Формат [ENGO prod.] P. Lloyd Демо-музыка 0 29 сентября 2012
мир так устроен samsage Их стихия — стихи 1 7 января 2007
Часовой пояс GMT +3, время: 17:05.