Wie programiere ich ein (AU/VST) PlugIn

W

Wullschi

Hallo
Ich möchte einmal versuchen einen kleinen Synthesizer zu programmieren, der schlussendlich als AU oder VST PlugIn vorliegen soll.
Bisher habe ich aber nur Programiererfahrung mit RealBasic gemacht.

Da RealBasic wohl nicht reicht um ein AU/VST PlugIn zu programieren, möchte ich euch fragen welche programmiersprache ich dazu benötige. Ich wäre froh um eine OOP-Umgebung.
Habt ihr vielleicht auch noch einen Buchvorschlag?

mfg Wullschi
 
Wenn Du für Mac OS nativ programmieren möchtest, dann kommst Du um Cocoa nicht herum ( was wohl auch gar nicht schlimm ist, aber ich lern es selber noch...) und somit auch nicht um Objective-C, das deutlich objektorientierter ist als C++!
Als Tool brauchst DU eigentlich nur Xcode von der Panther DVD installieren, erste Doku ( auch zu Objective-C) ist dort dabei!

Einfache erste Beispiele findest Du hier im Downloadbereich:

http://www.osxentwicklerforum.de/

auch das dortige Wiki zur Programmierung des Mac ist lesenswert!
 
Zuletzt bearbeitet:
wegus schrieb:
und somit auch nicht um Objective-C, das deutlich objektorientierter ist als C++!

Wieso ist Objective-C deutlich objektorientierter als C++?
 
Ich empfinde das so, weil jedes Objekt letztenendes ein Pointer ist. Somit kann ich eine Liste bunt gemischter Objekte einfach erstellen. Ich habe Typfreiheit, wenn ich es will, und kann so erst zur Laufzeit wirklich sagen von welchem Typ mein Objekt ist oder ich lege mich im Quelltext schon fest. Durch Interfaces kann ich Anforderungen an ein Objekt stellen. Dadurch ist es möglich, daß ich ein anderes, besser geeignetes Objekt bekomme als das was ich erwarte, es aber eben alle Anforderungen aus dem Interface erfüllt. Richtig interessant wird es dann mit Cocoa, wo ich dann per Setter- und Getter nicht nur eigene Instanzvariablen setzen kann, sondern Informationen anderer Objekte abonnieren oder eben auch publizieren kann.
Aber was Cocoa betrifft, bin ich blody beginner, also korrigier mich wenn ich Falsches erzähle!
 
Zuletzt bearbeitet:
Hallo,

für Audio und Midi Plugins gibt es auch die Entwicklerumgebung MAX/MSP, die evtl. einen leichteren Einstieg bietet, da es dort schon vorkonfigurierte Module gibt.
http://www.cycling74.com/ Ist teuer, gibt aber ne voll funktionierende 30-Tage Trial.

Nur so als Tipp, bin als Programmierer nie über Actionscript hinausgekommen…:)

Grüsse, p-cord.
 
"Ich empfinde das so, weil jedes Objekt letztenendes ein Pointer ist."

Ist bei C++ auch der Fall.

"Somit kann ich eine Liste bunt gemischter Objekte einfach erstellen. Ich habe Typfreiheit, wenn ich es will, und kann so erst zur Laufzeit wirklich sagen von welchem Typ mein Objekt ist oder ich lege mich im Quelltext schon fest"

Das ist bei C++ ebenfalls möglich. Es entspricht imho nur nicht so dessen Stil. Man könnte sagen Objective-C ist eher was für Männer :D

"Durch Interfaces kann ich Anforderungen an ein Objekt stellen."

Auch C++


"Dadurch ist es möglich, daß ich ein anderes, besser geeignetes Objekt bekomme als das was ich erwarte, es aber eben alle Anforderungen aus dem Interface erfüllt"

Versteh ich nicht.

Was Cocoa betrifft bin ich auch nicht gerade Profi. Allerdings muss ich sagen, dass mir Objective-C um einiges besser gefällt als C++.
Es ist imho besser lesbar und die typenfreie Handhabung ist einfacher gestaltet....
 
