GunLoop

GunLoop (work in progress) ist ein Programm zum „Musik“ machen. GunLoop sammelt Samples über ein Mikrofon und spielt sie in zufälliger Reihenfolge wieder ab. Mit der tarsosDSP-Library werden den Samples Effekte hinzugefügt oder die Geschwindigkeit verändert. Ein Oszi zeigt den produzierten Sound und den Mikrofoninput grafisch an. Das Mikrofon darf nicht Rückkoppeln und nicht die Soundausgabe neu aufnehmen, sonst kommt es zum Overkill. Es muss also entweder ein geeignetes Mirkofon verwendet werden (z.B. Gesangsmikrofon) oder die Funktion „Echolöschung“ im Soundtreiber aktiviert werden. Letztere Option bieten die meisten Soundkarten an und ist z.B. auch für die Nutzung von Skype essentiell.

Alle Samples werden im Arbeitsspeicher gehalten, damit keine Latenzen durch Festplatten Schreib- und Lesezugriffe auftreten. Nach 99 Samples wird das älteste Sample gelöscht. Da liegt der Speicherplatzbedarf bei ca. 500MB (das hängt von der Länge der einzelnen Samples ab). Bei der Verwendung von tarsosDSP muss man darauf achten keine Memory-Leaks zu erzeugen, denn wenn Ressourcen nicht korrekt geschlossen werden verbleiben große Datenmengen im Speicher und nach wenigen Minuten kommt es zum OutOfMemory-Ausnahmefehler und das Programm stürzt ab.

Ein Loop ist in 16 Schritte aufgeteilt. Aufgenommene Samples werden in jedem Durchlauf beim selben Schritt gestartet und mit zufälliger Lautstärke und Effekten abgespielt. Wenn über 30 Sekunden kein neues Sample aufgenommen wurde, wird die Anzahl der abgespielten Samples langsam gesenkt, bis es endlich wieder ruhig wird. Das Programm kann im Vollbild-Modus und oder als Fenster gestartet werden. Mit Klick auf GunLoop->Window bzw. GunLoop->Fullscreen wird die Einstellung gespeichert. Mit GunLoop->Save können die erzeugten Samples als Wav-Dateien gespeichert werden – mit File->Load können alte Samples geladen werden. Die Funktion lädt die Samples an die ursprünglichen Positionen (Steps). Die Option GunLoop->AutoLoader lädt die 99 neusten Samples aus dem zuletzt verwendeten Ordner. Mit dem Menüpunkt GunLoop->Choose input kann die zu benutzende Audioline ausgewählt werden. Das Dialogfenster öffnet sich außerdem automatisch beim ersten Start und speichert die Auswahl ab.

GunLoop in Aktion, in echt hakt´s ein bisschen weniger

Soundbeispiel:

Sourcecode:

public void play(double startTime) {
	if(state == PlayerState.NO_FILE_LOADED || buffer == null){
		throw new IllegalStateException("Can not play when no file is loaded");
	} 
	else {		
		try {
			gainProcessor = null;
			gainProcessor = new GainProcessor(gain);
			if (audioPlayer == null) audioPlayer = new AudioPlayer(format);
			int len = buffer.length;
			dispatcher = null;
			dispatcher = AudioDispatcherFactory.fromByteArray(buffer, format, len, len/2);
			RateTransposer rateTransposer = null;
			rateTransposer = new RateTransposer(tempo);
			dispatcher.addAudioProcessor(rateTransposer);
			dispatcher.setZeroPadFirstBuffer(true);
			dispatcher.setZeroPadLastBuffer(true);
			dispatcher.skip(startTime);
			dispatcher.addAudioProcessor(this);
			dispatcher.addAudioProcessor(beforeWSOLAProcessor);
			flangerEffect = new FlangerEffect(defaultLength/1000.0,defaultImpact/100.0,format.getSampleRate(),defaultFrequency/10.0);
			dispatcher.addAudioProcessor(flangerEffect);
			dispatcher.addAudioProcessor(gainProcessor);
			dispatcher.addAudioProcessor(loopAudioProcessor);
			dispatcher.addAudioProcessor(audioPlayer);
			Thread playThread = new Thread(dispatcher,System.currentTimeMillis()+"_GunLoop");
			playThread.start();
			setState(PlayerState.PLAYING);
		} catch (UnsupportedAudioFileException e) {
			throw new Error(e);
		} catch (LineUnavailableException e) {
			throw new Error(e);
		}
	}
}

