Idee für Wettbewerb: Künstlicher-Komponist-Programm
Nein, dann wird das zu komplex - einstimmig sollte meiner Meinung nach reichen.
Es wäre krass, wenn jemand ein Programm schreibt, dass lernt, also "das klingt gut" und "das klingt nicht gut" (für längere Abschnitte, so ein paar Noten) - oder sogar Stimmungen (von 2 hintereinanderfolgenden Tönen - melancholisch, u.s.w.) und die dann auch Einsetzen kann.
Es wäre krass, wenn jemand ein Programm schreibt, dass lernt, also "das klingt gut" und "das klingt nicht gut" (für längere Abschnitte, so ein paar Noten) - oder sogar Stimmungen (von 2 hintereinanderfolgenden Tönen - melancholisch, u.s.w.) und die dann auch Einsetzen kann.
Windows XP Pro SP2 - PB 4.00Ich bin Ausländer - fast überall
Wenn man allen ein paar Prozeduren dafür zur Verfügung stellt,bluejoke hat geschrieben:Nein, dann wird das zu komplex - einstimmig sollte meiner Meinung nach reichen.
dann sollte MIDI kein Problem sein.
Dann braucht man nur noch PlayNote(kanal, Note) aufrufen.
Prozeduren dafür hab ich im: MIDI_Painter.zip, Datei INCLUDE\PureMIDI.pb
Dieses Include könnte man als Standard nehmen. Auch die
Hauptdatei "Sequenzer.pb" könnte man so nehmen.
Der Entwickler liefert so selbst nur eine Include mit der Funktion
main() die aufgerufen wird.
So ist der Setup-Dialog zur Auswahl des MIDI-Devices schon
alles da, man braucht nur noch einen Generator für PlayNote()
schreiben.
Was in Main() dann passiert ist komplett Sache des Entwicklers.
Ob er eine Console öffnet, ein Fenster oder einen Screen, etc..
jeder sollte ab Main() komplette Freiheit haben. So kommen wenigstens
viele unterschiedliche Ergebnisse raus.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Hab mal was ausgegraben und verändert:

