{"id":374750,"date":"2024-05-21T06:08:01","date_gmt":"2024-05-21T06:08:01","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=374750"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=374750","title":{"rendered":"<span>The streaming service Atlas.Music is modernizing the music production industry through the use of machine learning<\/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<h2>A project to identify the degree of success of music tracks.<\/h2>\n<p>The music service Atlas.Music, one of the most promising music services in the field of music streaming and promotion, announced the launch of a new subsystem that uses machine learning to identify potentially successful musical works. This innovative project aims to change the approach to promoting music on streaming platforms around the world.<\/p>\n<p>The main concept of the project is to use pre-trained artificial intelligence models to evaluate the success of tracks. The company has developed a solution that can calculate the probability of success of a musical work as a percentage of the most popular music, in terms of global trends. This gives composers of all skill levels the opportunity to gain insight into how marketable their music will be and how well it will be accepted by the public.<\/p>\n<p>\u201cWe at Atlas.Music strive to provide our users not only with a wide selection of musical content, but also to help talented musicians achieve success,\u201d said the head and ideological inspirer of the company, Alex Marshall. \u201cThe machine learning solutions we&#8217;ve built allow us to pinpoint potential hits, which helps both musicians and listeners.\u201d<\/p>\n<p>This new system represents a significant advancement in the music industry, providing composers and performers with a tool to more accurately predict the success of their works. Thanks to the use of data and machine learning algorithms, Atlas.Music becomes a leader in ensuring the effective promotion of music content on global streaming platforms.<\/p>\n<p><strong>\u041d\u0438\u0436\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430 \u043d\u0430 C++ \u0434\u043b\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 TensorFlow:<\/strong>  <\/p>\n<pre><code class=\"cpp\">#include &lt;iostream> #include &lt;tensorflow\/c\/c_api.h>  int main() {     \/\/ \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0433\u0440\u0430\u0444\u0430     TF_Graph* graph = TF_NewGraph();      \/\/ \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0435\u0441\u0441\u0438\u0438     TF_Status* status = TF_NewStatus();     TF_SessionOptions* session_opts = TF_NewSessionOptions();     TF_Session* session = TF_NewSession(graph, session_opts, status);      \/\/ \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0443\u0437\u043b\u043e\u0432 (\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439) \u0433\u0440\u0430\u0444\u0430     TF_OperationDescription* const input_op = TF_NewOperation(graph, \"Placeholder\", \"input\");     TF_OperationDescription* const output_op = TF_NewOperation(graph, \"Placeholder\", \"output\");      \/\/ \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u0433\u0440\u0430\u0444     TF_AddInput(input_op, TF_Output{TF_GraphOperationByName(graph, \"input\"), 0});     TF_AddInput(output_op, TF_Output{TF_GraphOperationByName(graph, \"output\"), 0});      \/\/ \u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439     TF_Operation* const input_op_final = TF_FinishOperation(input_op, status);     TF_Operation* const output_op_final = TF_FinishOperation(output_op, status);      \/\/ \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f (\u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d\u0430)      \/\/ \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0435\u0441\u0441\u0438\u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f     TF_Buffer* run_options = NULL;     TF_Output input = {input_op_final, 0};     TF_Output output = {output_op_final, 0};     TF_Tensor* input_values = NULL; \/\/ \u0417\u0434\u0435\u0441\u044c \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0432\u0430\u0448\u0438 \u0434\u0430\u043d\u043d\u044b\u0435     TF_Tensor* output_values = NULL; \/\/ \u0417\u0434\u0435\u0441\u044c \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0432\u0430\u0448\u0438 \u0434\u0430\u043d\u043d\u044b\u0435     TF_Tensor* outputs[] = {output_values};     TF_SessionRun(session, run_options,                   &amp;input, &amp;input_values, 1,                   &amp;output, outputs, 1,                   NULL, 0,                   NULL, status);      \/\/ \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f (\u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d\u0430)      \/\/ \u041e\u0447\u0438\u0441\u0442\u043a\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432     TF_DeleteGraph(graph);     TF_DeleteSession(session, status);     TF_DeleteSessionOptions(session_opts);     TF_DeleteStatus(status);      return 0; }<\/code><\/pre>\n<p>Note that this example creates a simple graph with &#171;Placeholder&#187; operations for input and output data. After this, the data is transferred to the training session and run using TF_SessionRun.<\/p>\n<p>To use TensorFlow in C++, you will also need to properly configure your development environment and include the necessary libraries.<\/p>\n<hr\/>\n<p><strong>Identification of dependencies between the success of a track and the genre of music.<\/strong><\/p>\n<p>There is a popular opinion that the popularity of music directly depends on the genre in which it is performed. This is absolutely not true. The table below shows the results of a random selection of tracks by song title and genre. The left table shows that tracks in the same genre can have different degrees of popularity. Although in the table on the right you can see some dependence of popularity on the genre, in practice it does not particularly affect the overall performance of the track. Such dependence rather indicates the artist\u2019s reluctance to promote his work. After all, it often happens that rock musicians don\u2019t really bother with additional expenses for promotion.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6dc\/60e\/59c\/6dc60e59c7f2a52e840ee9228c93145a.png\" width=\"1091\" height=\"205\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6dc\/60e\/59c\/6dc60e59c7f2a52e840ee9228c93145a.png\"\/><\/figure>\n<p>Good luck and good music to everyone!<\/p>\n<p>web: atlas-music.pp.ua<br \/>instagram.com\/muzophon<\/p>\n<\/p>\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\/810557\/\"> https:\/\/habr.com\/ru\/articles\/810557\/<\/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<h2>A project to identify the degree of success of music tracks.<\/h2>\n<p>The music service Atlas.Music, one of the most promising music services in the field of music streaming and promotion, announced the launch of a new subsystem that uses machine learning to identify potentially successful musical works. This innovative project aims to change the approach to promoting music on streaming platforms around the world.<\/p>\n<p>The main concept of the project is to use pre-trained artificial intelligence models to evaluate the success of tracks. The company has developed a solution that can calculate the probability of success of a musical work as a percentage of the most popular music, in terms of global trends. This gives composers of all skill levels the opportunity to gain insight into how marketable their music will be and how well it will be accepted by the public.<\/p>\n<p>\u201cWe at Atlas.Music strive to provide our users not only with a wide selection of musical content, but also to help talented musicians achieve success,\u201d said the head and ideological inspirer of the company, Alex Marshall. \u201cThe machine learning solutions we&#8217;ve built allow us to pinpoint potential hits, which helps both musicians and listeners.\u201d<\/p>\n<p>This new system represents a significant advancement in the music industry, providing composers and performers with a tool to more accurately predict the success of their works. Thanks to the use of data and machine learning algorithms, Atlas.Music becomes a leader in ensuring the effective promotion of music content on global streaming platforms.<\/p>\n<p><strong>\u041d\u0438\u0436\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430 \u043d\u0430 C++ \u0434\u043b\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 TensorFlow:<\/strong>  <\/p>\n<pre><code class=\"cpp\">#include &lt;iostream> #include &lt;tensorflow\/c\/c_api.h>  int main() {     \/\/ \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0433\u0440\u0430\u0444\u0430     TF_Graph* graph = TF_NewGraph();      \/\/ \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0435\u0441\u0441\u0438\u0438     TF_Status* status = TF_NewStatus();     TF_SessionOptions* session_opts = TF_NewSessionOptions();     TF_Session* session = TF_NewSession(graph, session_opts, status);      \/\/ \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0443\u0437\u043b\u043e\u0432 (\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439) \u0433\u0440\u0430\u0444\u0430     TF_OperationDescription* const input_op = TF_NewOperation(graph, \"Placeholder\", \"input\");     TF_OperationDescription* const output_op = TF_NewOperation(graph, \"Placeholder\", \"output\");      \/\/ \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u0433\u0440\u0430\u0444     TF_AddInput(input_op, TF_Output{TF_GraphOperationByName(graph, \"input\"), 0});     TF_AddInput(output_op, TF_Output{TF_GraphOperationByName(graph, \"output\"), 0});      \/\/ \u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439     TF_Operation* const input_op_final = TF_FinishOperation(input_op, status);     TF_Operation* const output_op_final = TF_FinishOperation(output_op, status);      \/\/ \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f (\u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d\u0430)      \/\/ \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0435\u0441\u0441\u0438\u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f     TF_Buffer* run_options = NULL;     TF_Output input = {input_op_final, 0};     TF_Output output = {output_op_final, 0};     TF_Tensor* input_values = NULL; \/\/ \u0417\u0434\u0435\u0441\u044c \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0432\u0430\u0448\u0438 \u0434\u0430\u043d\u043d\u044b\u0435     TF_Tensor* output_values = NULL; \/\/ \u0417\u0434\u0435\u0441\u044c \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0432\u0430\u0448\u0438 \u0434\u0430\u043d\u043d\u044b\u0435     TF_Tensor* outputs[] = {output_values};     TF_SessionRun(session, run_options,                   &amp;input, &amp;input_values, 1,                   &amp;output, outputs, 1,                   NULL, 0,                   NULL, status);      \/\/ \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f (\u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d\u0430)      \/\/ \u041e\u0447\u0438\u0441\u0442\u043a\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432     TF_DeleteGraph(graph);     TF_DeleteSession(session, status);     TF_DeleteSessionOptions(session_opts);     TF_DeleteStatus(status);      return 0; }<\/code><\/pre>\n<p>Note that this example creates a simple graph with &#171;Placeholder&#187; operations for input and output data. After this, the data is transferred to the training session and run using TF_SessionRun.<\/p>\n<p>To use TensorFlow in C++, you will also need to properly configure your development environment and include the necessary libraries.<\/p>\n<hr\/>\n<p><strong>Identification of dependencies between the success of a track and the genre of music.<\/strong><\/p>\n<p>There is a popular opinion that the popularity of music directly depends on the genre in which it is performed. This is absolutely not true. The table below shows the results of a random selection of tracks by song title and genre. The left table shows that tracks in the same genre can have different degrees of popularity. Although in the table on the right you can see some dependence of popularity on the genre, in practice it does not particularly affect the overall performance of the track. Such dependence rather indicates the artist\u2019s reluctance to promote his work. After all, it often happens that rock musicians don\u2019t really bother with additional expenses for promotion.<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>Good luck and good music to everyone!<\/p>\n<p>web: atlas-music.pp.ua<br \/>instagram.com\/muzophon<\/p>\n<\/p>\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\/810557\/\"> https:\/\/habr.com\/ru\/articles\/810557\/<\/a><br \/><\/br><\/br><\/p>\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-374750","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/374750","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=374750"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/374750\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=374750"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=374750"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=374750"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}