Update:

Durch einen Programmierfehler konnte das Fenster nicht öffnen. Das Programm hat nur auf meinem Rechner funktioniert, weil ich eine gunLoop.conf-Datei schon mit einer älteren Version gespeichert hatte. War die Datei nicht vorhanden ist das Programm abgestürzt, bevor sich das Fenster öffnen konnte. Ganz böse!

Download:

Lade eine aktuelle Kopie des Programmes herunter: GunLoop.jar

Applausometer

Irgendwann kommt der Tag, da braucht man ein Aplausometer! Bei Ida Nowhere sollte der Super-Singer-SongWriter-Contest steigen. Eine faire Auswertung der Publikumsregungen wäre ohne Aplausometer nicht möglich gewesen! Leider sind nicht alle Künstler gleich ehrlich und manche jubeln selbst ordentlich mit um mehr Punkte abzusahnen.

Applaus Applaus!

Setup:

  • Computer
  • Bildschirm
  • Mikrofon an der Decke
  • Tastatur

Tastenkürzel:

  • Leertaste: Pause an/aus
  • C calibration starten
  • N neue Messung
  • S Messung speichern (Name wird abgefragt und mit dem Applauswert in der Datei scores.txt gespeichert)

Download:

Source:

Die „Magie“ geschieht quasi zur Laufzeit:

public void run()
	{

		byte[]	abBuffer = new byte[m_nExternalBufferSize];
		
		int	nBufferSize = abBuffer.length;		
		
		m_bRecording = true;
		while (m_bRecording)
		{
			while (pause) {
				m_targetLine.read(abBuffer, 0, nBufferSize);
				panel.updateAplause(false);
			}
			
			 m_targetLine.read(abBuffer, 0, nBufferSize);
			
			 if (calib < 99) {
				 for (int j = 0; j < abBuffer.length-1; j+=2) {
						
						pegel = (pegel*(1-gewichtung))+(Math.abs((abBuffer[j+1]<<8)+abBuffer[j]) * gewichtung);
												
						grundrauschen += pegel;
						
					}
				 calib++;
				 grundrauschen = grundrauschen / ((abBuffer.length) / 3.0);				 
			 }
			 else for (int j = 0; j < abBuffer.length-1; j+=2) {
											
						pegel = (pegel*(1-gewichtung))+(Math.abs((abBuffer[j+1]<<8)+abBuffer[j]) * gewichtung);
						
						aplause += Math.max(( (pegel - grundrauschen) / (grundrauschen) ), 0);
						
						if (j%10 == 0) {
							panel.updateAplause(aplause);
						}
												
					}
		}
	}

GunDown

Hier das vielleicht weltbeste Computerprogramm: GunDown !

GunDown fährt Deinen Computer down. Also herunter, schaltet ihn ab. Dazu gibt man eine Uhrzeit an und klickt auf den Button „shutdown“. Kurz vor Ende des Countdowns wird nochmals eine Warnung ausgegeben und kurz später der Rechner rigoros heruntergefahren:

private void shutUp() {
		
	String[] command = new String[4];
	command[0] = "shutdown";
	command[1] = "-s";
	command[2] = "-t";
	command[3] = "30";
	ProcessBuilder pb = new ProcessBuilder();
	pb.command(command);
	try {
		pb.start();
	} catch (IOException e1) {
		e1.printStackTrace();
	}
	System.exit(0);
}
Shutdown time: 5 vor 12

Beim Fenster Minimieren geht GunDown in den SystemTray und wird als kleine Sanduhr angezeigt. Ein Klick auf´s Kreuz dagegen bricht den Countdown ab.

Download:

Lade GunDown auf Deinen Rechner.