Soundsystem

Fragen zu Programmiersprachen und Software für den Hive und die Propellerchips
Benutzeravatar
laserjones
Beiträge: 291
Registriert: Fr 19. Jun 2009, 10:38
Wohnort: Hennef
Kontaktdaten:

Soundsystem

Beitrag von laserjones »

Da eines meiner wichtigsten Interessengebiete die elektronische Musik ist, interessiert mich besonders das Soundsystem des HIVE und wie man es ggf. erweitern könnte. Gibt es dazu schon eine Doku? Ist das, was bisher existiert, mehr oder weniger von der Hydra abgeschaut, oder geht es bereits darüber hinaus? Der HIVE müsste mit seinem dedizierten "Soundchip" (Administra) ja etwas mehr können als die Hydra mit nur einem Propeller.

Mich würde auch interessieren, wie viele Ressourcen (Cogs, RAM) von Administra noch für Soundzwecke frei sind, wenn man die für die SD-Karte (und ggf. andere Nicht-Sound-Funktionen) benötigten abzieht.
Momentan ist richtig, momentan ist gut – nichts ist wirklich wichtig, nach der Ebbe kommt die Flut. (Herbert Grönemeyer)
Benutzeravatar
Rainer
Beiträge: 510
Registriert: Fr 29. Mai 2009, 16:11

Re: Soundsystem

Beitrag von Rainer »