@Metacoder:
Ich wusel mich da gerade erst hinein! Was machst Du denn in objective-C ohne Cocoa? Reine Terminal-Programme?
 
wegus schrieb:
@Metacoder:
Ich wusel mich da gerade erst hinein! Was machst Du denn in objective-C ohne Cocoa? Reine Terminal-Programme?

Bin auch am Hineinwuseln. Hab allerdings bis jetzt noch nicht besonders viele Cocoa-Klassen benutzt (einfache NSButtons und NSTextFields).
Was Programmierung angeht komm ich aus der Windoof-Welt und nutze hauptsächlich Delphi(alles extrem Typisiert).
Bin deshalb recht angetan von Objective-C und auch von meinen bisherigen Cocoa-Erfahrungen.
Es scheint als wäre die Umsetzung des Frameworks wie die der Oberfläche: Einfach, ohne Ecken und Kanten.
Auch an XCode hab ich mich schnell gewöhnt. Vor allem der Debugger gefällt mir sehr.
Ausser der Apple-Doku nutze ich "Cocoa Programming for MacOSX"

Nun Dein Seelenstripp ;)
 
Ich denke nicht das man sagen kann C++ ist nicht SO Objektorientiert wie Obj. C. Jede Sprache hat was was ich an der anderen misse.
Bei Obj. C kannst du keine Operatoren überladen was auf dauer mehr geschreibsel ist und (für mich) nicht so übersichtlich. Das kann aber Vorteile haben wenn es nicht geht, man kann nix falsch macht.
Das ist mein persönliches Minus bei Obj. C. Manche kreiden noch das fehlen des const Schlüsselwortes an (ich meine nicht bei Variablen, sondern Argumenten, bzw. Methoden).

Mein persönliches riesen Plus ist die sog. runtime introspection. dh. du kannst zur Laufzeit von einem Objekt erfragen auf welche Methoden es reagiert, welche variablen es hat und jetzt der Hammer: du kannst zur Laufzeit deine Klassen selber bauen, z.B. Methoden hinzufügen/entfernen ( schreit nach Skripting selbst gemacht ).

Ich programmiere schon eine ganze weile mit Obj. C und einigen Frameworks hauptsächlich natürlich Cocoa, und ich kann nur sagen, ich mag es. Es ist einfach und gut dokumentiert. Besonders mag ich das visuelle Desinen mit IB, spart sehr viel Zeit.

Wenn du speziellere Fragen hast kann ich Dir auch das
http://www.osxentwicklerforum.de/ empfehlen.

Gruß Sascha
 
Zuletzt bearbeitet:
@Metacoder:
geht ganz schnell! Streiche Delphi, setze C++ Builder. Habe vor Urzeiten mal auf nem Amiga 2000 mit C angefangen und dann laaange nix mehr mit C gemacht!

@Moogul:
Da hast Du schon recht! Das Forum ist klasse! Da kriegt man sofort geholfen! Leider sind die mit dem Cocoa-Wiki noch nicht so weit, daß man dort einen Schnelleinstieg hätte. Für die höheren Weihen (KVO,...) ist aber schon alles gut Zusammengefaßt. Aber nützliche und geduldige Hilfe gibt es immer!
 
wegus schrieb:
@Metacoder:
geht ganz schnell! Streiche Delphi, setze C++ Builder.
Oh, dann bist Du ja auch VCL-geschädigter. Armes Schwein ;)

Das blöde daran ist ja, dass man nichmal behaupten kann man hätte WinProgrammiererfahrung....vielleicht ist es aber auch besser so. Immerhin ist die WinAPI ja noch schlimmer. :rolleyes:
 
Oh, dann bist Du ja auch VCL-geschädigter. Armes Schwein

Jepp !

Das blöde daran ist ja, dass man nichmal behaupten kann man hätte WinProgrammiererfahrung

Doch (zumindest ein bißchen), nur habe ich mit Borland C++ immer die OWL gelernt und nicht die MFC! nachdem die OWL quais eingestampft war hatte ich keine Lust den MFC-Kram zu lernen. Daher der Builder. Aber jetzt freu ich mich auf Cocoa, nur fehlt mir neben der Zeit ein guter Einstieg zu dem Thema.
 
