[QUIZ#12] Perkussionist

OnlyFoo

Erfahrenes Mitglied
Mal ganz grob einige Java-Codefragmente. Man sollte aber wohl
Arrays statt Listen nehmen. Auf jedenfall keine LinkedList ;)

Wave-Form lesen
Java:
List<Short> wave = new ArrayList<Short>()

// Ab Byte 44 bis zum Ende der Datei 16bit Wörter lesen
DataInputStream input = new DataInputStream( new FileInputStream( "input.wav" ) );
input.seek( 44 );
while( !input.eof() )
    wave.add( input.readShort() );

Zwei Waves (Wellen) mischen (addieren)
Java:
void mix( List<Short> output, List<Short> sample, int offset ) {
    
    if( output.getSize() < offset + sample.getSize() )
        // hier output mit nullen auffüllen
    
    for( int i = 0; i < sample.getSize(); i++ )
        output.set( i + offset, output.get(i + offset) + sample.get(i) );
    }
}
 

enne

Mitglied
Vielen Dank.
Aber jetzt hab ich noch eine Frage:
Man sollte aber wohl Arrays statt Listen nehmen.
Ich weiß doch z.B. vor dem Einlesen der WAV gar nicht wie groß das Array sein muss... Oder soll ich die Liste erst nach dem Einlesen in ein Array umwandeln und dann damit weiter arbeiten?
 

enne

Mitglied
ah ok. Danke.
Kannst du mir noch erklären was die Zahlen bedeuten? :)
also 44 nehm ich mal an ist das Offset.
Aber warum halbiere ich das ganze? Hat das was mit Short und Byte zu tun?
Java:
int arraySize = (fileFile.length() - 44) / 2;
 
Hallo liebe Coding-Quizzer,

vielen Dank für euer Feedback! Es ist mir sehr wichtig zu erfahren, wie die Aufgaben bei euch ankommen. Auf einige ausgewählte Kommentare möchte ich an dieser Stelle noch reagieren:

Ein paar Hinweise wie man die wav Samples kombinieren kann hätte vielleicht mehr Leute zur Abgabe einer Lösung motiviert.

Im Prinzip konnte man sich das aus den WIKI Artikeln herleiten jedoch blieb da halt das schnelle Erfolgserlebnis aus und dann vergeht einem schon mal die Lust am Ganzen...

Hätte mich damit auch vorher melden können...

Für das nächste mal sollte man vielleicht ein paar mehr Hilfen (Spoiler) einstreuen. Bei den vorhergehenden Contests waren die Hilfestellungen meistens sehr brauchbar.
Die Sache ist halt immer die: es ist relativ zeitaufwändig, alle nötigen Informationen einzusammeln, zu sortieren und in eine übersichtliche Form zu bringen. Das ist Zeit, die ich momentan einfach nicht aufbringen kann :(

Ein Ziel des Coding Quiz sollte es ja auch sein neben interessanten Fragestellungen auch mal über den Tellerrand zu schauen und unterschiedliche Technologien / Programmiersprachen auszuprobieren.

Damit das gut klappt müsste man die Einstiegshürden etwas niedriger anlegen. Damit hier die Cracks nicht abgeschreckt werden sollte natürlich noch irgendwo etwas kniffeliges eingebaut werden so das die auch ihren Spaß haben - nur eben nicht in der Basisversion der Aufgabe.
Diesen Spagat zu schaffen, ist nicht so einfach. Ich gebe mir aber immer die größte Mühe, die Aufgaben sowohl für nicht so erfahrene Benutzer als auch für die Cracks interessant und machbar zu gestalten. Diesmal ist mir das anscheinend leider nicht gelungen, da die "Grundaufgabe" schon zu anspruchsvoll war.

Btw. vielleicht sollten wir auch mal sowas wie Lernprogramme machen:
Sprich als Aufgabe eine kleine Lernsoftware für einen bestimmten Bereich programmieren... Mathematik , Physik, Chemie?
Muss nichts großes sein vielleicht auch einfach mal ein kleines Mashup :)

Mit Lernprogrammen hätten nicht nur die Leute was davon, die die Software bauen (Wir), sondern auch die, die sie dann benutzen (Lehrer / Schüler) :)
Danke für den Vorschlag, ich werde es mal im Hinterkopf behalten.

Thomas hat Recht, das Niveu war hier um einiges höher, was durchaus dazu geführt haben könnte, dass einige abgeschreckt waren.
Da habe ich mich wohl ziemlich im Schwierigkeitsgrad verschätzt. Die Darstellung und Verarbeitung von Audiodaten sind wohl den meisten doch nicht geläufig bzw. schwerer zu verstehen als ich dachte.

Auf Grund dieser Rückmeldungen habe ich mich dazu entschlossen, das Regelwerk ab der nächsten Runde etwas zu modifizieren. Der Passus "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." wird gestrichen. Stattdessen soll es explizit erlaubt und erwünscht sein, dass Ideen direkt im Aufgabenthema ausgetauscht werden. Dies schließt insbesondere auch weiterführende/detailliertere Erklärungen zur Aufgabenstellung mit ein. Ich würde mir davon zweierlei versprechen:
  1. Es soll nicht mehr so leicht vorkommen, dass jemand wegen einiger kleiner Stolpersteine überhaupt nicht an der Quizrunde teilnehmen kann. Wenn ein Benutzer bei der Bearbeitung der Aufgabe auf ein Problem stößt (sei es ein Verständnisproblem oder ein Problem mit der Programmiersprache o.ä.), sollte er sich diesbezüglich über einen öffentlichen Beitrag im Aufgabenthema an alle anderen Quizteilnehmer wenden können.
  2. Ich werde bei der Aufgabenstellung ein bisschen entlastet, indem ich nicht jedes Detail erklären muss. Das könnten dann andere Benutzer übernehmen, indem sie die Aufgabenstellung um zusätzliche Erläuterungen ergänzen (über Beiträge im Aufgabenthema). Das muss nicht unbedingt in Form einer seitenlangen Abhandlung geschehen, oft helfen auch ein paar informative Links schon weiter.

Bei Beiträgen, die allzu viel verraten, möchte ich euch aber darum bitten, den spoiler-Tag zu verwenden. Es sollte jeder selbst entscheiden können, wie viele Tipps er benötigt. Vollständige Lösungen vorab zu posten sollte auch nachwievor Tabu sein.

Wenn jemand irgendwelche Einwände gegen diese Neuregelung hat, sollte er sie bis zur nächsten Quizrunde (vermutlich morgen Abend, aber ich kann nichts versprechen) vorbringen oder für immer schweigen ;)

Grüße,
Matthias

P.S.: Unabhängig davon freue ich mich natürlich jederzeit über Zusendungen mit (Ideen für) Aufgaben :)
 
Zuletzt bearbeitet:
Hallo zusammen,

ich habe momentan keine Zeit, mich um das Coding Quiz zu kümmern. Es wird deshalb eine Winterpause geben, die vermutlich frühestens März 2010 endet.

Grüße,
Matthias

P.S.: Ihr könnt ja zwischenzeitlich eure Abgaben zu dieser Runde noch erweitern oder vervollständigen :)
 
Zuletzt bearbeitet:

OnlyFoo

Erfahrenes Mitglied
Könntest du nicht einfach deine idee für 'ne Aufgabe wem anderes mitteilen, und der kümmert sich darum? Ich meine das Coding Quiz hängt doch nicht von dir allein ab oder? :) Ich würd gern auch sonst die Aufgabe ausfomulieren + so... könnt mir sonst auch noch eine ausdenken, vielleicht.