{"id":366446,"date":"2024-05-21T02:59:40","date_gmt":"2024-05-21T02:59:40","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=366446"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=366446","title":{"rendered":"<span>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043a\u043e\u0434\u0435\u043a OPUS \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u2013 \u0435\u0441\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 STM32 \u0441 \u043e\u0447\u0435\u043d\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u044c\u044e, \u0430 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u043d\u0435\u043c \u0437\u0432\u0443\u043a. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0447\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0441 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u043d\u0430\u043c\u0438 \u043c\u0438\u043a\u0440\u043e\u0444\u043e\u043d\u0430 \u0433\u043e\u0440\u0430 \u0438 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0430\u044f \u0442\u0435\u043b\u0435\u0436\u043a\u0430. \u0412 \u0438\u0442\u043e\u0433\u0435 \u0438\u043c\u0435\u0435\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043c\u0435\u0435\u0442 \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0430\u043c WAV-\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b. \u0425\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u044d\u0442\u043e\u0442 WAV-\u0441\u0438\u0433\u043d\u0430\u043b \u043a\u0443\u0434\u0430-\u0442\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c. \u0422\u0430\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0443\u0434\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e, \u0435\u0441\u0442\u044c \u043d\u0435\u043d\u0443\u043b\u0435\u0432\u0430\u044f \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c, \u0447\u0442\u043e \u043c\u044b \u043d\u0435 \u0432\u043b\u0435\u0437\u0435\u043c \u043f\u043e \u043f\u043e\u043b\u043e\u0441\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0433\u043e \u043a\u0430\u043d\u0430\u043b\u0430 \u0438\u043b\u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u043c \u043f\u0430\u043c\u044f\u0442\u044c \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043d\u0443\u0436\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e. \u041d\u0430 \u043f\u043e\u043c\u043e\u0449\u044c \u043d\u0430\u043c \u0441\u043f\u0435\u0448\u0438\u0442 \u043a\u043e\u043c\u043f\u0440\u0435\u0441\u0441\u0438\u044f!<\/p>\n<p>\u0410 \u0438\u043c\u0435\u043d\u043d\u043e \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0439, \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0438 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434\u0435\u043a OPUS. \u0418\u043c\u0435\u043d\u043d\u043e \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u0442\u0440\u0438\u043c\u0438\u043d\u0433\u043e\u0432\u044b\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u2013 \u043a\u0430\u043a \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e, \u0442\u0430\u043a \u0438 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0437\u0432\u0443\u043a\u043e\u0432\u044b\u0445 \u0434\u043e\u0440\u043e\u0436\u0435\u043a. \u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u043d \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u0435\u043d \u2013 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u0442 \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u043c\u0435\u0441\u0442\u0435. \u041c\u044b \u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0432\u043e\u0434\u0438\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u043c \u043f\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435:<\/p>\n<p>RAM (xrw) : ORIGIN = 0x20000000, LENGTH = <strong>48K<\/strong><br \/>RAM2 (xrw) : ORIGIN = 0x10000000, LENGTH = <strong>16K<\/strong><br \/>FLASH (rx) : ORIGIN = 0x8000000, LENGTH = <strong>256K<\/strong><\/p>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434\u0435\u043a \u0438\u043c\u0435\u0435\u0442 \u043e\u0431\u0448\u0438\u0440\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a. \u041a\u0430\u0436\u0434\u0430\u044f \u0438\u0445 \u043d\u0438\u0445 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u043e\u0433\u043e \u0437\u0432\u0443\u043a\u0430, \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u0442.\u0434., \u0447\u0442\u043e \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e. \u041f\u0435\u0440\u0432\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u2013 \u043a\u0430\u043a \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0432\u0443\u043a\u0430 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043a\u043e\u043c\u043f\u0440\u0435\u0441\u0441\u0438\u0438\/\u0434\u0435\u043a\u043e\u043c\u043f\u0440\u0435\u0441\u0441\u0438\u0438? \u041c\u043e\u0436\u043d\u043e \u0441\u0443\u0431\u044a\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u043f\u043e\u0441\u043b\u0443\u0448\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0438\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0441\u043f\u0435\u043a\u0442\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u041a\u043e\u0434\u0435\u043a \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f \u0434\u0432\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0438\u043b\u044c\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043d\u044b\u0445 \u043a\u043e\u0434\u0435\u043a\u0430: <a href=\"https:\/\/en.wikipedia.org\/wiki\/SILK\" rel=\"noopener noreferrer nofollow\"><strong>SILK<\/strong><\/a><strong> <\/strong>\u0438 <a href=\"https:\/\/en.wikipedia.org\/wiki\/CELT\" rel=\"noopener noreferrer nofollow\"><strong>CELT<\/strong><\/a>. \u041e\u0431\u0430 \u043b\u0443\u0447\u0448\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432 \u0441\u0432\u043e\u0438\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u2013 <strong>SILK<\/strong>, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043b\u0443\u0447\u0448\u0435 \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u043d\u043e\u0439 \u0440\u0435\u0447\u044c\u044e, \u043d\u043e \u0438\u043c\u0435\u0435\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u043f\u043e\u043b\u043e\u0441\u0435 \u0447\u0430\u0441\u0442\u043e\u0442. OPUS-\u043a\u043e\u0434\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u0442\u0440\u0435\u0445 \u0440\u0435\u0436\u0438\u043c\u0430\u0445: <strong>SILK<\/strong>, <strong>CELT <\/strong>\u0438 <strong>HYBRID<\/strong>. \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f\u0449\u0438\u0435, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u043e\u043d\u0438 \u0438\u0437 \u0441\u0435\u0431\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442. <\/p>\n<p>\u0427\u0442\u043e \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435? \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 Opus, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0437\u0432\u0443\u043a\u043e\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e \u0438 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u043e\u043f\u0443\u0441-\u0444\u0430\u0439\u043b.<\/p>\n<p>\u0418\u0442\u0430\u043a, \u043d\u0430\u0447\u043d\u0435\u043c.<\/p>\n<p>\u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u043d\u0443\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u043a\u043e\u0434\u044b \u0441 \u0441\u0430\u0439\u0442\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f (<a href=\"https:\/\/opus-codec.org\/\" rel=\"noopener noreferrer nofollow\">https:\/\/opus-codec.org\/<\/a>). \u041d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u0441\u0430\u043c\u0430\u044f \u0441\u0432\u0435\u0436\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0431\u044b\u043b\u0430 1.3.1<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ce0\/57e\/229\/ce057e2294f0aa165da0ca4725cc72d4.png\" width=\"1003\" height=\"439\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ce0\/57e\/229\/ce057e2294f0aa165da0ca4725cc72d4.png\"\/><\/figure>\n<p>\u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0432\u044b \u0443\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u043f\u0440\u043e\u0435\u043a\u0442. \u0420\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0435\u043c \u0430\u0440\u0445\u0438\u0432 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0443 \u0444\u0430\u0439\u043b\u044b \u043a\u043e\u0434\u0435\u043a\u0430.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/491\/39b\/4e7\/49139b4e782ee85e375d6d2f4451d101.png\" width=\"378\" height=\"256\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/491\/39b\/4e7\/49139b4e782ee85e375d6d2f4451d101.png\"\/><\/figure>\n<p>\u0412 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043f\u0443\u0442\u044c OPUS_ROOT \u0434\u043e \u043f\u0430\u043f\u043a\u0438 \u0441 \u043a\u043e\u0434\u0435\u043a\u043e\u043c<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2be\/f8a\/524\/2bef8a524f6c815e679426d314762b21.png\" width=\"1024\" height=\"446\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2be\/f8a\/524\/2bef8a524f6c815e679426d314762b21.png\"\/><\/figure>\n<p>\u0412 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6f3\/57d\/dc7\/6f357ddc7408528f99fdc557114b6943.png\" width=\"819\" height=\"561\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6f3\/57d\/dc7\/6f357ddc7408528f99fdc557114b6943.png\"\/><\/figure>\n<p><strong>VAR_ARRAYS<\/strong> \u2013 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u044b \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439. \u0415\u0441\u043b\u0438 \u0432\u0435\u0440\u0441\u0438\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u042199, \u0442\u043e \u0441\u0442\u043e\u0438\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441 USE_ALLOCA <\/p>\n<p><strong>DISABLE_FLOAT_API <\/strong>\u0438 <strong>FIXED_POINT <\/strong>\u0443\u0441\u043a\u043e\u0440\u044f\u044e\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 \u0438 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u044e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c.<\/p>\n<p><strong>OPUS_BUILD <\/strong>\u2013 \u0442\u0443\u0442 \u0432\u0441\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e.<\/p>\n<p>\u0412\u043c\u0435\u0441\u0442\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0444\u0430\u0439\u043b config.h, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0434\u0435\u0442 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u043e\u043c.<\/p>\n<p>\u0410 \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0435\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c. \u041d\u0443\u0436\u043d\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0438\u0437 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432\u0441\u0435 \u0444\u0430\u0439\u043b\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u043c\u0443 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0443, \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0443 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c. \u042d\u0442\u043e \u0432\u0441\u0435 \u0444\u0430\u0439\u043b\u044b \u0438 \u043f\u0430\u043f\u043a\u0438, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0435 \u0432 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0438 <strong>_test, _demo, _float, _ne10, _multistream_, mips, doc, win32, arm64, tests,<\/strong> \u0430 \u0442\u0430\u043a\u0436\u0435 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b (.S), \u0433\u0434\u0435 \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 <strong>neon<\/strong>. <\/p>\n<p>\u041f\u0440\u0430\u0432\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u043f\u043e \u0444\u0430\u0439\u043b\u0443<strong> (Alt+Enter) -> Properties -> Execute resource from build<\/strong><\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f96\/e9a\/7c0\/f96e9a7c029324b5c4cfab738ec91e84.png\" width=\"819\" height=\"228\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f96\/e9a\/7c0\/f96e9a7c029324b5c4cfab738ec91e84.png\"\/><\/figure>\n<p>\u0415\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u043b\u0438, \u043d\u0438\u0447\u0435\u0433\u043e \u0441\u0442\u0440\u0430\u0448\u043d\u043e\u0433\u043e. \u0412 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043f\u043e\u0434\u0441\u043a\u0430\u0436\u0435\u0442, \u0447\u0442\u043e \u0447\u0442\u043e-\u0442\u043e \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0441\u043b\u0438 \u044d\u0442\u043e\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f.<\/p>\n<p>\u041a\u0430\u043a \u0443 \u043c\u0435\u043d\u044f \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0430\u043f\u043a\u0430 \u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 opus \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9ee\/ab6\/b8c\/9eeab6b8c85473211d497c5c071663e4.png\" width=\"296\" height=\"209\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9ee\/ab6\/b8c\/9eeab6b8c85473211d497c5c071663e4.png\"\/><\/figure>\n<h4>Src<\/h4>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6f9\/b1d\/f13\/6f9b1df13e446a505bbfd52e1aa56770.png\" width=\"426\" height=\"510\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6f9\/b1d\/f13\/6f9b1df13e446a505bbfd52e1aa56770.png\"\/><\/figure>\n<h4>Include<\/h4>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d48\/49d\/1a8\/d4849d1a869eff7f0fd859dced2970ea.png\" width=\"290\" height=\"160\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d48\/49d\/1a8\/d4849d1a869eff7f0fd859dced2970ea.png\"\/><\/figure>\n<p>\u041f\u0430\u043f\u043a\u0430 <strong>silk <\/strong>\u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u0430\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u043a\u0430\u0436\u0443 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7d4\/c8c\/f9d\/7d4c8cf9df05f60dde439055bc89b889.png\" width=\"568\" height=\"1024\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7d4\/c8c\/f9d\/7d4c8cf9df05f60dde439055bc89b889.png\"\/><\/figure>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/91f\/df7\/3f4\/91fdf73f4988fb53b4d535faa5fd80e4.png\" width=\"289\" height=\"227\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/91f\/df7\/3f4\/91fdf73f4988fb53b4d535faa5fd80e4.png\"\/><\/figure>\n<p>\u0422\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0441 <strong>celt<\/strong><\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/070\/8ae\/481\/0708ae481335dcc68caba27cb9d8398c.png\" width=\"452\" height=\"551\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/070\/8ae\/481\/0708ae481335dcc68caba27cb9d8398c.png\"\/><\/figure>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/8df\/749\/9b3\/8df7499b38518f4dcad7deb0a49545fe.png\" width=\"363\" height=\"322\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8df\/749\/9b3\/8df7499b38518f4dcad7deb0a49545fe.png\"\/><\/figure>\n<p>\u0410\u0445, \u0434\u0430, \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c <strong>include paths<\/strong><\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/59b\/725\/292\/59b7252924bf457575f3b8f5747a3901.png\" width=\"1024\" height=\"510\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/59b\/725\/292\/59b7252924bf457575f3b8f5747a3901.png\"\/><\/figure>\n<p>\u0413\u043e\u0442\u043e\u0432\u043e. \u0414\u0430\u043b\u0435\u0435, \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u043e\u043c, \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432 <strong>main.c<\/strong> \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b<\/p>\n<pre><code>#include \"opus.h\" #include \"opus_types.h\" #include \"opus_private.h\"<\/code><\/pre>\n<p>\u041f\u0440\u043e\u0435\u043a\u0442 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b. \u0421\u0435\u0439\u0447\u0430\u0441 \u043c\u044b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0441\u0443\u0434\u0438\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 .opus \u0444\u0430\u0439\u043b\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u043c\u044b \u043c\u043e\u0433\u043b\u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445. \u0414\u0430, \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u043f\u043e\u0442\u043e\u043a PCM (\u0418\u041a\u041c) \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u0441\u0432\u043e\u0439 \u043f\u043e\u0442\u043e\u043a \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u041d\u043e \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u043d\u0430 \u043f\u0440\u0438\u0435\u043c\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435, \u0435\u0441\u043b\u0438 \u0438\u0445 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043d\u0435 \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, TI \u0432 \u0441\u0432\u043e\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0441 opus \u0432\u0432\u043e\u0434\u044f\u0442 \u044d\u0434\u0430\u043a\u0438\u0439 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0438 \u044d\u0442\u0438\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0435\u0439, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u043c\u044b \u0437\u0430\u043f\u0438\u0441\u0430\u043b\u0438. \u041d\u043e \u043c\u044b \u0436\u0435 \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u0440\u044f\u043c \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0435 .opus \u0444\u0430\u0439\u043b\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043d\u0430 \u043f\u043a \u0441 \u043b\u044e\u0431\u043e\u0433\u043e \u043f\u043b\u0435\u0435\u0440\u0430! \u0422\u0430\u043a\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043d\u0435 \u0433\u043e\u0434\u0438\u0442\u0441\u044f. \u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043e\u0442 ST \u0442\u043e\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0431\u0435\u0437 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0445 \u043a\u043e\u0441\u0442\u044b\u043b\u0435\u0439.<\/p>\n<p>\u041e\u0442\u043a\u0440\u043e\u0435\u043c \u043b\u044e\u0431\u043e\u0439 opus \u0444\u0430\u0439\u043b \u0447\u0435\u0440\u0435\u0437 hex \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0438 \u0447\u0442\u043e \u0436\u0435 \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/aef\/caf\/2bd\/aefcaf2bd768d5c8e366b04a410e53a0.png\" width=\"672\" height=\"307\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/aef\/caf\/2bd\/aefcaf2bd768d5c8e366b04a410e53a0.png\"\/><\/figure>\n<p>\u041f\u043e \u0432\u0441\u0435\u043c\u0443 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e opus \u0444\u0430\u0439\u043b \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 <strong>Ogg <\/strong>\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432, \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u0434\u0435\u043a\u0430 <strong>OPUS<\/strong>. <\/p>\n<p>\u0427\u0442\u043e \u0438\u0437 \u0441\u0435\u0431\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 <strong>Ogg <\/strong>\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/205\/0c5\/0ff\/2050c50ff4594e467b524cb1f4cf64f2.png\" alt=\"\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0441 \u0432\u0438\u043a\u0438\" title=\"\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0441 \u0432\u0438\u043a\u0438\" width=\"1280\" height=\"616\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/205\/0c5\/0ff\/2050c50ff4594e467b524cb1f4cf64f2.png\"\/><\/p>\n<div><figcaption>\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0441 \u0432\u0438\u043a\u0438<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0435 \u0431\u0443\u0434\u0443 \u0440\u0430\u0441\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c <strong>\u043a\u0430\u0436\u0434\u043e\u0435 <\/strong>\u0438\u0437 \u043f\u043e\u043b\u0435\u0439 \u2013 \u0438\u0445 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435  \u0435\u0441\u0442\u044c \u043d\u0430 \u0432\u0438\u043a\u0438 \u0438 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0432 Ogg. \u041e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u044e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043b\u0438\u0448\u044c \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u043d\u0435 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u043c \u0434\u043b\u044f \u043c\u0435\u043d\u044f. \u0414\u0430\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0447\u0442\u0435\u043d\u0438\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 (<a href=\"https:\/\/xiph.org\/ogg\/doc\/rfc3533.txt\" rel=\"noopener noreferrer nofollow\">https:\/\/xiph.org\/ogg\/doc\/rfc3533.txt<\/a>)<\/p>\n<h4>Header Type<\/h4>\n<p>0x02 \u0434\u043b\u044f \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u0435\u0440\u0432\u043e\u0433\u043e<\/p>\n<p>0x04 \u0434\u043b\u044f \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e<\/p>\n<p>\u042d\u0442\u043e \u0432\u0441\u0435 \u0432\u0435\u0440\u043d\u043e. \u0410 \u0432\u043e\u0442 \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u041c\u0415\u0416\u0414\u0423 \u043d\u0438\u043c\u0438 Header Type \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c <strong>0x00<\/strong>, \u0435\u0441\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e \u043d\u0435 \u0440\u0430\u0437\u0431\u0438\u0442\u044b\u0439 \u043d\u0430 2 \u201cOgg-\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b\u201d \u043f\u0430\u043a\u0435\u0442 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u0447\u0442\u043e \u0431\u044b\u0432\u0430\u0435\u0442 \u043a\u0440\u0430\u0439\u043d\u0435 \u0440\u0435\u0434\u043a\u043e.<\/p>\n<h4>Granule Position<\/h4>\n<p>\u041d\u0435\u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c\u0430\u044f \u0438 \u043f\u043b\u043e\u0445\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u0430\u044f \u0433\u0430\u0434\u043e\u0441\u0442\u044c-\u043a\u0440\u043e\u0432\u043e\u043f\u0438\u0439\u0446\u0430. \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0447\u0438\u0441\u043b\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u043a\u043e\u043b\u044c\u043a\u043e PCM \u0441\u044d\u043c\u043f\u043b\u043e\u0432 \u0431\u044b\u043b\u043e \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0437\u0430 <strong>\u0412\u0421\u0415 <\/strong>\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b <strong>\u041f\u041b\u042e\u0421<\/strong> \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430.<\/p>\n<p>\u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u044d\u043d\u043a\u043e\u0434\u0435\u0440\u0430 \u0438 \u0441\u0431\u043e\u0440\u043a\u0435 \u0444\u0430\u0439\u043b\u0430. <\/p>\n<p>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e \u2013 \u0443 \u0432\u0430\u0441 \u043c\u0438\u043a\u0440\u043e\u0444\u043e\u043d \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0437\u0430\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u0438\u0445 \u0432 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0449\u0438\u043a, \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u043f\u0430\u043a\u0435\u0442\u044b (\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, Page) \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430 \u041f\u041a.<\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0430\u0440\u0442\u0430\u043d\u0443\u043b\u0438, \u0432\u043e\u0442 \u0432\u044b \u0437\u0430\u0441\u0443\u043d\u0443\u043b\u0438 600 \u043f\u0435\u0440\u0432\u044b\u0445 \u0441\u044d\u043c\u043f\u043b\u043e\u0432 \u0441 \u043c\u0438\u043a\u0440\u043e\u0444\u043e\u043d\u0430 \u0432 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0449\u0438\u043a, \u0430 \u043e\u043d \u0432\u044b\u043f\u043b\u044e\u043d\u0443\u043b N \u0441\u044d\u043c\u043f\u043b\u043e\u0432 \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445. \u041f\u043e\u0442\u043e\u043c \u0435\u0449\u0435 \u0432\u044b \u0437\u0430\u0441\u0443\u043d\u0443\u043b\u0438 700 \u0441\u044d\u043c\u043f\u043b\u043e\u0432, \u0430 \u043e\u043d \u0432\u044b\u043f\u043b\u044e\u043d\u0443\u043b M \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445. \u0422\u0430\u043a \u0432\u043e\u0442 Granule Position \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430 (\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b) \u0431\u0443\u0434\u0435\u0442 600, \u0430 \u0434\u043b\u044f \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430 600+700=1300. \u0418 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435.<\/p>\n<h4>Bitstream serial number<\/h4>\n<p>\u041e, \u0430 \u044d\u0442\u0430 \u043c\u043e\u044f \u043b\u044e\u0431\u0438\u043c\u0430\u044f.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/00d\/afc\/e07\/00dafce07221f19fa17e0785996cbe48.png\" width=\"616\" height=\"58\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/00d\/afc\/e07\/00dafce07221f19fa17e0785996cbe48.png\"\/><\/figure>\n<blockquote>\n<p>\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/p>\n<p>This unique serialnumber is created randomly and does not have any connection to the content or encoder of the logical bitstream it represents.<\/p>\n<\/blockquote>\n<p>\u041d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u044d\u0442\u043e \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e. \u041d\u043e \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u041e\u0414\u0418\u041d\u0410\u041a\u041e\u0412\u041e\u0415 \u0434\u043b\u044f \u043a\u0430\u0436\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b (\u043f\u0430\u043a\u0435\u0442\u0430) \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0430\u0443\u0434\u0438\u043e\u0441\u0442\u0440\u0438\u043c\u0430. \u0418 \u044d\u0442\u043e \u0447\u0438\u0441\u043b\u043e \u043f\u0440\u0438\u0434\u0443\u043c\u044b\u0432\u0430\u0435\u0442\u0435\/\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0435 <strong>\u0412\u042b<\/strong>, \u0430 \u043d\u0435 \u043e\u043f\u0443\u0441 \u0438\u043b\u0438 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0449\u0438\u043a.<\/p>\n<h4>Page sequence number<\/h4>\n<p>\u041f\u0440\u043e\u0441\u0442\u043e \u043d\u043e\u043c\u0435\u0440 \u201cOgg-\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b\u201d. \u041d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 0.<\/p>\n<p><strong>\u0427\u0435\u043a-\u0441\u0443\u043c\u043c\u0430<\/strong><\/p>\n<p>\u041d\u0438\u0447\u0435\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0433\u043e, \u043d\u043e \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c<\/p>\n<p>\u0425\u0435\u043a\u0441-\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 HxD \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0435\u0435 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u043e\u0432, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a4b\/027\/eba\/a4b027eba2d978653277af9812980dfb.png\" width=\"775\" height=\"95\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a4b\/027\/eba\/a4b027eba2d978653277af9812980dfb.png\"\/><\/figure>\n<p>\u0414\u043b\u044f \u043f\u043e\u0434\u0441\u0447\u0435\u0442\u0430 \u041a\u0421, \u043d\u0443\u0436\u043d\u043e \u0432\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0443\u043b\u0438 \u043d\u0430 \u043c\u0435\u0441\u0442\u043e \u041a\u0421 \u0438 \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0432\u0441\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 (1 Ogg-\u043f\u0430\u043a\u0435\u0442)<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/777\/b99\/5bc\/777b995bc90c8e6c7e22d75fc8221d26.png\" width=\"836\" height=\"96\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/777\/b99\/5bc\/777b995bc90c8e6c7e22d75fc8221d26.png\"\/><\/figure>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 \u0410\u043d\u0430\u043b\u0438\u0437->\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0435 \u0441\u0443\u043c\u043c\u044b<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/8a8\/639\/9bf\/8a86399bffa0a391f2879b1d1fd7463d.png\" width=\"832\" height=\"423\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8a8\/639\/9bf\/8a86399bffa0a391f2879b1d1fd7463d.png\"\/><\/figure>\n<p>\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0443 <strong>4C11DB7<\/strong>. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9f7\/e2d\/c4d\/9f7e2dc4d05c6c8f5ca38dc49632a064.png\" width=\"710\" height=\"74\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9f7\/e2d\/c4d\/9f7e2dc4d05c6c8f5ca38dc49632a064.png\"\/><\/figure>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e, \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0430\u044f, \u043d\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u0430.<\/p>\n<h4>Page Segments<\/h4>\n<p>\u0427\u0438\u0441\u043b\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0434\u0430\u043b\u0435\u0435.<\/p>\n<h4>Segment Table<\/h4>\n<p>\u041f\u0435\u0440\u0432\u044b\u043c \u0438\u0434\u0435\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u043b\u0438\u043d \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u044b. \u0414\u043b\u0438\u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0447\u0438\u0441\u043b\u043e\u043c \u0432 <strong>Page Segments<\/strong>. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438\u0434\u0443\u0442 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0435.<\/p>\n<p><em>\u041f\u0440\u0438\u043c\u0435\u0440 1 \u2013 \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u043b\u043a\u0438\u0439 \u0444\u0430\u0439\u043b<\/em><\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/330\/0c2\/237\/3300c2237092d424f68ece0813df80f5.png\" width=\"792\" height=\"184\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/330\/0c2\/237\/3300c2237092d424f68ece0813df80f5.png\"\/><\/figure>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0443 \u043d\u0430\u0441 <strong>Page Segments<\/strong> \u0440\u0430\u0432\u0435\u043d 1. \u0417\u043d\u0430\u0447\u0438\u0442 \u0434\u043b\u0438\u043d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u043d\u0430 1. \u0423 \u043d\u0430\u0441 \u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u043b\u0438\u043d \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0432\u0435\u043d 0x31. \u0417\u043d\u0430\u0447\u0438\u0442 \u043f\u043e\u0441\u043b\u0435 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438\u0434\u0435\u0442 0x31 (49) \u0448\u0442\u0443\u043a \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p><em>\u041f\u0440\u0438\u043c\u0435\u0440 2 \u2013 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b<\/em><\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b4e\/19c\/12a\/b4e19c12a6e65da71494f3e636af6feb.png\" width=\"856\" height=\"393\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b4e\/19c\/12a\/b4e19c12a6e65da71494f3e636af6feb.png\"\/><\/figure>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0443 \u043d\u0430\u0441 <strong>Page Segments<\/strong> \u0440\u0430\u0432\u0435\u043d 0x7F (247). \u0414\u0430\u043b\u0435\u0435 \u0438\u0434\u0435\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u043b\u0438\u043d\u043e\u0439 247 \u2013 \u0432\u044b\u0434\u0435\u043b\u0435\u043d \u0434\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438. \u041a\u0430\u0436\u0434\u0430\u044f \u044f\u0447\u0435\u0439\u043a\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0434\u043b\u0438\u043d\u0443 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u043e\u0441\u043b\u0435 \u043d\u0435\u0433\u043e \u0438\u0434\u0443\u0442 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0434\u0430\u043d\u043d\u044b\u0435. \u0418\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e, 14000 \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 (\u043f\u0430\u043a\u0435\u0442\u0435).<\/p>\n<p>\u0421\u0430\u043c Opus \u0438 \u0435\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b(<strong>OpusHead <\/strong>\u0438 <strong>OpusTags <\/strong>\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0441\u0447\u0438\u0442\u0430\u043d\u044b \u0434\u0435\u043a\u043e\u0434\u0435\u0440\u043e\u043c) \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f \u0432 \u0441\u0435\u043a\u0446\u0438\u044f\u0445 <strong>Segment Table<\/strong> 2-\u0445 \u043f\u0435\u0440\u0432\u044b\u0445 Ogg-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432<\/p>\n<p>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u0435\u0439 \u0435\u0441\u0442\u044c \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0435 <strong>RFC 7845<\/strong> \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 <strong>Opus<\/strong>. \u041a\u0430\u0436\u0434\u043e\u0435 \u043f\u043e\u0441\u043b\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0431\u0435\u0437 \u0434\u0432\u0443\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043a\u043e\u043f\u0430\u0442\u044c \u0433\u043b\u0443\u0431\u0436\u0435, \u0447\u0435\u043c \u043d\u0430\u0434\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043d\u0435 \u0431\u0443\u0434\u0443.<\/p>\n<p>\u0412\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0443.<\/p>\n<p>\u0414\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u044d\u043d\u043a\u043e\u0434\u0435\u0440\u0430 \u043c\u043e\u0436\u043d\u043e \u0431\u0440\u0430\u0442\u044c \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0441 \u043c\u0438\u043a\u0440\u043e\u0444\u043e\u043d\u0430. \u0412 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u0436\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0438\u0437 wav-\u0444\u0430\u0439\u043b\u0430. Wav-\u0444\u0430\u0439\u043b \u0431\u044b\u043b \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d \u0432 \u0432\u0438\u0434\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 .h \u0444\u0430\u0439\u043b. \u0414\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u043d\u0430 \u043f\u0438\u0442\u043e\u043d\u0435:<\/p>\n<pre><code class=\"python\">f_in = open('example.wav', 'rb') f_out = open('PCM_data.h', 'wb')  cntr = 0 while True:     data = f_in.read(1)#[::-1]#reverse bytes     cntr += 1     if not data:         break     if cntr == 1:         continue     elif cntr == 4:         cntr = 0     else :         f_out.write(data)  f_in.close() f_out.close()<\/code><\/pre>\n<p>\u0412\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u2013 \u0438\u043c\u044f \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u043e\u0432. \u0412 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u0434\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u043a\u043e\u0431\u043a\u0443 \u0432 \u043a\u043e\u043d\u0446\u0435.<\/p>\n<p>\u041f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u2013 \u0440\u0430\u0441\u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442(\u043f\u0440\u0435\u0430\u043c\u0431\u0443\u043b\u0443) WAV-\u0444\u0430\u0439\u043b\u0430. \u041e\u043d\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0438 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u0430\u044f. \u041d\u0435 \u0431\u0443\u0434\u0443 \u0435\u0451 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043f\u043e \u043f\u0443\u043d\u043a\u0442\u0430\u043c, \u0442.\u043a. \u0435\u0441\u0442\u044c \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u044b\u0435 \u0441\u0430\u0439\u0442\u044b \u0441 \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u044f\u043c\u0438 (<a href=\"http:\/\/soundfile.sapp.org\/doc\/WaveFormat\/\" rel=\"noopener noreferrer nofollow\">http:\/\/soundfile.sapp.org\/doc\/WaveFormat\/<\/a>). \u0421\u0442\u043e\u0438\u0442 \u043b\u0438\u0448\u044c \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u043f\u043e\u043b\u0435\u0439 \u0438\u043c\u0435\u044e\u0442 little endian, \u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 big endian.<\/p>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u0435 wav-\u0444\u0430\u0439\u043b\u0430 \u0438 \u0444\u0430\u0439\u043b \u0434\u043b\u044f \u0440\u0430\u0441\u0447\u0435\u0442\u0430 crc. \u0412\u0435\u0441\u044c \u043a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0432 main.c \u0434\u0440\u0443\u0433 \u0437\u0430 \u0434\u0440\u0443\u0433\u043e\u043c.<\/p>\n<pre><code class=\"cpp\">#include \"PCM_data.h\" #include \"crc.h\"<\/code><\/pre>\n<p>\u041e\u0431\u044a\u044f\u0432\u0438\u043c \u0434\u0432\u0430 \u0434\u0435\u0444\u0430\u0439\u043d\u0430 \u2013 \u0440\u0430\u0437\u043c\u0435\u0440 \u043e\u043a\u043d\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432 \u043c\u0441 \u0438 \u0440\u0430\u0437\u043c\u0435\u0440 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0432 \u0431\u0430\u0439\u0442\u0430\u0445.<\/p>\n<pre><code class=\"cpp\">#define OPUS_FRAME_SIZE_IN_MS 10 #define OPUS_SIZE 880<\/code><\/pre>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u043b\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u043f\u0440\u0435\u0430\u043c\u0431\u0443\u043b\u044b. <\/p>\n<pre><code class=\"cpp\">typedef struct {     uint8_t ui8ChunkID[4];     uint32_t ui32ChunkSize;     uint8_t ui8Format[4];     uint8_t ui8SubChunk1ID[4];     uint32_t ui32SubChunk1Size;     uint16_t ui16AudioFormat;     uint16_t ui16NumChannels;     uint32_t ui32SampleRate;     uint32_t ui32ByteRate;     uint16_t ui16BlockAlign;     uint16_t ui16BitsPerSample;     uint8_t ui8SubChunk2ID[4];     uint32_t ui32SubChunk2Size; } tWaveHeader;<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f Ogg-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432(\u0441\u0442\u0440\u0430\u043d\u0438\u0446). <\/p>\n<pre><code class=\"cpp\">typedef struct {     uint32_t capture_pattern;     uint8_t version;     uint8_t header_type;     uint32_t granole_pos_l;     uint32_t granole_pos_h;     uint32_t bitstream_sn;     uint32_t page_seq_num;     uint32_t checksum;     uint8_t segments_length;     uint8_t page_segments; } tOggHeader;<\/code><\/pre>\n<p>\u0422\u0430\u043a \u0436\u0435 \u0443\u043a\u0430\u0436\u0435\u043c, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0442 wav \u0438 \u043e\u0431\u044a\u044f\u0432\u0438\u043c \u043e\u0431\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b. \u041e\u0431\u044a\u044f\u0432\u0438\u043c \u044d\u043d\u043a\u043e\u0434\u0435\u0440 OPUS\u2019a<\/p>\n<pre><code class=\"cpp\">extern uint8_t sound_wav_u8[];  tWaveHeader sWaveHeader; tOggHeader current_opus_header;  OpusEncoder *sOpusEnc;<\/code><\/pre>\n<p>\u0414\u043b\u044f \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430, \u043e\u0442\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0434 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043e\u0434\u0435\u043a\u0430, \u044f \u0443\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u044e \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0443 \u0432 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435. \u0422\u043e \u0435\u0441\u0442\u044c \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 <strong>Page Segments<\/strong>.<\/p>\n<pre><code class=\"cpp\">  current_opus_header.capture_pattern = 0x5367674F;    \/\/OggS   current_opus_header.header_type = 0x00;    current_opus_header.version = 0x00;    \/\/\u0412\u0441\u0435\u0433\u0434\u0430 0   current_opus_header.bitstream_sn = 0x11111111;   current_opus_header.granole_pos_l = 0;   current_opus_header.granole_pos_h = 0;   current_opus_header.page_seq_num = 2;   current_opus_header.segments_length = 0x01;<\/code><\/pre>\n<p>\u0412\u043e\u0442 \u0442\u0443\u0442 \u043f\u043e\u044f\u0441\u043d\u044e (current_opus_header.page_seq_num = <strong>2<\/strong>). \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u044f \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u043b \u043f\u0435\u0440\u0432\u044b\u0435 \u0434\u0432\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b. \u0412 \u043f\u0435\u0440\u0432\u044b\u0445 \u0434\u0432\u0443\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u0445 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u0434\u0435\u043a\u043e\u0434\u0435\u0440\u0430 OPUS. \u0423 \u043c\u0435\u043d\u044f \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435 \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438 \u0445\u0435\u0434\u0435\u0440\u044b \u0442\u043e\u0436\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u0438 \u0438\u0445 \u0434\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e \u0441\u0430\u043c \u0447\u0435\u0440\u0435\u0437 \u0445\u0435\u043a\u0441-\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440. \u0415\u0441\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0443 \u0432\u0430\u0441 \u0440\u0430\u0437\u043d\u044b\u0435, \u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u043a\u0443 OPUS-\u0445\u0435\u0434\u0435\u0440\u043e\u0432, \u0447\u0442\u043e \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u043e, \u0442.\u043a. \u043e\u043d \u0442\u043e\u0436\u0435 \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 Ogg.<\/p>\n<p>\u041f\u0430\u0440\u0441\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u0435 wav<\/p>\n<p><code>memcpy(&amp;sWaveHeader, sound_wav_u8, sizeof(sWaveHeader));<\/code><\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u044d\u043d\u043a\u043e\u0434\u0435\u0440<\/p>\n<pre><code class=\"cpp\">int32_t  i32error; sOpusEnc = opus_encoder_create(sWaveHeader.ui32SampleRate, sWaveHeader.ui16NumChannels, OPUS_APPLICATION_AUDIO, &amp;i32error);<\/code><\/pre>\n<p><strong>OPUS_APPLICATION_AUDIO <\/strong>\u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u044d\u043d\u043a\u043e\u0434\u0435\u0440\u0443, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0448\u0438\u0440\u043e\u043a\u0438\u043c \u0441\u043f\u0435\u043a\u0442\u0440\u043e\u043c. <strong>OPUS_APPLICATION_VOIP<\/strong>, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430\u0446\u0435\u043b\u0435\u043d \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0433\u043e\u043b\u043e\u0441.<\/p>\n<p>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u044d\u043d\u043a\u043e\u0434\u0435\u0440 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0441 <strong>celt<\/strong>. \u0413\u0438\u0431\u0440\u0438\u0434\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u043f\u0440\u0438 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u0442\u0430\u043a\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <strong>celt<\/strong>. \u0420\u0435\u0436\u0438\u043c \u0436\u0435 <strong>SILK <\/strong>\u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u0447\u0435\u043c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435.<\/p>\n<pre><code class=\"cpp\">opus_encoder_ctl(sOpusEnc, OPUS_SET_BITRATE((sWaveHeader.ui32SampleRate*2))); opus_encoder_ctl(sOpusEnc, OPUS_SET_BANDWIDTH(OPUS_BANDWIDTH_SUPERWIDEBAND)); opus_encoder_ctl(sOpusEnc, OPUS_SET_VBR(1)); opus_encoder_ctl(sOpusEnc, OPUS_SET_VBR_CONSTRAINT(0)); opus_encoder_ctl(sOpusEnc, OPUS_SET_COMPLEXITY(0)); opus_encoder_ctl(sOpusEnc, OPUS_SET_INBAND_FEC(0)); opus_encoder_ctl(sOpusEnc, OPUS_SET_FORCE_CHANNELS(1)); opus_encoder_ctl(sOpusEnc, OPUS_SET_DTX(0)); opus_encoder_ctl(sOpusEnc, OPUS_SET_PACKET_LOSS_PERC(0)); opus_encoder_ctl(sOpusEnc, OPUS_SET_LSB_DEPTH(sWaveHeader.ui16BitsPerSample)); opus_encoder_ctl(sOpusEnc, OPUS_SET_EXPERT_FRAME_DURATION(OPUS_FRAMESIZE_10_MS)); opus_encoder_ctl(sOpusEnc, OPUS_SET_FORCE_MODE(MODE_CELT_ONLY));<\/code><\/pre>\n<p><strong>OPUS_BANDWIDTH_SUPERWIDEBAND <\/strong>= 12 \u043a\u0413\u0446 \u0448\u0438\u0440\u0438\u043d\u0430 \u043f\u043e\u043b\u043e\u0441\u044b.<\/p>\n<p><strong>OPUS_SET_VBR(1)<\/strong> \u2013 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0431\u0438\u0442\u0440\u0435\u0439\u0442 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430.<\/p>\n<p><strong>OPUS_SET_BITRATE((sWaveHeader.ui32SampleRate * 2))<\/strong> \u2013 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0431\u0438\u0442\u0440\u0435\u0439\u0442 \u044f \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u043b \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0432\u0445\u043e\u0434\u043d\u043e\u0439.<\/p>\n<p>\u041e\u0431\u044a\u044f\u0432\u0438\u043c \u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u044d\u043d\u043a\u043e\u0434\u0435\u0440\u0430:<\/p>\n<p><code>uint8_t pui8data[150];<\/code><\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u043d\u0430 \u0432\u0445\u043e\u0434 OPUS \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 16-\u0431\u0438\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0431\u044a\u044f\u0432\u0438\u043c \u0435\u0433\u043e \u0438 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0440.<\/p>\n<pre><code class=\"cpp\">opus_int16 *popi16fmtBuffer; uint32_t ui32Sizeofpopi16fmtBuffer;  popi16fmtBuffer = (opus_int16 *)calloc((((sWaveHeader.ui32SampleRate * OPUS_FRAME_SIZE_IN_MS * sWaveHeader.ui16NumChannels)\/1000) + 1), sizeof(opus_int16)); ui32Sizeofpopi16fmtBuffer = (sWaveHeader.ui32SampleRate * OPUS_FRAME_SIZE_IN_MS * sWaveHeader.ui16NumChannels * sizeof(opus_int16)) \/ 1000;<\/code><\/pre>\n<p>\u0421\u043c\u043e\u0442\u0440\u0438\u043c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u0430\u0439\u0442 \u043e\u0442\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e\u0434 \u043e\u0434\u043d\u0443 \u0437\u0430\u043f\u0438\u0441\u044c:<\/p>\n<pre><code class=\"cpp\">uint8_t  ui8ScaleFactor; ui8ScaleFactor = (sWaveHeader.ui16BitsPerSample) >> 3;<\/code><\/pre>\n<p>\u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0431\u0430\u0439\u0442 \u043f\u043e\u0434 \u0437\u0430\u043f\u0438\u0441\u044c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0432 \u044d\u043d\u043a\u043e\u0434\u0435\u0440 (\u043a\u0443\u0441\u043e\u043a \u043a\u043e\u0434\u0430 \u0441 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438):<\/p>\n<pre><code class=\"cpp\">uint8_t has_data = 1; uint8_t pack = 0; int32_t  i32len; uint32_t ui32Loop;  while(has_data){       for(ui32Loop = 0 ; ui32Loop &lt; OPUS_SIZE ; ui32Loop++)       {           if(ui8ScaleFactor == 1)           {                  popi16fmtBuffer[ui32Loop] = (opus_int16)sound_wav_u8[OPUS_SIZE * pack + sizeof(sWaveHeader) + ui32Loop];           }           else if(ui8ScaleFactor == 2)           {               if(ui32Loop % 2 == 0)                   popi16fmtBuffer[ui32Loop\/2] = sound_wav_u8[OPUS_SIZE * pack + sizeof(sWaveHeader) + ui32Loop];               else                   popi16fmtBuffer[ui32Loop\/2] |= (sound_wav_u8[OPUS_SIZE * pack + sizeof(sWaveHeader) + ui32Loop] &lt;&lt; 8);           }        }  \/\/\u0435\u0441\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043d\u0430\u0431\u043e\u0440\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043f\u0430\u0447\u043a\u0438 \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442, \u0442\u043e \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u0431\u0438\u0432\u0430\u0435\u043c \u043d\u0430 \u043d\u0438\u0445. \u0427\u0442\u043e-\u0442\u043e \u043b\u0443\u0447\u0448\u0435 \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0442\u044c \u043c\u043e\u0436\u043d\u043e, \u044f \u043f\u043e\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u044d\u0442\u043e\u0442 \u0441\u043f\u043e\u0441\u043e\u0431 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u043e\u0432       if (OPUS_SIZE * pack+sizeof(sWaveHeader) > (sizeof(sound_wav_u8)\/sizeof(sound_wav_u8[0]) - OPUS_SIZE )){           has_data = 0;       }         i32len = opus_encode(sOpusEnc, popi16fmtBuffer, (ui32Sizeofpopi16fmtBuffer\/2), pui8data, OPUS_SIZE);        current_opus_header.granole_pos_l += popi16fmtBuffer; \/\/\u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u0433\u0440\u0430\u043d\u043e\u043b\u0443 \u043d\u0430 \u0440\u0430\u0437\u043c\u0435\u0440 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0445 \u0418\u041a\u041c       current_opus_header.page_seq_num += 1;       current_opus_header.page_segments = (uint8_t)i32len; \/\/\u0434\u043b\u0438\u043d\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 - \u0443 \u043d\u0430\u0441 \u043e\u043d\u0430 \u043e\u0434\u043d\u0430         pack++;  \/\/\u0440\u0430\u0431\u043e\u0442\u0430 \u0441 crc32       crc32_clear(); \/\/\u043e\u0447\u0438\u0441\u0442\u043a\u0430 crc32        crc32_push((uint8_t)current_opus_header.capture_pattern);       crc32_push((uint8_t)(current_opus_header.capture_pattern >> 8));       crc32_push((uint8_t)(current_opus_header.capture_pattern >> 16));       crc32_push((uint8_t)(current_opus_header.capture_pattern >> 24));       crc32_push(current_opus_header.header_type);       crc32_push(current_opus_header.version);       crc32_push((uint8_t)current_opus_header.granole_pos_l);       crc32_push((uint8_t)(current_opus_header.granole_pos_l >> 8));       crc32_push((uint8_t)(current_opus_header.granole_pos_l >> 16));       crc32_push((uint8_t)(current_opus_header.granole_pos_l >> 24));       crc32_push((uint8_t)current_opus_header.granole_pos_h);       crc32_push((uint8_t)(current_opus_header.granole_pos_h >> 8));       crc32_push((uint8_t)(current_opus_header.granole_pos_h >> 16));       crc32_push((uint8_t)(current_opus_header.granole_pos_h >> 24));       crc32_push((uint8_t)current_opus_header.bitstream_sn);       crc32_push((uint8_t)(current_opus_header.bitstream_sn >> 8));       crc32_push((uint8_t)(current_opus_header.bitstream_sn >> 16));       crc32_push((uint8_t)(current_opus_header.bitstream_sn >> 24));       crc32_push((uint8_t)current_opus_header.page_seq_num);       crc32_push((uint8_t)(current_opus_header.page_seq_num >> 8));       crc32_push((uint8_t)(current_opus_header.page_seq_num >> 16));       crc32_push((uint8_t)(current_opus_header.page_seq_num >> 24));       crc32_push(0);       crc32_push(0);       crc32_push(0);       crc32_push(0);       crc32_push(current_opus_header.segments_length);       crc32_push(current_opus_header.page_segments);       for(ui32Loop = 0 ; ui32Loop &lt; i32len ; ui32Loop++){           crc32_push((uint8_t)pui8data[ui32Loop]);       }       current_opus_header.checksum = crc32_get();   \/\/\u0432\u044b\u0432\u043e\u0434 \u0432 \u043a\u043d\u043e\u0441\u043e\u043b\u044c \u0447\u0435\u0440\u0435\u0437 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 printf.        i32_print_to_hex(current_opus_header.capture_pattern);       printf(\"%02X \", (uint8_t)current_opus_header.version);       printf(\"%02X \", (uint8_t)current_opus_header.header_type);       i32_print_to_hex(current_opus_header.granole_pos_l);       i32_print_to_hex(current_opus_header.granole_pos_h);       i32_print_to_hex(current_opus_header.bitstream_sn);       i32_print_to_hex(current_opus_header.page_seq_num);       i32_print_to_hex(current_opus_header.checksum);       printf(\"%02X \", (uint8_t)current_opus_header.segments_length);       printf(\"%02X \", (uint8_t)current_opus_header.page_segments);       for(ui32Loop = 0 ; ui32Loop &lt; i32len ; ui32Loop++){           printf(\"%02X \", (uint8_t)pui8data[ui32Loop]);       }   }<\/code><\/pre>\n<p>\u041e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u043c \u043f\u0430\u043c\u044f\u0442\u044c.<\/p>\n<pre><code class=\"cpp\">free(pui8data); free(popi16fmtBuffer);<\/code><\/pre>\n<h4>\u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/h4>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 32 \u0431\u0438\u0442\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u043e\u0442\u043b\u0430\u0434\u043a\u0438.<\/p>\n<pre><code class=\"cpp\">void i32_print_to_hex(uint32_t data){     printf(\"%02X %02X %02X %02X \", (uint8_t)data, (uint8_t)(data>>8), (uint8_t)(data>>16), (uint8_t)(data>>24)); }<\/code><\/pre>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0440\u0430\u0441\u0447\u0435\u0442\u0430 crc32:<\/p>\n<pre><code class=\"cpp\">#include \"crc.h\"  const unsigned int crc32_table[] = {   0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9,   0x130476dc, 0x17c56b6b, 0x1a864db2, 0x1e475005,   0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61,   0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd,   0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9,   0x5f15adac, 0x5bd4b01b, 0x569796c2, 0x52568b75,   0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011,   0x791d4014, 0x7ddc5da3, 0x709f7b7a, 0x745e66cd,   0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039,   0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5,   0xbe2b5b58, 0xbaea46ef, 0xb7a96036, 0xb3687d81,   0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d,   0xd4326d90, 0xd0f37027, 0xddb056fe, 0xd9714b49,   0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95,   0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1,   0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d,   0x34867077, 0x30476dc0, 0x3d044b19, 0x39c556ae,   0x278206ab, 0x23431b1c, 0x2e003dc5, 0x2ac12072,   0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16,   0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca,   0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde,   0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02,   0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1, 0x53dc6066,   0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba,   0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e,   0xbfa1b04b, 0xbb60adfc, 0xb6238b25, 0xb2e29692,   0x8aad2b2f, 0x8e6c3698, 0x832f1041, 0x87ee0df6,   0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a,   0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e,   0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2,   0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686,   0xd5b88683, 0xd1799b34, 0xdc3abded, 0xd8fba05a,   0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637,   0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb,   0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f,   0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53,   0x251d3b9e, 0x21dc2629, 0x2c9f00f0, 0x285e1d47,   0x36194d42, 0x32d850f5, 0x3f9b762c, 0x3b5a6b9b,   0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff,   0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623,   0xf12f560e, 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7,   0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b,   0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f,   0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3,   0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7,   0xae3afba2, 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b,   0x9b3660c6, 0x9ff77d71, 0x92b45ba8, 0x9675461f,   0x8832161a, 0x8cf30bad, 0x81b02d74, 0x857130c3,   0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640,   0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c,   0x7b827d21, 0x7f436096, 0x7200464f, 0x76c15bf8,   0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24,   0x119b4be9, 0x155a565e, 0x18197087, 0x1cd86d30,   0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec,   0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088,   0x2497d08d, 0x2056cd3a, 0x2d15ebe3, 0x29d4f654,   0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0,   0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, 0xdbee767c,   0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18,   0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4,   0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0,   0x9abc8bd5, 0x9e7d9662, 0x933eb0bb, 0x97ffad0c,   0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668,   0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4 };  uint32_t g_crc32_seq = 0x00;  void crc32_clear(void){      g_crc32_seq = 0x00;  }  void crc32_push(uint8_t val){     g_crc32_seq = (g_crc32_seq &lt;&lt; 8) ^ crc32_table[((g_crc32_seq >> 24) ^ val) &amp; 0xFF]; }  uint32_t crc32_get(void) {      return g_crc32_seq ^ 0x00;  }<\/code><\/pre>\n<p>\u0412\u043e\u0442 \u0438 \u0432\u0441\u0435. \u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0442\u0435\u0441\u0442\u043e\u0432 \u043c\u043d\u0435 \u044d\u0442\u043e\u0433\u043e \u0431\u044b\u043b\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e. \u042f \u0438\u0437\u043c\u0435\u0440\u044f\u043b \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u043c \u0442\u0430\u0439\u043c\u0435\u0440\u043e\u043c, \u0447\u0442\u043e \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430 \u043c\u043e\u0435\u0433\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 400 \u043c\u0441 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442, \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 112 \u043c\u0441, \u0447\u0442\u043e \u043f\u0440\u0438\u0433\u043e\u0434\u043d\u043e \u0434\u043b\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u201c\u043d\u0430 \u043b\u0435\u0442\u0443\u201d \u0434\u0430\u0436\u0435 \u0441 \u0442\u0430\u043a\u0438\u043c \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u043c \u043a\u043e\u0434\u043e\u043c. \u0427\u0430\u0441\u0442\u043e\u0442\u0430 \u0431\u044b\u043b\u0430 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u2013 80 \u041c\u0413\u0446. \u041f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u043b\u043e\u0441\u044c.<\/p>\n<blockquote>\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=zLaQrhB1_zg\" rel=\"noopener noreferrer nofollow\"><u>\u0412\u0438\u0434\u043e\u0441 \u043e\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043e\u043f\u0443\u0441\u0430<\/u><\/a><\/p>\n<p><a href=\"https:\/\/www.st.com\/en\/embedded-software\/x-cube-opus.html\" rel=\"noopener noreferrer nofollow\"><u>OPUS \u043e\u0442 STM<\/u><\/a><\/p>\n<p><a href=\"https:\/\/www.ti.com\/lit\/an\/spma076\/spma076.pdf?ts=1647533032617\" rel=\"noopener noreferrer nofollow\"><u>OPUS \u043e\u0442 TI<\/u><\/a><\/p>\n<\/blockquote>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/789220\/\"> https:\/\/habr.com\/ru\/articles\/789220\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u2013 \u0435\u0441\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 STM32 \u0441 \u043e\u0447\u0435\u043d\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u044c\u044e, \u0430 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u043d\u0435\u043c \u0437\u0432\u0443\u043a. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0447\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0441 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u043d\u0430\u043c\u0438 \u043c\u0438\u043a\u0440\u043e\u0444\u043e\u043d\u0430 \u0433\u043e\u0440\u0430 \u0438 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0430\u044f \u0442\u0435\u043b\u0435\u0436\u043a\u0430. \u0412 \u0438\u0442\u043e\u0433\u0435 \u0438\u043c\u0435\u0435\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043c\u0435\u0435\u0442 \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0430\u043c WAV-\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b. \u0425\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u044d\u0442\u043e\u0442 WAV-\u0441\u0438\u0433\u043d\u0430\u043b \u043a\u0443\u0434\u0430-\u0442\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c. \u0422\u0430\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0443\u0434\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e, \u0435\u0441\u0442\u044c \u043d\u0435\u043d\u0443\u043b\u0435\u0432\u0430\u044f \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c, \u0447\u0442\u043e \u043c\u044b \u043d\u0435 \u0432\u043b\u0435\u0437\u0435\u043c \u043f\u043e \u043f\u043e\u043b\u043e\u0441\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0433\u043e \u043a\u0430\u043d\u0430\u043b\u0430 \u0438\u043b\u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u043c \u043f\u0430\u043c\u044f\u0442\u044c \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043d\u0443\u0436\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e. \u041d\u0430 \u043f\u043e\u043c\u043e\u0449\u044c \u043d\u0430\u043c \u0441\u043f\u0435\u0448\u0438\u0442 \u043a\u043e\u043c\u043f\u0440\u0435\u0441\u0441\u0438\u044f!<\/p>\n<p>\u0410 \u0438\u043c\u0435\u043d\u043d\u043e \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0439, \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0438 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434\u0435\u043a OPUS. \u0418\u043c\u0435\u043d\u043d\u043e \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u0442\u0440\u0438\u043c\u0438\u043d\u0433\u043e\u0432\u044b\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u2013 \u043a\u0430\u043a \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e, \u0442\u0430\u043a \u0438 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0437\u0432\u0443\u043a\u043e\u0432\u044b\u0445 \u0434\u043e\u0440\u043e\u0436\u0435\u043a. \u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u043d \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u0435\u043d \u2013 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u0442 \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u043c\u0435\u0441\u0442\u0435. \u041c\u044b \u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0432\u043e\u0434\u0438\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u043c \u043f\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435:<\/p>\n<p>RAM (xrw) : ORIGIN = 0x20000000, LENGTH = <strong>48K<\/strong><br \/>RAM2 (xrw) : ORIGIN = 0x10000000, LENGTH = <strong>16K<\/strong><br \/>FLASH (rx) : ORIGIN = 0x8000000, LENGTH = <strong>256K<\/strong><\/p>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434\u0435\u043a \u0438\u043c\u0435\u0435\u0442 \u043e\u0431\u0448\u0438\u0440\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a. \u041a\u0430\u0436\u0434\u0430\u044f \u0438\u0445 \u043d\u0438\u0445 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u043e\u0433\u043e \u0437\u0432\u0443\u043a\u0430, \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u0442.\u0434., \u0447\u0442\u043e \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e. \u041f\u0435\u0440\u0432\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u2013 \u043a\u0430\u043a \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0432\u0443\u043a\u0430 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043a\u043e\u043c\u043f\u0440\u0435\u0441\u0441\u0438\u0438\/\u0434\u0435\u043a\u043e\u043c\u043f\u0440\u0435\u0441\u0441\u0438\u0438? \u041c\u043e\u0436\u043d\u043e \u0441\u0443\u0431\u044a\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u043f\u043e\u0441\u043b\u0443\u0448\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0438\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0441\u043f\u0435\u043a\u0442\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u041a\u043e\u0434\u0435\u043a \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f \u0434\u0432\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0438\u043b\u044c\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043d\u044b\u0445 \u043a\u043e\u0434\u0435\u043a\u0430: <a href=\"https:\/\/en.wikipedia.org\/wiki\/SILK\" rel=\"noopener noreferrer nofollow\"><strong>SILK<\/strong><\/a><strong> <\/strong>\u0438 <a href=\"https:\/\/en.wikipedia.org\/wiki\/CELT\" rel=\"noopener noreferrer nofollow\"><strong>CELT<\/strong><\/a>. \u041e\u0431\u0430 \u043b\u0443\u0447\u0448\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432 \u0441\u0432\u043e\u0438\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u2013 <strong>SILK<\/strong>, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043b\u0443\u0447\u0448\u0435 \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u043d\u043e\u0439 \u0440\u0435\u0447\u044c\u044e, \u043d\u043e \u0438\u043c\u0435\u0435\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u043f\u043e\u043b\u043e\u0441\u0435 \u0447\u0430\u0441\u0442\u043e\u0442. OPUS-\u043a\u043e\u0434\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u0442\u0440\u0435\u0445 \u0440\u0435\u0436\u0438\u043c\u0430\u0445: <strong>SILK<\/strong>, <strong>CELT <\/strong>\u0438 <strong>HYBRID<\/strong>. \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f\u0449\u0438\u0435, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u043e\u043d\u0438 \u0438\u0437 \u0441\u0435\u0431\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442. <\/p>\n<p>\u0427\u0442\u043e \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435? \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 Opus, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0437\u0432\u0443\u043a\u043e\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e \u0438 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u043e\u043f\u0443\u0441-\u0444\u0430\u0439\u043b.<\/p>\n<p>\u0418\u0442\u0430\u043a, \u043d\u0430\u0447\u043d\u0435\u043c.<\/p>\n<p>\u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u043d\u0443\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u043a\u043e\u0434\u044b \u0441 \u0441\u0430\u0439\u0442\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f (<a href=\"https:\/\/opus-codec.org\/\" rel=\"noopener noreferrer nofollow\">https:\/\/opus-codec.org\/<\/a>). \u041d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u0441\u0430\u043c\u0430\u044f \u0441\u0432\u0435\u0436\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0431\u044b\u043b\u0430 1.3.1<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0432\u044b \u0443\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u043f\u0440\u043e\u0435\u043a\u0442. \u0420\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0435\u043c \u0430\u0440\u0445\u0438\u0432 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0443 \u0444\u0430\u0439\u043b\u044b \u043a\u043e\u0434\u0435\u043a\u0430.<\/p>\n<figure class=\"\"><\/figure>\n<p>\u0412 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043f\u0443\u0442\u044c OPUS_ROOT \u0434\u043e \u043f\u0430\u043f\u043a\u0438 \u0441 \u043a\u043e\u0434\u0435\u043a\u043e\u043c<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0412 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f<\/p>\n<figure class=\"full-width\"><\/figure>\n<p><strong>VAR_ARRAYS<\/strong> \u2013 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u044b \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439. \u0415\u0441\u043b\u0438 \u0432\u0435\u0440\u0441\u0438\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u042199, \u0442\u043e \u0441\u0442\u043e\u0438\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441 USE_ALLOCA <\/p>\n<p><strong>DISABLE_FLOAT_API <\/strong>\u0438 <strong>FIXED_POINT <\/strong>\u0443\u0441\u043a\u043e\u0440\u044f\u044e\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 \u0438 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u044e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c.<\/p>\n<p><strong>OPUS_BUILD <\/strong>\u2013 \u0442\u0443\u0442 \u0432\u0441\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e.<\/p>\n<p>\u0412\u043c\u0435\u0441\u0442\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0444\u0430\u0439\u043b config.h, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0434\u0435\u0442 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u043e\u043c.<\/p>\n<p>\u0410 \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0435\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c. \u041d\u0443\u0436\u043d\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0438\u0437 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432\u0441\u0435 \u0444\u0430\u0439\u043b\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u043c\u0443 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0443, \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0443 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c. \u042d\u0442\u043e \u0432\u0441\u0435 \u0444\u0430\u0439\u043b\u044b \u0438 \u043f\u0430\u043f\u043a\u0438, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0435 \u0432 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0438 <strong>_test, _demo, _float, _ne10, _multistream_, mips, doc, win32, arm64, tests,<\/strong> \u0430 \u0442\u0430\u043a\u0436\u0435 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b (.S), \u0433\u0434\u0435 \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 <strong>neon<\/strong>. <\/p>\n<p>\u041f\u0440\u0430\u0432\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u043f\u043e \u0444\u0430\u0439\u043b\u0443<strong> (Alt+Enter) -> Properties -> Execute resource from build<\/strong><\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0415\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u043b\u0438, \u043d\u0438\u0447\u0435\u0433\u043e \u0441\u0442\u0440\u0430\u0448\u043d\u043e\u0433\u043e. \u0412 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043f\u043e\u0434\u0441\u043a\u0430\u0436\u0435\u0442, \u0447\u0442\u043e \u0447\u0442\u043e-\u0442\u043e \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0441\u043b\u0438 \u044d\u0442\u043e\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f.<\/p>\n<p>\u041a\u0430\u043a \u0443 \u043c\u0435\u043d\u044f \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0430\u043f\u043a\u0430 \u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 opus \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435:<\/p>\n<figure class=\"\"><\/figure>\n<h4>Src<\/h4>\n<figure class=\"\"><\/figure>\n<h4>Include<\/h4>\n<figure class=\"\"><\/figure>\n<p>\u041f\u0430\u043f\u043a\u0430 <strong>silk <\/strong>\u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u0430\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u043a\u0430\u0436\u0443 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b<\/p>\n<figure class=\"full-width\"><\/figure>\n<figure class=\"\"><\/figure>\n<p>\u0422\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0441 <strong>celt<\/strong><\/p>\n<figure class=\"\"><\/figure>\n<figure class=\"\"><\/figure>\n<p>\u0410\u0445, \u0434\u0430, \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c <strong>include paths<\/strong><\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0413\u043e\u0442\u043e\u0432\u043e. \u0414\u0430\u043b\u0435\u0435, \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u043e\u043c, \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432 <strong>main.c<\/strong> \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b<\/p>\n<pre><code>#include \"opus.h\" #include \"opus_types.h\" #include \"opus_private.h\"<\/code><\/pre>\n<p>\u041f\u0440\u043e\u0435\u043a\u0442 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b. \u0421\u0435\u0439\u0447\u0430\u0441 \u043c\u044b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0441\u0443\u0434\u0438\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 .opus \u0444\u0430\u0439\u043b\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u043c\u044b \u043c\u043e\u0433\u043b\u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445. \u0414\u0430, \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u043f\u043e\u0442\u043e\u043a PCM (\u0418\u041a\u041c) \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u0441\u0432\u043e\u0439 \u043f\u043e\u0442\u043e\u043a \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u041d\u043e \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u043d\u0430 \u043f\u0440\u0438\u0435\u043c\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435, \u0435\u0441\u043b\u0438 \u0438\u0445 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043d\u0435 \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, TI \u0432 \u0441\u0432\u043e\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0441 opus \u0432\u0432\u043e\u0434\u044f\u0442 \u044d\u0434\u0430\u043a\u0438\u0439 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0438 \u044d\u0442\u0438\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0435\u0439, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u043c\u044b \u0437\u0430\u043f\u0438\u0441\u0430\u043b\u0438. \u041d\u043e \u043c\u044b \u0436\u0435 \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u0440\u044f\u043c \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0435 .opus \u0444\u0430\u0439\u043b\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043d\u0430 \u043f\u043a \u0441 \u043b\u044e\u0431\u043e\u0433\u043e \u043f\u043b\u0435\u0435\u0440\u0430! \u0422\u0430\u043a\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043d\u0435 \u0433\u043e\u0434\u0438\u0442\u0441\u044f. \u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043e\u0442 ST \u0442\u043e\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0431\u0435\u0437 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0445 \u043a\u043e\u0441\u0442\u044b\u043b\u0435\u0439.<\/p>\n<p>\u041e\u0442\u043a\u0440\u043e\u0435\u043c \u043b\u044e\u0431\u043e\u0439 opus \u0444\u0430\u0439\u043b \u0447\u0435\u0440\u0435\u0437 hex \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0438 \u0447\u0442\u043e \u0436\u0435 \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u041f\u043e \u0432\u0441\u0435\u043c\u0443 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e opus \u0444\u0430\u0439\u043b \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 <strong>Ogg <\/strong>\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432, \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u0434\u0435\u043a\u0430 <strong>OPUS<\/strong>. <\/p>\n<p>\u0427\u0442\u043e \u0438\u0437 \u0441\u0435\u0431\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 <strong>Ogg <\/strong>\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0441 \u0432\u0438\u043a\u0438<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0435 \u0431\u0443\u0434\u0443 \u0440\u0430\u0441\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c <strong>\u043a\u0430\u0436\u0434\u043e\u0435 <\/strong>\u0438\u0437 \u043f\u043e\u043b\u0435\u0439 \u2013 \u0438\u0445 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435  \u0435\u0441\u0442\u044c \u043d\u0430 \u0432\u0438\u043a\u0438 \u0438 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0432 Ogg. \u041e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u044e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043b\u0438\u0448\u044c \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u043d\u0435 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u043c \u0434\u043b\u044f \u043c\u0435\u043d\u044f. \u0414\u0430\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0447\u0442\u0435\u043d\u0438\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 (<a href=\"https:\/\/xiph.org\/ogg\/doc\/rfc3533.txt\" rel=\"noopener noreferrer nofollow\">https:\/\/xiph.org\/ogg\/doc\/rfc3533.txt<\/a>)<\/p>\n<h4>Header Type<\/h4>\n<p>0x02 \u0434\u043b\u044f \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u0435\u0440\u0432\u043e\u0433\u043e<\/p>\n<p>0x04 \u0434\u043b\u044f \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e<\/p>\n<p>\u042d\u0442\u043e \u0432\u0441\u0435 \u0432\u0435\u0440\u043d\u043e. \u0410 \u0432\u043e\u0442 \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u041c\u0415\u0416\u0414\u0423 \u043d\u0438\u043c\u0438 Header Type \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c <strong>0x00<\/strong>, \u0435\u0441\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e \u043d\u0435 \u0440\u0430\u0437\u0431\u0438\u0442\u044b\u0439 \u043d\u0430 2 \u201cOgg-\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b\u201d \u043f\u0430\u043a\u0435\u0442 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u0447\u0442\u043e \u0431\u044b\u0432\u0430\u0435\u0442 \u043a\u0440\u0430\u0439\u043d\u0435 \u0440\u0435\u0434\u043a\u043e.<\/p>\n<h4>Granule Position<\/h4>\n<p>\u041d\u0435\u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c\u0430\u044f \u0438 \u043f\u043b\u043e\u0445\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u0430\u044f \u0433\u0430\u0434\u043e\u0441\u0442\u044c-\u043a\u0440\u043e\u0432\u043e\u043f\u0438\u0439\u0446\u0430. \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0447\u0438\u0441\u043b\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u043a\u043e\u043b\u044c\u043a\u043e PCM \u0441\u044d\u043c\u043f\u043b\u043e\u0432 \u0431\u044b\u043b\u043e \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0437\u0430 <strong>\u0412\u0421\u0415 <\/strong>\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b <strong>\u041f\u041b\u042e\u0421<\/strong> \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430.<\/p>\n<p>\u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u044d\u043d\u043a\u043e\u0434\u0435\u0440\u0430 \u0438 \u0441\u0431\u043e\u0440\u043a\u0435 \u0444\u0430\u0439\u043b\u0430. <\/p>\n<p>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e \u2013 \u0443 \u0432\u0430\u0441 \u043c\u0438\u043a\u0440\u043e\u0444\u043e\u043d \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0437\u0430\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u0438\u0445 \u0432 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0449\u0438\u043a, \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u043f\u0430\u043a\u0435\u0442\u044b (\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, Page) \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430 \u041f\u041a.<\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0430\u0440\u0442\u0430\u043d\u0443\u043b\u0438, \u0432\u043e\u0442 \u0432\u044b \u0437\u0430\u0441\u0443\u043d\u0443\u043b\u0438 600 \u043f\u0435\u0440\u0432\u044b\u0445 \u0441\u044d\u043c\u043f\u043b\u043e\u0432 \u0441 \u043c\u0438\u043a\u0440\u043e\u0444\u043e\u043d\u0430 \u0432 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0449\u0438\u043a, \u0430 \u043e\u043d \u0432\u044b\u043f\u043b\u044e\u043d\u0443\u043b N \u0441\u044d\u043c\u043f\u043b\u043e\u0432 \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445. \u041f\u043e\u0442\u043e\u043c \u0435\u0449\u0435 \u0432\u044b \u0437\u0430\u0441\u0443\u043d\u0443\u043b\u0438 700 \u0441\u044d\u043c\u043f\u043b\u043e\u0432, \u0430 \u043e\u043d \u0432\u044b\u043f\u043b\u044e\u043d\u0443\u043b M \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445. \u0422\u0430\u043a \u0432\u043e\u0442 Granule Position \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430 (\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b) \u0431\u0443\u0434\u0435\u0442 600, \u0430 \u0434\u043b\u044f \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430 600+700=1300. \u0418 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435.<\/p>\n<h4>Bitstream serial number<\/h4>\n<p>\u041e, \u0430 \u044d\u0442\u0430 \u043c\u043e\u044f \u043b\u044e\u0431\u0438\u043c\u0430\u044f.<\/p>\n<figure class=\"full-width\"><\/figure>\n<blockquote>\n<p>\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/p>\n<p>This unique serialnumber is created randomly and does not have any connection to the content or encoder of the logical bitstream it represents.<\/p>\n<\/blockquote>\n<p>\u041d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u044d\u0442\u043e \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e. \u041d\u043e \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u041e\u0414\u0418\u041d\u0410\u041a\u041e\u0412\u041e\u0415 \u0434\u043b\u044f \u043a\u0430\u0436\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b (\u043f\u0430\u043a\u0435\u0442\u0430) \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0430\u0443\u0434\u0438\u043e\u0441\u0442\u0440\u0438\u043c\u0430. \u0418 \u044d\u0442\u043e \u0447\u0438\u0441\u043b\u043e \u043f\u0440\u0438\u0434\u0443\u043c\u044b\u0432\u0430\u0435\u0442\u0435\/\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0435 <strong>\u0412\u042b<\/strong>, \u0430 \u043d\u0435 \u043e\u043f\u0443\u0441 \u0438\u043b\u0438 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0449\u0438\u043a.<\/p>\n<h4>Page sequence number<\/h4>\n<p>\u041f\u0440\u043e\u0441\u0442\u043e \u043d\u043e\u043c\u0435\u0440 \u201cOgg-\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b\u201d. \u041d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 0.<\/p>\n<p><strong>\u0427\u0435\u043a-\u0441\u0443\u043c\u043c\u0430<\/strong><\/p>\n<p>\u041d\u0438\u0447\u0435\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0433\u043e, \u043d\u043e \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c<\/p>\n<p>\u0425\u0435\u043a\u0441-\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 HxD \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0435\u0435 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u043e\u0432, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440.<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0414\u043b\u044f \u043f\u043e\u0434\u0441\u0447\u0435\u0442\u0430 \u041a\u0421, \u043d\u0443\u0436\u043d\u043e \u0432\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0443\u043b\u0438 \u043d\u0430 \u043c\u0435\u0441\u0442\u043e \u041a\u0421 \u0438 \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0432\u0441\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 (1 Ogg-\u043f\u0430\u043a\u0435\u0442)<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 \u0410\u043d\u0430\u043b\u0438\u0437->\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0435 \u0441\u0443\u043c\u043c\u044b<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0443 <strong>4C11DB7<\/strong>. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e, \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0430\u044f, \u043d\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u0430.<\/p>\n<h4>Page Segments<\/h4>\n<p>\u0427\u0438\u0441\u043b\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0434\u0430\u043b\u0435\u0435.<\/p>\n<h4>Segment Table<\/h4>\n<p>\u041f\u0435\u0440\u0432\u044b\u043c \u0438\u0434\u0435\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u043b\u0438\u043d \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u044b. \u0414\u043b\u0438\u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0447\u0438\u0441\u043b\u043e\u043c \u0432 <strong>Page Segments<\/strong>. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438\u0434\u0443\u0442 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0435.<\/p>\n<p><em>\u041f\u0440\u0438\u043c\u0435\u0440 1 \u2013 \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u043b\u043a\u0438\u0439 \u0444\u0430\u0439\u043b<\/em><\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0443 \u043d\u0430\u0441 <strong>Page Segments<\/strong> \u0440\u0430\u0432\u0435\u043d 1. \u0417\u043d\u0430\u0447\u0438\u0442 \u0434\u043b\u0438\u043d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u043d\u0430 1. \u0423 \u043d\u0430\u0441 \u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u043b\u0438\u043d \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0432\u0435\u043d 0x31. \u0417\u043d\u0430\u0447\u0438\u0442 \u043f\u043e\u0441\u043b\u0435 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438\u0434\u0435\u0442 0x31 (49) \u0448\u0442\u0443\u043a \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p><em>\u041f\u0440\u0438\u043c\u0435\u0440 2 \u2013 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b<\/em><\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0443 \u043d\u0430\u0441 <strong>Page Segments<\/strong> \u0440\u0430\u0432\u0435\u043d 0x7F (247). \u0414\u0430\u043b\u0435\u0435 \u0438\u0434\u0435\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u043b\u0438\u043d\u043e\u0439 247 \u2013 \u0432\u044b\u0434\u0435\u043b\u0435\u043d \u0434\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438. \u041a\u0430\u0436\u0434\u0430\u044f \u044f\u0447\u0435\u0439\u043a\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0434\u043b\u0438\u043d\u0443 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u043e\u0441\u043b\u0435 \u043d\u0435\u0433\u043e \u0438\u0434\u0443\u0442 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0434\u0430\u043d\u043d\u044b\u0435. \u0418\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e, 14000 \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 (\u043f\u0430\u043a\u0435\u0442\u0435).<\/p>\n<p>\u0421\u0430\u043c Opus \u0438 \u0435\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b(<strong>OpusHead <\/strong>\u0438 <strong>OpusTags <\/strong>\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0441\u0447\u0438\u0442\u0430\u043d\u044b \u0434\u0435\u043a\u043e\u0434\u0435\u0440\u043e\u043c) \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f \u0432 \u0441\u0435\u043a\u0446\u0438\u044f\u0445 <strong>Segment Table<\/strong> 2-\u0445 \u043f\u0435\u0440\u0432\u044b\u0445 Ogg-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432<\/p>\n<p>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u0435\u0439 \u0435\u0441\u0442\u044c \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0435 <strong>RFC 7845<\/strong> \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 <strong>Opus<\/strong>. \u041a\u0430\u0436\u0434\u043e\u0435 \u043f\u043e\u0441\u043b\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0431\u0435\u0437 \u0434\u0432\u0443\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043a\u043e\u043f\u0430\u0442\u044c \u0433\u043b\u0443\u0431\u0436\u0435, \u0447\u0435\u043c \u043d\u0430\u0434\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043d\u0435 \u0431\u0443\u0434\u0443.<\/p>\n<p>\u0412\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0443.<\/p>\n<p>\u0414\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u044d\u043d\u043a\u043e\u0434\u0435\u0440\u0430 \u043c\u043e\u0436\u043d\u043e \u0431\u0440\u0430\u0442\u044c \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0441 \u043c\u0438\u043a\u0440\u043e\u0444\u043e\u043d\u0430. \u0412 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u0436\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0438\u0437 wav-\u0444\u0430\u0439\u043b\u0430. Wav-\u0444\u0430\u0439\u043b \u0431\u044b\u043b \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d \u0432 \u0432\u0438\u0434\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 .h \u0444\u0430\u0439\u043b. \u0414\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u043d\u0430 \u043f\u0438\u0442\u043e\u043d\u0435:<\/p>\n<pre><code class=\"python\">f_in = open('example.wav', 'rb') f_out = open('PCM_data.h', 'wb')  cntr = 0 while True:     data = f_in.read(1)#[::-1]#reverse bytes     cntr += 1     if not data:         break     if cntr == 1:         continue     elif cntr == 4:         cntr = 0     else :         f_out.write(data)  f_in.close() f_out.close()<\/code><\/pre>\n<p>\u0412\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u2013 \u0438\u043c\u044f \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u043e\u0432. \u0412 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u0434\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u043a\u043e\u0431\u043a\u0443 \u0432 \u043a\u043e\u043d\u0446\u0435.<\/p>\n<p>\u041f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u2013 \u0440\u0430\u0441\u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442(\u043f\u0440\u0435\u0430\u043c\u0431\u0443\u043b\u0443) WAV-\u0444\u0430\u0439\u043b\u0430. \u041e\u043d\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0438 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u0430\u044f. \u041d\u0435 \u0431\u0443\u0434\u0443 \u0435\u0451 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043f\u043e \u043f\u0443\u043d\u043a\u0442\u0430\u043c, \u0442.\u043a. \u0435\u0441\u0442\u044c \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u044b\u0435 \u0441\u0430\u0439\u0442\u044b \u0441 \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u044f\u043c\u0438 (<a href=\"http:\/\/soundfile.sapp.org\/doc\/WaveFormat\/\" rel=\"noopener noreferrer nofollow\">http:\/\/soundfile.sapp.org\/doc\/WaveFormat\/<\/a>). \u0421\u0442\u043e\u0438\u0442 \u043b\u0438\u0448\u044c \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u043f\u043e\u043b\u0435\u0439 \u0438\u043c\u0435\u044e\u0442 little endian, \u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 big endian.<\/p>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u0435 wav-\u0444\u0430\u0439\u043b\u0430 \u0438 \u0444\u0430\u0439\u043b \u0434\u043b\u044f \u0440\u0430\u0441\u0447\u0435\u0442\u0430 crc. \u0412\u0435\u0441\u044c \u043a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0432 main.c \u0434\u0440\u0443\u0433 \u0437\u0430 \u0434\u0440\u0443\u0433\u043e\u043c.<\/p>\n<pre><code class=\"cpp\">#include \"PCM_data.h\" #include \"crc.h\"<\/code><\/pre>\n<p>\u041e\u0431\u044a\u044f\u0432\u0438\u043c \u0434\u0432\u0430 \u0434\u0435\u0444\u0430\u0439\u043d\u0430 \u2013 \u0440\u0430\u0437\u043c\u0435\u0440 \u043e\u043a\u043d\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432 \u043c\u0441 \u0438 \u0440\u0430\u0437\u043c\u0435\u0440 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0432 \u0431\u0430\u0439\u0442\u0430\u0445.<\/p>\n<pre><code class=\"cpp\">#define OPUS_FRAME_SIZE_IN_MS 10 #define OPUS_SIZE 880<\/code><\/pre>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u043b\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u043f\u0440\u0435\u0430\u043c\u0431\u0443\u043b\u044b. <\/p>\n<pre><code class=\"cpp\">typedef struct {     uint8_t ui8ChunkID[4];     uint32_t ui32ChunkSize;     uint8_t ui8Format[4];     uint8_t ui8SubChunk1ID[4];     uint32_t ui32SubChunk1Size;     uint16_t ui16AudioFormat;     uint16_t ui16NumChannels;     uint32_t ui32SampleRate;     uint32_t ui32ByteRate;     uint16_t ui16BlockAlign;     uint16_t ui16BitsPerSample;     uint8_t ui8SubChunk2ID[4];     uint32_t ui32SubChunk2Size; } tWaveHeader;<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f Ogg-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432(\u0441\u0442\u0440\u0430\u043d\u0438\u0446). <\/p>\n<pre><code class=\"cpp\">typedef struct {     uint32_t capture_pattern;     uint8_t version;     uint8_t header_type;     uint32_t granole_pos_l;     uint32_t granole_pos_h;     uint32_t bitstream_sn;     uint32_t page_seq_num;     uint32_t checksum;     uint8_t segments_length;     uint8_t page_segments; } tOggHeader;<\/code><\/pre>\n<p>\u0422\u0430\u043a \u0436\u0435 \u0443\u043a\u0430\u0436\u0435\u043c, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0442 wav \u0438 \u043e\u0431\u044a\u044f\u0432\u0438\u043c \u043e\u0431\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b. \u041e\u0431\u044a\u044f\u0432\u0438\u043c \u044d\u043d\u043a\u043e\u0434\u0435\u0440 OPUS\u2019a<\/p>\n<pre><code class=\"cpp\">extern uint8_t<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-366446","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/366446","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=366446"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/366446\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=366446"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=366446"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=366446"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}