wegus schrieb:
Ich empfinde das so, weil jedes Objekt letztenendes ein Pointer ist. Somit kann ich eine Liste bunt gemischter Objekte einfach erstellen. Ich habe Typfreiheit, wenn ich es will, und kann so erst zur Laufzeit wirklich sagen von welchem Typ mein Objekt ist oder ich lege mich im Quelltext schon fest.

das kannst du in jeder objektorientierten sprache machen, du benutzt einfach als typ die generische oberklasse object (oder wie immer die dann in der sprache heisst).
abgesehen davon ist das eher unproduktiv, weil du, zusätzlich zu den ganzen objekt checks vor dem benutzen des objektes, dann jede menge zeit verlierst wenn irgendwas nicht klappt und du während der laufzeit den fehler suchen darfst. ich würde das nur machen, wenn es wirklich nicht anders geht...
 
Wullschi schrieb:
Hallo
Ich möchte einmal versuchen einen kleinen Synthesizer zu programmieren, der schlussendlich als AU oder VST PlugIn vorliegen soll.

es gibt für AU plugs beispiel code von apple.
allerdings soll der lustigerweise die AU validierung von logic nicht passieren ;)
 
wegus schrieb:
Aber jetzt freu ich mich auf Cocoa, nur fehlt mir neben der Zeit ein guter Einstieg zu dem Thema.

Geht mir auch so. Der letzte Samstag war ganz im Zeichen des XCode.
Allerdings hab ich unter der Woche eher selten die Muse rumzubasteln (nach 8 Stunden Delphi 5).
Naja, hoffe das bei meiner Cocoalernerei mal was produktives rauskommt.
 
@oneOeight:

Meines Wissens gibt es keine abstrakten Typ id oder Verwandtes unter C++. Auch kein late-binding. Letztenendes kann man in nahezu jeder bodenständigen Hochsprache fast alles machen. Mit manchen Sprachen eleganter als mit anderen. Mich als Gelegenheits-C++er hat gewundert wie sehr sich Objective-C doch von C++ unterscheidet. Das hatte ich anfangs unterschätzt!
 
wegus schrieb:
@oneOeight:
Meines Wissens gibt es keine abstrakten Typ id oder Verwandtes unter C++.

TObject im Builder. Oder irre ich mich?
Damit sollte man diese Funktionalität nachbilden können.
 
@MetaCoder:

Ich sag ja, mit Hochsprachen die nicht auf JIT-Compiler gründen ist nahezu alles darstellbar. Ob TObject ein pendant zu id darstellt kann ich, da Gelegenheits C++er, gar nicht beurteilen. Jedenfalls brauchte ich TObject nie, während man bei Objective-C ja um id kaum herumkommt. Sprich, es hat für meine Begriffe einen ganz anderen Ansatz. Das man den nachbilden kann mag ich glauben.Da sind aber sicher andere kompetenter um das zu beurteilen!
 
Noch ein Tipp am Rande bzgl. Au / Vst - Programmierung. Bei solchen Programmen ist das reine Coden nebensache. Primär geht es, sofern du wirklich nutzbare Plugins herstellen willst, um den eigentlichen Audioalgorithmus. Damit der anständig klingt, ist wirklich viel Arbeit notwendig, und auch sehr viel wissen, wie man digitale Signale verarbeitet.
MAX/Msp ist da schon ein guter Start, den viele Hersteller von Audiohardware auch verwenden, um ihre Ideen und Algorithmen vorab zu testen, bevor sie mit der eigentlichen Implementierung anfangen. Alternativ, zwar etwas "gröber", aber immernoch brauchbar, ist auch Reaktor von NI.

Meine Erfahrungen sind da, das das VST-PluginEnvironment etwas einfacher zu benutzen ist, speziell, wenn du dich auf das Framework stützt; das AU-Framework aber besser gestaltet, mächtiger und durchdachter ist.
Primär solltest du dir aber wirklich gedanken um den Algorithmus machen, Filter und Oszillatoren programmiert man nicht mal "nebenbei".


grüße,

barbour
 
Zurück
Oben Unten