zu unseren Tutorials
Thema nicht erledigt
Seite 1 von 3 1 2 3 Letzte
  1. #1
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.470
    Blog-Einträge
    5
    Quiz #12
    Der Perkussionist

    Regeln
    Die Regeln und der Ablauf der Quizrunde können in der entsprechenden Ankündigung eingesehen werden. Bitte lest sie euch aufmerksam durch, da sie alle wichtigen Informationen enthält. Lösungsansätze können und dürfen auch schon vorab untereinander ausgetauscht und diskutiert werden, allerdings nicht öffentlich im Forum. Verwendet stattdessen bitte private Nachrichten oder schaut im Chat vorbei.

    Abgabe
    Die Abgabe erfolgt wie immer im Abgabeforum. Abgabefrist ist Samstag, der 14. November 2009 um ca. 23 Uhr.

    Die Aufgabe
    Eure Aufgabe besteht diesmal darin, einen simplen digitalen Drumcomputer zu programmieren. Aus einigen Audiosamples von Instrumenten und einem vorgegebenen Ablauf soll eine Audiodatei erstellt werden.

    Eingabeformat
    Die Eingabe erfolgt durch eine Textdatei, die wie folgt aufgebaut ist:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    [i]<Beats pro Minute>
    <Ticks pro Beat>
    <Pfad zum Audiosample von Instrument 1>
    <Pfad zum Audiosample von Instrument 2>
    ...
    <Pfad zum Audiosample von Instrument n>
     
    <Ablauf Instrument 1>
    <Ablauf Instrument 2>
    ...
    <Ablauf Instrument n>[/i]
    Über die Parameter <Beats pro Minute> und <Ticks pro Beat> soll die Abspielgeschwindigkeit steuerbar sein. Ein Tick stellt die kleinste Zeiteinheit dar (wenn man einen Beat z.B. als Viertelnote interpretiert und <Ticks pro Beat> auf 4 gesetzt ist, entspricht ein Tick also einer Sechzehntel-Note).

    Jede Ablauf-Zeile besteht aus einer Sequenz von Leerzeichen oder Nicht-Leerzeichen. Das i-te Zeichen gibt an, ob das jeweilige Instrument im i-ten Tick gespielt werden soll (Nicht-Leerzeichen) oder nicht (Leerzeichen). Beispiel:
    Code :
    1
    
      X X   XX
    Das Instrument hat erst zwei Ticks Pause, dann wird es gespielt. Vor dem nächsten Einsatz pausiert das Instrument einen Tick. Nach weiteren drei Ticks Pause wird es in den zwei darauf folgenden Ticks gespielt.

    Die Audiosamples liegen im WAVE-Format vor. Die Daten sind stets PCM-codiert, bei einer Auflösung von 16 Bit pro Sample, einer Abtastrate von 44.100 Hz und einem Kanal (mono). Ihr könnt davon ausgehen, dass die Abtastwerte ab dem Offset 44 bis zum Ende der Datei vorliegen (als Folge von 16-Bit signed Integers in Little Endian). Ihr müsst den RIFF-Header also nicht auswerten.

    Ausgabeformat
    Als Ausgabe soll wiederum eine WAVE-PCM-Datei erzeugt werden, mit demselben Format wie die Audiosamples (16 Bit, 44.100 Hz, Mono). Die Samples der einzelnen Instrumente sollen darin entsprechend ihrer Ablauf-Zeile erklingen. Als Header für die Datei könnt ihr folgenden String verwenden:
    Code :
    1
    
    "\x52\x49\x46\x46$size\x57\x41\x56\x45\x66\x6d\x74\x20\x10\x00\x00\x00\x01\x00\x01\x00\x44\xac\x00\x00\x88\x58\x01\x00\x02\x00\x10\x00\x64\x61\x74\x61"
    Unmittelbar darauf muss die Größe der Audiodaten in Bytes folgen, kodiert als 32-Bit unsigned Integer in Little Endian. Im Anschluss schreibt ihr einfach die Abtastwerte in die Datei (wieder als Folge von 16-Bit signed Integers in Little Endian). Der Platzhalter $size muss außerdem durch einen 32-Bit unsigned Integer in Little Endian ersetzt werden, der die Dateigröße - 8 angibt.

    Stufe 1
    In der einfachsten Stufe reicht es, wenn ihr genau ein Instrument unterstützt. Ihr müsst also im wesentlichen nur das Audiosample einlesen und die Abtastwerte in der Ausgabe passend platzieren.

    Stufe 2
    Die zweite Stufe erfordet, dass beliebig viele Instrumente verwendet werden können. Außerdem soll die Stärke jedes Anschlags (also die Lautstärke) festgelegt werden können. Dies geschieht durch die Zeichen 1 (10%), 2 (20%), ..., 9 (90%) und X (100%).

    Erweiterungen
    Ideen für mögliche Erweiterungen:
    • Stereo-Ausgabe mit der Möglichkeit, jedes Instrument zu platzieren (z.B. -100 für ganz links, 0 für mittig, 100 für ganz rechts)
    • Zufällige Variationen in Anschlagstärke und Rhythmus (um einen menschlichen Spieler nachzuahmen)
    • Ausbau zu einem Pattern-Sequenzer
    • GUI zur leichteren Eingabe
    • Direkte Ausgabe des Ergebnisses über die Soundkarte

    Beispiele
    Die Ausgaben wurden nachträglich von einer externen Software in das speicherschonendere OGG-Format konvertiert. Die verwendeten Audiosamples wurden schamlos von Hydrogen übernommen, befinden sich aber auch im Anhang. Weitere Drumkits für eigene Experimente findet ihr auf Sourceforge (in *.tar.gz umbenennen und extrahieren). Ich habe allerdings nicht überprüft, ob diese alle im richtigen Format vorliegen.

    Stufe 1:
    Code :
    1
    2
    3
    4
    5
    
    80
    4
    stick_Woody.wav
     
    X X XXX XXXX XX
    Ausgabe: simple.ogg.zip

    Code :
    1
    2
    3
    4
    5
    
    80
    4
    sn_Wet_b.wav
     
    X  XX  X X XX
    Ausgabe: simple2.ogg.zip

    Stufe 2:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    90
    8
    cra_Rock_a.wav
    tom_Rock_mid.wav
    hhc_Dry_a.wav
    sn_Wet_b.wav
    kick_Dry_b.wav
     
    X                               X                               
                                                              X X   
    X X X X X X X X X X X X X X X X X X X X X X X X X X X X         
            X               X               X             XXX       
    X             X X               X           X X
    Ausgabe: advanced.ogg.zip

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    90
    8
    cra_Rock_a.wav
    tom_Rock_mid.wav
    hhc_Dry_a.wav
    sn_Wet_b.wav
    kick_Dry_b.wav
     
    X                               X                               
                                                              3 3   
    X 5 5 5 X 5 5 5 X 5 5 5 X 5 5 5 X 5 5 5 X 5 5 5 X 5 5 5         
            X               X               X             36X       
    X             X X               X           X X
    Ausgabe: dynamic.ogg.zip

    Weitere Beispiele (automatisch konvertierte Demofiles von Hydrogen, ohne Anspruch auf absolute Übereinstimmung): demos.zip


    Und jetzt ran an die Tasten und viel Spaß beim Programmieren!
    Angehängte Dateien
    Geändert von Matthias Reitinger (08.11.09 um 16:18 Uhr) Grund: Abgabefrist verlängert
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

  2. #2
    Benutzerbild von zeja
    zeja zeja ist offline Moderator zeja kann auf vieles stolz sein zeja kann auf vieles stolz sein zeja kann auf vieles stolz sein zeja kann auf vieles stolz sein zeja kann auf vieles stolz sein zeja kann auf vieles stolz sein
    tutorials.de Moderator
    Registriert seit
    Sep 2006
    Beiträge
    2.898
    Na ob da ne Woche reicht? Wir haben das mal in Audioprogramming an der Uni gemacht. So ganz einfach wars nicht.

  3. #3
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.470
    Blog-Einträge
    5
    Hallo zeja,

    ich hab eine Quick&Dirty-Lösung an einem Abend zusammengeschustert. Das Ergebnis waren 60 Zeilen Ruby-Code. Sollte also denk ich schon machbar sein. Wenn nicht, hängen wir einfach noch eine Woche dran, ist ja kein Problem.

    Grüße,
    Matthias
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

  4. #4
    OnlyFoo OnlyFoo ist offline Mitglied Brokat OnlyFoo kann auf vieles stolz sein OnlyFoo kann auf vieles stolz sein OnlyFoo kann auf vieles stolz sein OnlyFoo kann auf vieles stolz sein OnlyFoo kann auf vieles stolz sein OnlyFoo kann auf vieles stolz sein
    Registriert seit
    Feb 2005
    Beiträge
    471
    Zitat Zitat von Matthias Reitinger Beitrag anzeigen
    Hallo zeja,

    ich hab eine Quick&Dirty-Lösung an einem Abend zusammengeschustert. Das Ergebnis waren 60 Zeilen Ruby-Code. Sollte also denk ich schon machbar sein. Wenn nicht, hängen wir einfach noch eine Woche dran, ist ja kein Problem.

    Grüße,
    Matthias
    Bin auch gerade mit 60 Zeilen python ausgekommen

  5. #5
    kabel2 kabel2 ist offline Mitglied Gold kabel2 ist ein sehr geschätzer Mensch
    Registriert seit
    Aug 2005
    Beiträge
    138
    Das ist jetzt aber kein Golf-Wettbewerb?

  6. #6
    Benutzerbild von Chumper
    Chumper Chumper ist offline Eichhörnchen Chumper hat eine strahlende Zukunft Chumper hat eine strahlende Zukunft Chumper hat eine strahlende Zukunft Chumper hat eine strahlende Zukunft Chumper hat eine strahlende Zukunft Chumper hat eine strahlende Zukunft Chumper hat eine strahlende Zukunft Chumper hat eine strahlende Zukunft
    Registriert seit
    Mar 2006
    Ort
    Vancouver
    Beiträge
    439
    es juckt mich in den Fingern, das wieder mit Javascript zu machen, womit es eigentlich nicht geht
    mfg Nils

    Problem gelöst?
    Dann bitte das Thema als erledigt anhaken
    und die Antwort bewerten, die weitergeholfen hat.


    Danke!

  7. #7
    OnlyFoo OnlyFoo ist offline Mitglied Brokat OnlyFoo kann auf vieles stolz sein OnlyFoo kann auf vieles stolz sein OnlyFoo kann auf vieles stolz sein OnlyFoo kann auf vieles stolz sein OnlyFoo kann auf vieles stolz sein OnlyFoo kann auf vieles stolz sein
    Registriert seit
    Feb 2005
    Beiträge
    471
    Soo, JavaScript Lösung läuft (im Firefox).
    Geändert von OnlyFoo (03.11.09 um 15:43 Uhr)

  8. #8
    Freak Freak ist offline NULL Freak ist ein Lichtblick Freak ist ein Lichtblick Freak ist ein Lichtblick
    Registriert seit
    May 2005
    Ort
    vorhanden
    Beiträge
    341
    Heut' mal nichts Brainfuck-kompatibles?
    i++;

  9. #9
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.470
    Blog-Einträge
    5
    Zitat Zitat von Freak Beitrag anzeigen
    Heut' mal nichts Brainfuck-kompatibles?
    Wenn man wollte, könnte man die Aufgabe auch mit Brainfuck lösen (man muss nur die Eingabe etwas anders gestalten). Oder was heißt für dich „Brainfuck-kompatibel“?

    Grüße,
    Matthias
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

  10. #10
    Benutzerbild von DosCoder
    DosCoder DosCoder ist offline Mitglied Gold DosCoder ist ein Lichtblick DosCoder ist ein Lichtblick DosCoder ist ein Lichtblick
    Registriert seit
    Sep 2008
    Ort
    Kreis Würzburg(Bayern)
    Beiträge
    226
    Hi,
    kann man mit BrainFuck Dateien speichern? Wenn ja, wäre es überlegenswert, sich wieder damit zu beschäftigen.

    Ciao
    DosCoder
    Geändert von DosCoder (03.11.09 um 18:29 Uhr)
    Man kann mich für das verantwortlich machen, was ich hier schreibe, nicht für das, was andere verstehen.

    Sollte ich mal Mist labern weist mich bitte darauf hin.

    Ich freue mich über ein Danke, wenn ich helfen konnte!

  11. #11
    kabel2 kabel2 ist offline Mitglied Gold kabel2 ist ein sehr geschätzer Mensch
    Registriert seit
    Aug 2005
    Beiträge
    138
    Ich sehe, hier gibts Leute die sich unbedingt selbst geißeln wollen...
    Für die echte Herausforderung lieber eine Sprache, deren Turing-Vollständigkeit noch nicht bewiesen ist ... gibts sowas überhaupt?

  12. #12
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.470
    Blog-Einträge
    5
    Zitat Zitat von kabel2 Beitrag anzeigen
    Für die echte Herausforderung lieber eine Sprache, deren Turing-Vollständigkeit noch nicht bewiesen ist ... gibts sowas überhaupt?
    Meinst du Sprachen, die nicht Turing-vollständig sind, oder solche bei denen man nicht weiß, ob sie es sind oder nicht?
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

  13. #13
    Benutzerbild von DosCoder
    DosCoder DosCoder ist offline Mitglied Gold DosCoder ist ein Lichtblick DosCoder ist ein Lichtblick DosCoder ist ein Lichtblick
    Registriert seit
    Sep 2008
    Ort
    Kreis Würzburg(Bayern)
    Beiträge
    226
    Zitat Zitat von kabel2 Beitrag anzeigen
    Ich sehe, hier gibts Leute die sich unbedingt selbst geißeln wollen...
    Für die echte Herausforderung lieber eine Sprache, deren Turing-Vollständigkeit noch nicht bewiesen ist ... gibts sowas überhaupt?
    Ich weiß ja nicht, was andere Freaks noch so im Keller versteckt halten Ich glaube aber nicht, das ich so lange an einem BrainFuck-Programm(oder änlichem) sitzen würde, wenn ich nicht wüsste, dass es funktionieren kann...

    Ciao
    DosCoder
    Man kann mich für das verantwortlich machen, was ich hier schreibe, nicht für das, was andere verstehen.

    Sollte ich mal Mist labern weist mich bitte darauf hin.

    Ich freue mich über ein Danke, wenn ich helfen konnte!

  14. #14
    kabel2 kabel2 ist offline Mitglied Gold kabel2 ist ein sehr geschätzer Mensch
    Registriert seit
    Aug 2005
    Beiträge
    138
    Zitat Zitat von Matthias Reitinger Beitrag anzeigen
    Meinst du Sprachen, die nicht Turing-vollständig sind, oder solche bei denen man nicht weiß, ob sie es sind oder nicht?
    Kannste Dir aussuchen.

  15. #15
    Freak Freak ist offline NULL Freak ist ein Lichtblick Freak ist ein Lichtblick Freak ist ein Lichtblick
    Registriert seit
    May 2005
    Ort
    vorhanden
    Beiträge
    341
    Naja mit Brainfuck kann ich dank Turing-Vollständigkeit alle mathematischen Probleme lösen.

    Aber das Arbeiten mit Dateien, Sounds und alles was über mit Zahlen gefüllte Zellen hinausgeht, ist da ja nicht umsetzbar.
    i++;

Thema nicht erledigt
Seite 1 von 3 1 2 3 Letzte

Ähnliche Themen

  1. [QUIZ#9] x y z (VB.Net)
    Von Erik im Forum Archiv
    Antworten: 0
    Letzter Beitrag: 20.07.09, 17:16
  2. [quiz#1] Kd3 (php)
    Von KD3 im Forum Archiv
    Antworten: 6
    Letzter Beitrag: 22.09.08, 20:11
  3. Quiz?
    Von MeisterLampion im Forum Office-Anwendungen
    Antworten: 12
    Letzter Beitrag: 03.11.06, 15:48
  4. Quiz: Was bin ich?
    Von MrTwister im Forum Werkstatt
    Antworten: 3
    Letzter Beitrag: 05.04.06, 19:14
  5. php Quiz
    Von Sim im Forum PHP
    Antworten: 0
    Letzter Beitrag: 09.05.04, 12:43

Lesezeichen

Lesezeichen