Jar12 zadał mi pytanie:
>
Dla mnie (korzystam z Copilota - AI od Microsoftu), to po prostu wyszukiwarka - łączy słowa kluczowe i szuka, później sama tworzy zdania. Pomocna jest naprawdę kiedy trzeba coś dopasować - kształty geometryczne, albo np przy tworzeniu filmów.>
Ale czy to tylko wyszukiwarka (poza funkcjami które podałem wyżej) mógłbyś napisać jak coś więcej wiesz?www.racjonalista.pl/forum.php/s,953240#w953277Więc odpowiadam. Zwracam się do niego, ale myślę, że odpowiedź zainteresuje większość.
Do rozmowy z AI NIE potrzebujesz języka programowania. Jednak jeśli chcesz wykonywać polecenia automatycznie, generować muzykę, obrazy w pętli czy przetwarzać dane lub zbudować aplikację, to język programowania jest niezbędny. Tylko kod pozwala powtarzać zadania, kontrolować logikę i obsługiwać błędy
Jak wyglądałby cały ciąg generowania jednego taktu muzycznego programistycznie. tzn. jak wyglądałby pipeline, gdybyś chciał, żeby AI wygenerowało takt, a twój program go odebrał, przetworzył i zamienił na muzykę.
Poniżej podaję wersję czysto programistyczną, bez żadnych narzędzi zewnętrznych - po prostu logika krok po kroku.
1. Tworzysz prompt w kodzie
W Pythonie mogłoby to wyglądać tak:
prompt = """
Wygeneruj jeden takt melodii w tonacji C-moll,
w metrum 4/4, w formacie ABC notation.
"""
2. Wysyłasz zapytanie do modelu
response = client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": prompt}]
)
3. Odbierasz odpowiedź jako tekst
"Cm: G4 A4 Bb4 C5 |"
W kodzie:
takt = response.choices[0].message["content"]
4. Parsujesz wynik (np. ABC → struktura nut)
Możesz użyć biblioteki typu music21, ale nawet bez niej możesz zrobić prosty parser:
nuty = takt.replace("|", "").split()
# ["G4", "A4", "Bb4", "C5"]
5. Konwertujesz nuty na MIDI
Przykład z mido:
from mido import Message, MidiFile, MidiTrack
mid = MidiFile()
track = MidiTrack()
mid.tracks.append(track)
for nuta in nuty:
# tu zamieniasz np. "C4" na numer MIDI
midi_num = convert_to_midi_number(nuta)
track.append(Message('note_on', note=midi_num, velocity=64, time=0))
track.append(Message('note_off', note=midi_num, velocity=64, time=480))
mid.save("takt.mid")
6. Odtwarzasz lub zapisujesz takt
I masz gotowy jeden takt muzyczny wygenerowany przez AI i przetworzony przez twój program.
Cały pipeline w skrócie:
1.Kod tworzy promptPrompt to polecenie które wpisujesz do systemu. "kod tworzy prompt" chodzi o sytuację, w której program (kod) automatycznie generuje treść polecenia.
2.Wysyła go do modeluCzyli przekazany do systemu AI, aby ten mógł go przetworzyć i wygenerować odpowiedź.
3.Model zwraca tekst (np. ABC)Model - czyli system AI otrzymuje prompt, przetwarza go i zwraca wynik w postaci tekstu, np. "ABC".
4.Program parsuje tekstAnalizuje go krok po kroku, rozbija na części i próbuje zrozumieć jego strukturę, aby móc coś z nim zrobić.
5.Program zamienia go na strukturę muzyczną6.Program generuje MIDI / dźwięk______________________________
Możesz osiągnąć ten efekt ale tylko w trybie manualnym, nie automatycznym.
Czyli Ty wykonujesz wszystkie kroki, które w wersji programistycznej wykonywałby kod.
Sam interpretujesz wynik, rozumiesz zapis ABC, wiesz jakie to nuty, wiesz jak je odtworzyć. I wreszcie sam konwertujesz to na muzykę używając konwertera ABC → MIDI lub grając to na instrumencie.
Przy jednym takcie to jeszcze zabawa, ale przy całym utworze to już absurdalna ilość roboty, jeśli robisz to ręcznie i bez języka programowania.
Przy 64 taktach musiałbyś powtórzyć ten proces 64 razy. Dlatego właśnie przy większych projektach potrzebny jest język programowania
Zamiast 64 razy pisać prompt, robisz pętlę:
for takt in range(64):
wygeneruj_takt()
Jeśli chcesz utwór złożony z wielu taktów - potrzebujesz automatyzacji
pętla
logika
kontrola tonacji
kontrola metrum
kontrola długości
kontrola motywów
kontrola formy (A-B-A, intro, bridge, chorus)
To właśnie robi język programowania. Bez niego każdy takt musisz generować osobno. AI może stworzyć cały utwór - ale potrzebuje struktury