Угу - даже занимаются каверами. Этим даже на уроках музыки в школе занимаются.
То есть можно поменять голос, инструменты, размерность, язык - и это будет всё равно кавер?
Кавер-версия (или кавер) — это новое исполнение или запись уже существующей песни музыкантом или коллективом, который не является её оригинальным автором или первым исполнителем. [1]
Обычно в кавере сохраняется базовая мелодия и текст оригинала, но полностью меняются аранжировка, темп, вокальная подача или даже музыкальный жанр. [2]
Основные отличия кавера от смежных понятий
Для точного понимания термина важно отличать кавер от других вариантов работы с чужой музыкой: [3, 4]
- От ремикса (Remix): Ремикс создается на основе оригинальной аудиозаписи (используются дорожки голоса или инструментов автора) путем изменения ритма и добавления эффектов. Кавер всегда записывается полностью с нуля. [4]
- От ремейка (Remake): Ремейк — это обновленная версия трека, которую выпускает тот же самый артист или продюсер оригинала, чтобы освежить звучание старого хита. Кавер исполняет другой артист. [2]
- От плагиата: Плагиат — это незаконное копирование чужой музыки с целью выдать её за свою. Создатели кавера всегда указывают настоящее авторство песни. [3]
Основные виды каверов
- Прямой кавер — максимально точное повторение оригинального исполнения (часто используется кавер-группами на праздниках).
- Творческое переосмысление — изменение стиля до неузнаваемости (например, превращение поп-хита в тяжелый рок или акустическую балладу).
- Трибьют (Tribute) — кавер-версия, записанная как дань уважения известному музыканту. Сборники таких песен называют трибьют-альбомами. [5]
Если вы хотите узнать больше, уточните:
- Вас интересуют юридические правила и авторские права на каверы?
- Нужны известные примеры, когда кавер стал популярнее оригинала?
- Вы планируете записать собственный кавер и ищете инструкцию?
[4] https://vk.ru
Предлагаю тему к пятнице.
Вот код для ESP32 в среде Arduino IDE. Текст разбит на характерные для Маяковского короткие строки («лесенку»), а логика программы меняет интонацию (скорость и регистр текста) в зависимости от восторженных ответов.
#include <WiFi.h>
#include <WiFiUdp.h>
// Настройки сети
const char* ssid = "YOUR_WIFI_SSID";
const char* password = "YOUR_WIFI_PASSWORD";
const int port = 8888;
WiFiUDP udp;
IPAddress broadcastIP;
// Состояние передатчика
enum Intonation { NORMAL, RAGING, TRIUMPHANT };
Intonation currentIntonation = NORMAL;
unsigned long lastSendTime = 0;
unsigned long pauseDuration = 3000; // Пауза между строками (мс)
int stanzaIndex = 0;
int lineIndex = 0;
// Поэтический массив (Маяковский про ESP32 и радиоволны)
const int TOTAL_STANZAS = 3;
const int STANZA_SIZES[TOTAL_STANZAS] = {3, 3, 3};
const char* poem[TOTAL_STANZAS][3] = {
{
"СЛУШАЙТЕ!",
"Железобетонный мир,",
"Вяни!"
},
{
"Я,",
"высчитанный в кремнии",
"КРИЧУ В ЭФИР!"
},
{
"Сквозь бури ночи",
"Лети,",
"Мой радио-стих!"
}
};
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi подключен!");
udp.begin(port);
broadcastIP = ~WiFi.subnetMask() | WiFi.gatewayIP();
}
void loop() {
handleIncomingReplies();
// Отправка по таймеру с учетом динамической паузы
if (millis() - lastSendTime >= pauseDuration) {
sendPoetryLine();
lastSendTime = millis();
}
}
void sendPoetryLine() {
String line = poem[stanzaIndex][lineIndex];
// Модификация текста под интонацию
if (currentIntonation == RAGING) {
line.toUpperCase();
line += "!!!";
} else if (currentIntonation == TRIUMPHANT) {
line = "★ " + line + " ★";
}
// Отправка бродкаста
udp.beginPacket(broadcastIP, port);
udp.print(line);
udp.endPacket();
Serial.print("Отправлено [Интонация: ");
Serial.print(currentIntonation);
Serial.print("]: ");
Serial.println(line);
// Переход к следующей строке «лесенки»
lineIndex++;
if (lineIndex >= STANZA_SIZES[stanzaIndex]) {
lineIndex = 0;
stanzaIndex = (stanzaIndex + 1) % TOTAL_STANZAS;
}
}
void handleIncomingReplies() {
int packetSize = udp.parsePacket();
if (packetSize) {
char replyBuffer[255];
int len = udp.read(replyBuffer, 255);
if (len > 0) replyBuffer[len] = 0;
String reply = String(replyBuffer);
reply.toLowerCase();
Serial.print("Получен отклик: ");
Serial.println(replyBuffer);
// Анализ восторженности отклика и смена интонации/пауз
if (reply.indexOf("браво") != -1 || reply.indexOf("еще") != -1 || reply.indexOf("!") != -1) {
currentIntonation = TRIUMPHANT;
pauseDuration = 1500; // Ускоряем темп от триумфа
Serial.println("-> Интонация: Триумфальная! Темп ускорен.");
}
else if (reply.indexOf("громче") != -1 || reply.indexOf("мощно") != -1) {
currentIntonation = RAGING;
pauseDuration = 4000; // Чеканим шаг, увеличиваем паузу
Serial.println("-> Интонация: Яростная! Четкий ритм.");
}
else {
currentIntonation = NORMAL;
pauseDuration = 3000;
Serial.println("-> Интонация: Стандартный Маяковский.");
}
// Синхронизация: сбрасываем таймер, чтобы мгновенно отреагировать на отзыв следующей строкой
lastSendTime = millis() - pauseDuration + 500;
}
}
Архитектура и логика работы
- Ритм и лесенка: Стихи заложены в двумерный массив. Робот шагает по строкам, имитируя рубленый слог поэта.
- Адаптивная интонация: Переключатель
Intonationменяет регистр букв (UPPERCASE) и добавляет знаки препинания (!!!,★) на лету. - Обратная связь: Функция
handleIncomingRepliesсканирует UDP-порт. Если приходят ключевые слова («браво», «еще», «громче»), модуль мгновенно перестраивает темпpauseDuration. - Синхронизация пауз: При получении триггерного пакета таймер
lastSendTimeискусственно сдвигается вперед, заставляя ESP32 выдать новую строку с обновленной эмоцией почти сразу (через 500 мс).
Если нужно, я могу:
- Написать код для принимающего модуля, который будет слать те самые восторженные ответы
- Добавить генерацию случайных стихов вместо фиксированного массива
- Переписать код под ESP-IDF, если вы не используете Arduino IDE
Какой вариант продолжения вам ближе?
Надо транситом с максимальной имитацией русских букв.
Или соседям вещать предупреждения, чтобы правильно парковали своё авто.
Попросил братуху @BABOS -а сделать код. Вот что получилось.
Чтобы уложить целых три четверостишья (12 строк), мы объединим их в один большой массив или структуру из 3 куплетов по 4 строки в каждом.
Самое красивое решение — это транслировать все 4 строки текущего куплета одновременно, используя для каждой строчки свой уникальный MAC-адрес (от 0 до 3). Тогда человек, открыв Wi-Fi на телефоне, сразу увидит весь куплет целиком (4 строчки друг под другом)! А через 20 секунд этот куплет полностью «стирается» из эфира механизмом очистки, и на его месте появляются 4 строчки следующего куплета.
Чтобы строки шли строго по порядку (1, 2, 3, 4), мы будем менять последний байт MAC-адреса. Смартфоны обычно сортируют Wi-Fi сети по уровню сигнала или по алфавиту, поэтому добавление цифр в начале строк (1., 2…) гарантирует правильный порядок отображения на экране.
Скетч для трансляции 3 куплетов по 4 строки
#include <WiFi.h>
#include "esp_wifi.h"
// 3 куплета по 4 строки (всего 12 строк)
// Каждая строка на русском (UTF-8) должна быть не длиннее 15-16 букв (32 байта)
const char* poem[3][4] = {
{
"1. Буря мглою",
"2. Небо кроет",
"3. Вихри снежные",
"4. Крутя..."
},
{
"1. То как звеpь",
"2. Она завоет",
"3. То заплачет",
"4. Как дитя..."
},
{
"1. То по кровле",
"2. Обветшалой",
"3. Вдруг соломой",
"4. Зашумит..."
}
};
// Шаблон кадра Beacon (802.11)
uint8_t beacon_packet[128] = {
0x80, 0x00, // Type/Subtype: Beacon frame
0x00, 0x00, // Duration
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // Destination: Broadcast
0x01, 0x02, 0x03, 0x04, 0x05, 0x00, // Source MAC (Последний байт меняется от 0 до 3)
0x01, 0x02, 0x03, 0x04, 0x05, 0x00, // BSSID (Последний байт меняется от 0 до 3)
0x00, 0x00, // Sequence Control
// --- Wireless Management Body ---
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Timestamp
0x64, 0x00, // Beacon Interval (100 TU)
0x11, 0x00, // Capability Information
// --- Tagged Parameters ---
0x00, // Tag ID: 0 (SSID)
0x00 // Tag Length
};
int current_stanza = 0; // Индекс текущего куплета (0, 1, 2)
unsigned long last_switch = 0;
const unsigned long STANZA_DURATION = 20000; // 20 секунд на один куплет
int append_standard_tags(int index) {
// Supported Rates
beacon_packet[index++] = 0x01;
beacon_packet[index++] = 0x08;
beacon_packet[index++] = 0x82; beacon_packet[index++] = 0x84;
beacon_packet[index++] = 0x8B; beacon_packet[index++] = 0x96;
beacon_packet[index++] = 0x24; beacon_packet[index++] = 0x30;
beacon_packet[index++] = 0x48; beacon_packet[index++] = 0x6C;
// Channel (Канал 1)
beacon_packet[index++] = 0x03;
beacon_packet[index++] = 0x01;
beacon_packet[index++] = 0x01;
return index;
}
// Функция полной очистки всего куплета (стираем все 4 MAC-адреса из эфира)
void clear_all_lines_from_air() {
Serial.println("Очистка старого куплета из эфира...");
// Проходим по всем 4 виртуальным MAC-адресам, которые мы использовали
for (int line = 0; line < 4; line++) {
beacon_packet[15] = line;
beacon_packet[21] = line;
beacon_packet[37] = 0; // Длина названия сети = 0 (пустая сеть)
int full_len = append_standard_tags(38);
// Шлем пачку пустых пакетов для каждого MAC-адреса
for (int i = 0; i < 3; i++) {
esp_wifi_80211_tx(WIFI_IF_AP, beacon_packet, full_len, true);
delay(5);
}
}
}
void setup() {
Serial.begin(115200);
delay(1000);
WiFi.mode(WIFI_AP);
esp_wifi_set_promiscuous(true);
esp_wifi_set_channel(1, WIFI_SECOND_CHAN_NONE);
Serial.println("Поэтическая трансляция (3 куплета) запущена...");
last_switch = millis();
}
void loop() {
unsigned long current_time = millis();
// Каждые 20 секунд переключаем куплет целиком
if (current_time - last_switch >= STANZA_DURATION) {
clear_all_lines_from_air(); // Сначала полностью стираем старые 4 строчки
current_stanza = (current_stanza + 1) % 3; // Переходим к следующему куплету (0 -> 1 -> 2 -> 0)
last_switch = current_time;
Serial.print("--- Переключение на куплет № ");
Serial.print(current_stanza + 1);
Serial.println(" ---");
}
// Внутри главного цикла мы по очереди отправляем все 4 строчки текущего куплета.
// Так как delay микроскопический, для человека в эфире они будут висеть одновременно.
for (int line = 0; line < 4; line++) {
const char* ssid = poem[current_stanza][line];
uint8_t ssid_len = strlen(ssid);
if (ssid_len > 32) ssid_len = 32;
// Каждой строчке свой уникальный MAC (последний байт равен индексу строки 0,1,2,3)
beacon_packet[15] = line;
beacon_packet[21] = line;
// Записываем длину текста и сам текст
beacon_packet[37] = ssid_len;
memcpy(&beacon_packet[38], ssid, ssid_len);
// Дописываем теги частот и скоростей
int full_length = append_standard_tags(38 + ssid_len);
// Отправляем строку в эфир
esp_wifi_80211_tx(WIFI_IF_AP, beacon_packet, full_length, true);
// Маленькая пауза между строчками, чтобы не перегружать буфер передатчика
delay(10);
}
// Общая пауза перед следующим циклом отправки всего куплета (около 60-70 мс)
delay(60);
}
Как это будет выглядеть на экране телефона:
- Вы открываете Wi-Fi и видите сразу 4 строчки первого куплета (благодаря нумерации
1.,2.они выстроятся по порядку). - Проходит 20 секунд. Плата отправляет пакеты очистки. Старый куплет пропадает с экрана.
- Мгновенно появляется второй куплет (тоже 4 строчки разом).
- Еще через 20 секунд — третий куплет. После чего всё повторится по кругу.
Загрузите этот код в ваш ESP32. Если заметите, что из-за особенностей сканирования вашего телефона строчки появляются не одновременно или перемешиваются, напишите модель операционной системы (Android/iOS) — я подскажу, как скорректировать задержки конкретно под неё. Всё ли понятно по структуре массивов?
кто то ник мой плагиатит ? это вроде не мой код… и даже стих не мой!)))
аааа дошло! не сразу но дошло!))) а с чего вы взяли что вы именно к моему братишке обращались ?))) вот совсем не факт что это сделанно им
Исключительно и полностью ИИ.
только вот не каждый ии может быть мне братом, и тем более братишкой))) особенно братухой…
Вы одна шайка-лейка.
ну в принципе вода и водка тоже жидкости… но они разные!)))
вы там как ? бабки мне не хотите подарить ? на адрики например…
какие тут оказывается у людей проблемы, а мне бы в вес конечного изделия с записанным мной кодом уложиться, вот кромсаю и правлю, надеюсь уложусь
ua6em давайте наймем меня, за дорого! проблемы которые решаются деньгами, проблемами не считаются!)))
да ты же понятия не имеешь как уменьшить вес программы
зато я осваивал больше 1000 бесполезных вещей на один раз!
и если есть бабки, то думаю и с вашим вопросом разберусь, опыт решает!)))
желательно что бы плата была бы еще esp32, там вовсе легче…
часть кода засунем в psram… хоть и скорость выполнения упадет…
за бабки и дурак сможет
я бы сказал без бабок только дурак сможет)))
у меня есть еще офигительная идея для всех пенсионеров форума, вы все равно не работаете, предлагаю вам создать тему прожарка, где будите обсуждать глубину падения работодателей, например берем вакансию Вакансия Инженер-робототехник-мехатроник (разработка мобильных роботов для диагностики трубопроводов) в Москве, работа в компании Группа компаний Юникон данный работодатель согласно требованию
Обеспечение точного позиционирования и маневренности робота в трубах различного диаметра и конфигурации.
без точного описания робота который им нужен, и среды в которой он будет использоваться
получает оценку - 3 балла по 10 бальной шкале
за то что рекрутер вообще далек от темы создания роботов, - 1 балл
за отсутствие подъемных, и воспитании с их стороны специалистов - 5 баллов
за Трудовой договор, сумму оплаты по договору без индексации, с требованиями Образование: Высшее техническое образование (бакалавриат/магистратура) в области робототехники, мехатроники, прикладной физики, электротехники, машиностроения или смежных дисциплин . - 10 баллов наверное…
как итог минус 19 баллов по 10 бальной шкале, что то такое, в целом может это будет забавным))) а то тут появлялся 1 работодатель, который не знал где портфолио требовать… может лет через 10 конторы изменяться, и с ними можно будет начать общаться… так что эта тема может будет еще и полезна! как вам идея ?)))
Для того, чтобы купить что нибудь не нужное - надо сначала продать что нибудь не нужное! (с) Дядя Федор.