Cool, wir haben anscheinend aus jedem Gebiet mindestens Einen, der sich auskennt :)
Ich war schon im Bekanntenkreis am suchen, wer sich mit Sound/Musik (als Macher) auskennt. Ich werde wohl einiges brauchen für ein paar Sachen ... und ich kann selber nicht mal Noten lesen :(

Also, lass mal sehen was ich alles gelesen habe. Von allen Sachen habe ich auch den Spin-Code bzw. die PASM-Routinen.

Für den Propeller wurde bis jetzt folgendes gemacht:
-HSS (Hydra-Sound-System)
-RTTL-Files (Ringtones)
-Wav-Player
-Spatializer (Stereobasisverbreiterung)
-Singstimmen (irgendsoein Chor-Demo)
-Sprachausgabe
-20 Kanal MIDI Player (Typ 0), 128 Instrumente und 46 Drum Sounds (mit 2 Cogs, 10 Stimmen mit 1 Cog .. keine Ahnung ob das weiter Skalierbar ist).

HSS hat drohne schon auf den Hive portiert. *.Wav weiß ich nicht genau.

Da ich mich mit der Sounderzeugung nicht wirklich auskenne, kann ich nur mutmaßen was auf dem Hive möglich ist. Die Sachen von oben aber sicher.

Gruß.
Rainer
"Wer andauernd begreift, was er tut, bleibt unter seinem Niveau."
Benutzeravatar
laserjones
Beiträge: 291
Registriert: Fr 19. Jun 2009, 10:38
Wohnort: Hennef
Kontaktdaten:

Re: Soundsystem

Beitrag von laserjones »

Noten lesen kann ich auch kaum (bzw. hab's wieder verlernt, weil es einfach nicht mein Ding ist). Das braucht man aber für Musik auch nicht wirklich, schon gar nicht im MIDI-Zeitalter.

WAV-Dateien spielt der HIVE direkt von der SD-Card, dafür gibt's eine Funktion im IOS (bzw. TRIOS ;-)) laut der Liste von drohne235. Wobei ich nicht weiß, welche WAV-Subformate unterstützt werden.

Der 20-stimmige Synthesizer, den du erwähnt hast, dürfte dieser sein:
http://forums.parallax.com/forums/defau ... 5&m=341430

Das ist für mich bisher das interessanteste Projekt. Wobei der Autor es wohl hauptsächlich zum Abspielen von MIDI-Files gedacht hat, also die Standard-GM-Palette von Instrumenten implementiert. Viel interessanter fände ich es, die Parameter der Klangerzeugung frei zugänglich zu machen, also einen "echten" Synthesizer. Jedenfalls schon mal cool, dass er es geschafft hat, einen FM-Algorithmus fast ohne Multiplikationen hinzubekommen.

Was mir vorschwebt, ist ein System, mit dem man eigene Instrumentenklänge erschaffen und Songs komponieren kann, die dann z. B. auch in Spiele eingebunden werden können, also etwas mehr als ein reiner Player, sondern ein System, das während des Abspielens Befehle von anderen Programmen empfangen kann, z. B. "Schalte jetzt taktgenau um von der fröhlichen auf die bedrohliche Hintergrundmusik". Vier Stimmen sind Minimum, wesentlich besser wären aber acht oder mehr.

Normale Samples scheiden als Grundlage wohl aus, da die 32 KB von Administra gerade mal ein paar Sekunden davon speichern könnten, und ich denke nicht, dass man die in Echtzeit kontinuierlich und mehrkanalig aus dem externen RAM oder von SD nachladen könnte, während noch andere Prozesse unvorhersagbar auf den Speicher zugreifen. ADPCM (komprimierte Samples) kann der HIVE wohl auch schon, aber vermutlich immer noch zu viel Platzbedarf. Klassische subtraktive Synthese mittels digitaler Filter dürfte mangels Hardware-Multiplikation auch kaum möglich sein. Da ist die oben erwähnte FM-Engine schon interessanter. Aber vielleicht fällt mir auch noch ganz was anderes ein.
Momentan ist richtig, momentan ist gut – nichts ist wirklich wichtig, nach der Ebbe kommt die Flut. (Herbert Grönemeyer)
Benutzeravatar
Mandalargon
Beiträge: 28
Registriert: Do 28. Mai 2009, 20:46
Wohnort: Hamburg, Berlin, Leipzig

Re: Soundsystem

Beitrag von Mandalargon »

Ich habe mir auf dem Easterhegg 2009 in HH ein Projekt angesehen.
Dort geht es zwar rein um MIDI, aber es ist sehr interessant. Und vor
allem "Live" eingesetzt kann man ganz gut Musik damit machen.

Eine Quelle dazu

http://hackerspace.be/mididuino-workshop

Ggf. liesse sich das auch mit dem Hive anstellen, denn MIDI In scheint
ja schon zu gehen

http://obex.parallax.com/objects/category/10/

MIDI Out sollte dann auch möglich sein. Meinungen dazu?
Benutzeravatar
laserjones
Beiträge: 291
Registriert: Fr 19. Jun 2009, 10:38
Wohnort: Hennef
Kontaktdaten:

Re: Soundsystem

Beitrag von laserjones »

MIDI In/Out ist ziemlich trivial, da es sich um eine simple serielle Schnittstelle handelt. Einzige Besonderheit: Zwischen Kabel und Gerät kommt ein Optokoppler zur galvanischen Trennung. Schaltungen kann ich bei Bedarf raussuchen (nur ganz wenige Bauteile).

Welchen Sinn sollte aber MIDI Out am HIVE haben? Wäre höchstens interessant, wenn man damit externe Klangerzeuger ansteuern wollte, aber ich glaube, ein MIDI-Sequencer auf dem HIVE wäre nicht allzu sinnvoll ... oder doch? Hm, wäre eine coole Option für ein portables Musiksystem, das noch kompakter als ein Netbook wäre, wenn man einen winzigen TFT einbaut ... Aber das wäre wohl ein Projekt für die fernere Zukunft.
Momentan ist richtig, momentan ist gut – nichts ist wirklich wichtig, nach der Ebbe kommt die Flut. (Herbert Grönemeyer)
Benutzeravatar
drohne235
Administrator
Beiträge: 2284
Registriert: So 24. Mai 2009, 10:35
Wohnort: Lutherstadt Wittenberg
Kontaktdaten:

Re: Soundsystem

Beitrag von drohne235 »

Wie schon ananderer Stelle geschrieben ist das wichtigste wenn die Hives laufen, den Administra zur Laufzeit bootfhig zu gestalten wie es schon bei Bellatrix funktioniert. Damit kann dann die eigentliche Anwendung zur Laufzeit den Code in Administra gegen eigenen austauschen und man hat 100% Kontrolle über das was in diesem Chip abläuft. Ein Prog braucht mehr Cogs? Ok, dann lädt sie solange sie läuft einen Administra-Code welcher z.B. keinen Netzwerkcode enthält und alle Cogs für die Klangerzeugung benutzt. Die Anwendung will in Administra parallel eine LAN-Kommunikationssoftware parallel laufen lasssen? Ok, dann wird ein Code ganz ohne Sound etc. geladen und die 32 KByte hRam in Administra stehen fast vollständig dem Netzwerkcode zur Verfügung. So stelle ich mir das vor und so wäre es am universellsten - im eigenen Programm kann ich dann mit Administra wie mit Bellatrix machen was ich will - und das ohne die Flashs zu verändern, einfach per Software und zur Laufzeit. Ein Reset, Reboot oder sonstwas kann das System dann auch wieder in den Defaultzustand versetzen.

Ansonsten hab ich was Musik betrifft auch keine schöpferischen Erfahrungen - aber das kann sich ja mit der entsprechenden Software auf dem Hive auch ändern.

Momentan ist das Bios in Administra ja noch "starr" entgegen den obigen Wünschen und ich habe experimentell folgendes integriert bzw. experimentierfertig - gleich mit ein paar Links zum einlesen:

HSS - http://www.andrewarsenault.com/hss/index.html

Gegenüber dem originalen HSS habe ich Funktionen integriert um den HSS-Player über die IOS zu überwachen und zu steuern. So kann ein Anwendercode in Regnatix den Player starten, beenden und mit einer HSS-Datei von SD-Card laden sowie überwachen welche Töne + Parameter jeder der vier Kanäle aktuell abspielt. Außerdem können die beiden FX-Kanäle ebenso gesteuert werden.

PUB hss_playfile(stradr) | status 'hss: spielt übergebene hss-datei von sd-card
PUB hss_stop 'hss: stopt aktuellen song
PUB hss_pause 'hss: pausiert aktuellen song
PUB hss_load(stradr): status | len,i 'hss: lädt hss-datei von sd-card in songpuffer
PUB hss_play 'hss: spielt song im puffer ab
PUB hss_vol(vol) 'hss: volume einstellen 0..15
PUB hss_peek(n): wert 'hss: registerwert auslesen
PUB hss_intreg(n): wert 'hss: interfaceregister auslesen
PUB sfx_setslot(adr,slot) | i,n 'sfx: sendet sfx-daten in sfx-slot
PUB sfx_fire(slot,chan) 'sfx: triggert einen bestimmten soundeffekt

Das ganze ist recht gut in den Quellen des StarTrackers und von der Kommandozeilenanwendung "play" zu begutachten. Tonbeispiele gibt es im Trackervideo.

Außerdem gibt es ja zwei FX-Slots die wirklich frei parametrisierbar sind (Hüllkurve, Siganlform, usw.). Diese kann man mit folgenden IOS-Funktionen ansprechen:

PUB sfx_setslot(adr,slot) | i,n 'sfx: sendet sfx-daten in sfx-slot
PUB sfx_fire(slot,chan) 'sfx: triggert einen bestimmten soundeffekt

Einige Systemsounds habe ich schon fest integriert - so auch die Heartbeatsounds: Herztöne die hörbar machen wenn Daten von/zur SD-card transferiert werden (http://hive-project.de/content/336). So erhöht sich die Herzfrequenz bei akutem Datenstrum und "blubbert" ganz langsam im Standby. Ein Klangbeispiel ist im Artikel. Außerdem gibt es das "sxftool" mit welchem man (vorerst) manuell die Soundparameter im eRam bearbeiten kann, zu einem Slot senden und dann als Test triggern kann - ist aber extrem rudimentär.


WAV-Player - http://forums.parallax.com/forums/defau ... 30#m337230

Der Wav-Player hat momentan experimentellen Status und ist nur im Test-Bios "os-1-adm-biosw.spin" integriert. Analog gibt es ein Testprogramm "wplay" für die CLI. Leider gibt es da noch einen komplexen Fehler und der Player stopt nach einigen Titeln wenn man die Funktion "Play alle Wav's auf SD-Card" aufruft -- hab noch keine Zeit gehabt da weiter zu suchen. Mir gefällt dabei auch noch nicht die logische Integration in den Administra-Code, aber prinzipiell funktioniert es.

Experimentelle IOS-Funktionen:

PUB wav_play(stradr): status | len,i 'sdw: spielt wav-datei direkt von sd-card
PUB wav_stop
PUB wav_status: status 'sdw: status des players abfragen

MIDI-Synthesizer - http://forums.parallax.com/forums/defau ... 1&m=341430

Ariba's genialer 24-Stimmen-Synthesizercode. Ich hab mal ein Klangbeispiel angehäng. Ist momentan mangels Ressourcen nicht fest in Administra integriert - was ja auch nicht sein muß, wenn wir Administra erstmal variabel haben - aber bei den Testprogrammen ist eine angepasste Codevariante und einige MIDI-Files dabei um zu testen und um zu experimentieren. Dieser Code spielt einfach alle MIDI-Dateien von SD-Card ab.
Dateianhänge
demo_mp3.zip
MIDI-Synthesizer von Ariba - Sounddemo
(887.08 KiB) 570-mal heruntergeladen
"Ob Sie denken, dass Sie es können, oder ob Sie denken, dass Sie es nicht können - in beiden Fällen haben Sie recht." Henry Ford
Benutzeravatar
laserjones
Beiträge: 291
Registriert: Fr 19. Jun 2009, 10:38
Wohnort: Hennef
Kontaktdaten:

Re: Soundsystem

Beitrag von laserjones »

Wie viele Cogs und wie viel Hub-RAM werden denn standardmäßig durch SD und Netzwerk belegt? Könnte für Spiele ja beides relevant sein, und eine Sound-Engine, wie sie mir vorschwebt, sollte auch für Spiele taugen und daher diesen Funktionen keine Ressourcen wegnehmen.

Gibt es eigentlich ein Programm, mit dem man HSS-Tracks komponieren kann?
Momentan ist richtig, momentan ist gut – nichts ist wirklich wichtig, nach der Ebbe kommt die Flut. (Herbert Grönemeyer)
Benutzeravatar
drohne235
Administrator
Beiträge: 2284
Registriert: So 24. Mai 2009, 10:35
Wohnort: Lutherstadt Wittenberg
Kontaktdaten:

Re: Soundsystem

Beitrag von drohne235 »

Zu den momentan verwendeten Cog's

COG's : 0 Kommandointerpreter
1,2 HSS
3,4,5 FSRW
(6 WAV - experimentel)

Der Netzwerkcode ist noch nicht integriert, momentan gibt es nur den aus PropIRC extrahierten Code (in der Testsoftware zu finden) um den LAN-Chip und seine Anbindung zu testen. Aber da gibt es für die Softwarespezialisten noch enorm viel Raum für Optimierungen, wie wir geich beim Speicher sehen werden... ;)

Speicher:

Programmcode: 1.838 Longs
Variablen: 5.096 Longs
Stack/Free: 1.254 Longs

Da ist also noch ein riesiger Batzen den ich einfach mal so für die Soundpuffer und ähnliches fest "verschleudert" habe. Diese Bereiche könnte man durchaus dynamisch nutzen/aufteilen wenn man sich mühe gibt...
"Ob Sie denken, dass Sie es können, oder ob Sie denken, dass Sie es nicht können - in beiden Fällen haben Sie recht." Henry Ford
Benutzeravatar
laserjones
Beiträge: 291
Registriert: Fr 19. Jun 2009, 10:38
Wohnort: Hennef
Kontaktdaten:

Re: Soundsystem

Beitrag von laserjones »

Was ist denn FSRW? File System Read/Write? Da hätte ich (intuitiv) gedacht, dass das mit nur einem Cog gehen müsste ...

Kommt der Netzwerkcode denn wohl mit dem verbleibenden Cog 7 aus?

Jedenfalls sieht es dann ja wohl so aus, dass für ein universelles Soundsystem max. 3 Cogs verfügbar sind. Dann muss ich mal schauen, was damit machbar ist. HSS ist im Ansatz gut, ich würde aber etwas mehr Stimmen und mehr Wellenformen (am besten frei definierbar) haben wollen. Und am besten irgendetwas Reverb-ähnliches (Hall/Echo), aber das wird mit dem Speicher seeehr eng ...
Momentan ist richtig, momentan ist gut – nichts ist wirklich wichtig, nach der Ebbe kommt die Flut. (Herbert Grönemeyer)
Benutzeravatar
drohne235
Administrator
Beiträge: 2284
Registriert: So 24. Mai 2009, 10:35
Wohnort: Lutherstadt Wittenberg
Kontaktdaten:

Re: Soundsystem

Beitrag von drohne235 »

laserjones hat geschrieben:HSS ist im Ansatz gut, ich würde aber etwas mehr Stimmen und mehr Wellenformen (am besten frei definierbar) haben wollen. Und am besten irgendetwas Reverb-ähnliches (Hall/Echo), aber das wird mit dem Speicher seeehr eng ...
Ich sag ja, am besten wir machen den Administra-Code zur Laufzeit variabel - dann kann jede Anwendung ihren ganz eigenen Administra-Treiber aktivieren, welcher den entsprechenden Anforderungen gerecht wird. Seven of Nine würde sagen: "Sie wird sich anpassen..." ;)
"Ob Sie denken, dass Sie es können, oder ob Sie denken, dass Sie es nicht können - in beiden Fällen haben Sie recht." Henry Ford
Antworten