Code: Alles auswählen
Structure WAVE
wFormatTag.w
nChannels.w
nSamplesPerSec.l
nAvgBytesPerSec.l
nBlockAlign.w
wBitsPerSample.w
cbSize.w
EndStructure
Enumeration
#Sound_Sin
#Sound_Distort
#Sound_Guitar
#Sound_Modem
EndEnumeration
Procedure GenSFX(nr,Frequency, Duration,Mode);
SoundValue.b
w.f
#Mono = $0001
#SampleRate = 11025
#RiffId$ = "RIFF"
#WaveId$ = "WAVE"
#FmtId$ = "fmt "
#DataId$ = "data"
#pi = 3.1415
WaveFormatEx.WAVE
WaveFormatEx\wFormatTag = #WAVE_FORMAT_PCM
WaveFormatEx\nChannels = #Mono
WaveFormatEx\nSamplesPerSec = #SampleRate
WaveFormatEx\wBitsPerSample = $0008
WaveFormatEx\nBlockAlign = (WaveFormatEx\nChannels * WaveFormatEx\wBitsPerSample) / 8
WaveFormatEx\nAvgBytesPerSec = WaveFormatEx\nSamplesPerSec * WaveFormatEx\nBlockAlign
WaveFormatEx\cbSize = 0
DataCount = (Duration * #SampleRate)/1000
RiffCount = 4 + 4 + 4 + SizeOf(WAVE) + 4 + 4 + DataCount
start=AllocateMemory(RiffCount+100)
MS=start
PokeS(MS,#RiffId$):MS+4
PokeL(MS,RiffCount):MS+4
PokeS(MS,#WaveId$):MS+4
PokeS(MS,#FmtId$):MS+4
TempInt = SizeOf(WAVE)
PokeL(MS,TempInt):MS+4
PokeW(MS,WaveFormatEx\wFormatTag):MS+2
PokeW(MS,WaveFormatEx\nChannels):MS+2
PokeL(MS,WaveFormatEx\nSamplesPerSec):MS+4
PokeL(MS,WaveFormatEx\nAvgBytesPerSec):MS+4
PokeW(MS,WaveFormatEx\nBlockAlign):MS+2
PokeW(MS,WaveFormatEx\wBitsPerSample):MS+2
PokeW(MS,WaveFormatEx\cbSize):MS+2
PokeS(MS,#DataId$):MS+4
PokeL(MS,DataCount):MS+4
w = 2 * #pi * Frequency
For i = 0 To DataCount - 1
Select Mode
Case #Sound_Distort
SoundValue = 127 + 32 * Sin(i * w / #SampleRate)*1.55*35
Case #Sound_Modem
SoundValue = 127 + 127 * Cos(i * w / #SampleRate)/Pow(Cos(#SampleRate),3)
Case #Sound_Guitar
SoundValue = 127 + 127 * Sin(i * w / #SampleRate)*1.55
Case #Sound_Sin
SoundValue = 127 + 127 * Sin(i * w / #SampleRate)
EndSelect
PokeB(MS,SoundValue):MS+1;
Next
CatchSound(nr,start)
EndProcedure
Procedure CloseSFX(nr)
StopSound(nr)
FreeSound(nr)
FreeMemory(nr)
EndProcedure
Procedure DoSFX(nr,Mode)
PlaySound(nr,Mode)
EndProcedure
If InitSound() = 0
MessageRequester("Error", "Couldn´t init DirectX7 Sound!", #MB_OK|#MB_ICONERROR|#MB_SYSTEMMODAL)
EndIf
For i = 0 To 99
GenSFX(i,Random(25)+25,Random(100)+38,2)
Next i
Procedure Furz(val)
DoSFX(val,0)
Beep_(Random(2022)+val,Random(10)+10)
If GetAsyncKeyState_(#VK_ESCAPE)
End
EndIf
Delay(90)
Furz(Random(99))
EndProcedure
Furz(Random(99))
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Ich hatte das vor einiger Zeit im alten Forum bereits erwähnt: für den Amiga gab es ein Programm, welches wirklich selbst komponieren konnte. Mehrstimmig. Einflussmöglichkeiten gab es auf Notenebene keine, nur welche Instrumente benutzt werden sollten und die Geschwindigkeit. Wenn ich mich richtig erinnere, war das alles.
Die Ergebnisse gingen von "grausam" bis "durchaus hörbar". Mit viel Glück war sogar ein "gut" drin. Die Idee gefiel mir als völlig unmusikalischem Nutzer natürlich trotzdem sehr gut - und auf dem PC (und erst recht Mac) habe ich so ein einfaches Programm bislang nicht gefunden. Ach so, das Programm hieß "Musiker" und konnte die erstellten Songs als MOD-Datei abspeichern.
Außerdem gab es noch "Algomusic", welches im Hintergrund lief und permanent per Algorithmus Musik abspielte. Diese war eher Techno-geprägt, glaube ich. Ist schon zu lange her, aber die Musik gefiel mir vom Stil er nicht, obwohl es teilweise auch sehr melodisch und relativ professionell klang. Abspeichern konnte man die Songs, so glaube ich, aber nicht.
Ein solcher Wettbewerb könnte mir auch gefallen - allerdings nur wegen der erhofften Ergebnisse...
Die Ergebnisse gingen von "grausam" bis "durchaus hörbar". Mit viel Glück war sogar ein "gut" drin. Die Idee gefiel mir als völlig unmusikalischem Nutzer natürlich trotzdem sehr gut - und auf dem PC (und erst recht Mac) habe ich so ein einfaches Programm bislang nicht gefunden. Ach so, das Programm hieß "Musiker" und konnte die erstellten Songs als MOD-Datei abspeichern.
Außerdem gab es noch "Algomusic", welches im Hintergrund lief und permanent per Algorithmus Musik abspielte. Diese war eher Techno-geprägt, glaube ich. Ist schon zu lange her, aber die Musik gefiel mir vom Stil er nicht, obwohl es teilweise auch sehr melodisch und relativ professionell klang. Abspeichern konnte man die Songs, so glaube ich, aber nicht.
Ein solcher Wettbewerb könnte mir auch gefallen - allerdings nur wegen der erhofften Ergebnisse...
Es gab da mal was


Meine Stärken liegen da eher wo anders ...
Naja wie auch immer, ich werd bei Gelegenheit mal mein ,,MusikMaker,, vorstellen.
Übrigens der MagixMusikMaker 7 hat so eine MusikMachFunktion.
Man gibt an, welche Genre, vielleicht noch die BPM-Zahl und die Länge des Stückes.
Der kramt dann aus seinen Samples welche zusammen, die die Vorgaben erfüllen und mixt sie zusammen.
Hört sich alles an, aber kommt an selbst gemachtes nicht heran.
Weil sich die sachen doch recht monoton und langweilig mit der Zeit anhören.
Aber wenn man schnell ne HintergrundMusik für ein Spiel braucht oder nicht recht eine Idee hat, wie sich was anhören könnte, kann man den Assistenten benutzen.
Naja und später kann man dann die einzelnen Samples ja noch nach genauen Vorstellungen anpassen.

Kinder an die Macht http://scratch.mit.edu/
Gibts denn nun einen Wettbewerb?
Oder doch lieber Just for Fun
Ich hatte schon lang mit einem MusikMachProgramm geliebeugelt.
Es gab in den früheren Versionen von Basic (QW-Basic, BasicA, Q-Basic)
Einen Befehl, der nannte sich
PLAY ("")
http://de.wikipedia.org/wiki/GWBasic
Der konnte Musik abspielen. Sowas gab's in TurboPascal nicht, fand ich schade und traurig. Hatte mich deshalb rangesetzt und das für Pascal als UNIT geschrieben. Hatte mich schon lange gefragt, ob es sowas nicht auch in PureBasic gibt oder ob der Bedarf einfach zu gering ist, weil es WAVE, MOD und MIDI eh schon gibt und das immer besser klingt.
Naja, ich hab's gestern Nacht in Pure umgeschrieben.
Ist noch nicht perfekt.
Aber in der Theorie steckt eine Menge Potential dahinter.
Funktioniert und klingt ähnlich wie die ersten Composer auf den NOKIAs.
Im Prinzip könnte man die NOKIA-Klingeltöne auch überlagern und dadurch Polyphone haben 
Wenn man die Wellen noch etwas verzerrt, bekommt man verschiedene Instrumente, so wie die Yamaha und Atari Chips auf SEGA und Konsorten
Wenn ich zu komme und ihr meinen MusikMacher sehen wollt, setz ich ihn heute abend rein. Wenn nicht, lass ich ihn vergammeln.
Könnt dann auch gern noch mit weiter dran basteln. Da steckt wirklich viel Potential hinter. MIDI-Export, MOD-Export, WAVE-Export
Speicherung im eigenen für Menschen lesbaren Format.
Ausgabe über PC-Speaker, PC-Lautsprecher(WAVE), oder das angeschlossene Keyboard(MIDI)
Weiterverarbeitung in externen Editoren.
OnTheFly-MusicRenderer
Eigentlich ist es ein Interpreter. Das einzige Problem, was mein Programm noch aufweist, dass es nicht irgendwie im Hintergrund laufen kann. Weil ich es doch recht einfach gestaltet habe.
Ich benutze für die Pausen ein Delay
Aber ich bin ja auch nur der, der hier die Ideen liefert, das richtige programmieren überlasse ich anderen.
Vielleicht war meine Mühe auch umsonst und es gibt schon längst eine USER-Lib, die das alles kann und noch viel besser
Auf jeden Fall ist es damit wesentlich einfacher einen ZufallsLied zu komponieren, dass sich noch anhöert. Und es kann bei Bedarf ohne Probleme gespeichert werden. Es muss eigentlich nur ein ZufallsSTRING
erzeugt werden.
http://delphi.icm.edu.pl/ftp/d10free/bleepint.htm
Na?
Neugierig geworden? Bei genügend Anfragen, stell ich das Ding heute abend mal vor. 
Freue mich auf eure Antworten, Xaby

Ich hatte schon lang mit einem MusikMachProgramm geliebeugelt.
Es gab in den früheren Versionen von Basic (QW-Basic, BasicA, Q-Basic)
Einen Befehl, der nannte sich
PLAY ("")

http://de.wikipedia.org/wiki/GWBasic
Der konnte Musik abspielen. Sowas gab's in TurboPascal nicht, fand ich schade und traurig. Hatte mich deshalb rangesetzt und das für Pascal als UNIT geschrieben. Hatte mich schon lange gefragt, ob es sowas nicht auch in PureBasic gibt oder ob der Bedarf einfach zu gering ist, weil es WAVE, MOD und MIDI eh schon gibt und das immer besser klingt.
Naja, ich hab's gestern Nacht in Pure umgeschrieben.

Ist noch nicht perfekt.
Aber in der Theorie steckt eine Menge Potential dahinter.
Funktioniert und klingt ähnlich wie die ersten Composer auf den NOKIAs.


Wenn man die Wellen noch etwas verzerrt, bekommt man verschiedene Instrumente, so wie die Yamaha und Atari Chips auf SEGA und Konsorten

Wenn ich zu komme und ihr meinen MusikMacher sehen wollt, setz ich ihn heute abend rein. Wenn nicht, lass ich ihn vergammeln.

Könnt dann auch gern noch mit weiter dran basteln. Da steckt wirklich viel Potential hinter. MIDI-Export, MOD-Export, WAVE-Export
Speicherung im eigenen für Menschen lesbaren Format.
Ausgabe über PC-Speaker, PC-Lautsprecher(WAVE), oder das angeschlossene Keyboard(MIDI)
Weiterverarbeitung in externen Editoren.
OnTheFly-MusicRenderer

Eigentlich ist es ein Interpreter. Das einzige Problem, was mein Programm noch aufweist, dass es nicht irgendwie im Hintergrund laufen kann. Weil ich es doch recht einfach gestaltet habe.
Ich benutze für die Pausen ein Delay

Aber ich bin ja auch nur der, der hier die Ideen liefert, das richtige programmieren überlasse ich anderen.

Vielleicht war meine Mühe auch umsonst und es gibt schon längst eine USER-Lib, die das alles kann und noch viel besser

Auf jeden Fall ist es damit wesentlich einfacher einen ZufallsLied zu komponieren, dass sich noch anhöert. Und es kann bei Bedarf ohne Probleme gespeichert werden. Es muss eigentlich nur ein ZufallsSTRING
erzeugt werden.
http://delphi.icm.edu.pl/ftp/d10free/bleepint.htm
Na?


Freue mich auf eure Antworten, Xaby
Kinder an die Macht http://scratch.mit.edu/