Sound file schreiben

wakoz

Erfahrenes Mitglied
Hi
Ich verwende derzeit dies hier zum abspielen von sounds
Code:
package sound.model;

import java.util.ArrayList;

import javax.sound.midi.MidiEvent;
import javax.sound.midi.MidiSystem;
import javax.sound.midi.Receiver;
import javax.sound.midi.Sequence;
import javax.sound.midi.Sequencer;
import javax.sound.midi.ShortMessage;
import javax.sound.midi.Synthesizer;
import javax.sound.midi.Track;
import javax.sound.midi.Transmitter;

import main.model.Volume;

public class SoundGenerator {
	private final int PPQS = 16;
	private final int STAKKATO = 4;
	
	private Volume volumeclass;
	
	private long currentTick = 0;
	
	// Sequencer und Synthesizer initialisieren
	private Sequencer sequencer = null;
	private Transmitter transmitter = null;
	private Synthesizer synthesizer = null;
	private Receiver receiver = null;

	private int tone[][] = null;
	private ShortMessage message = null;
	private Sequence sequence = null;
	private Track track = null;

	public void midiSound(ArrayList<Double> doubleList) throws Exception {
		// Partitur {{Tonhoehe, DauerInViertelNoten, AnzahlWdh},...}
		int index = (doubleList.size());
		tone = new int[index][3];
		System.out.println(index);
		for (int i = 0; i < (index); i++) {
			tone[i][0] = (doubleList.get(i).intValue() - 50 );
			tone[i][1] = 1;
			tone[i][2] = 1;
		}
		doubleList = null;
		sequence = new Sequence(Sequence.PPQ, PPQS);
		track = sequence.createTrack();
		// Kanal 0 auf "EnsembleStrings" umschalten
		message = new ShortMessage();
		message.setMessage(ShortMessage.PROGRAM_CHANGE, 0, 48, 0);
		track.add(new MidiEvent(message, currentTick));
		// Partiturdaten hinzufügen
		volumeclass = Volume.getInstance();
		for (int i = 0; i < tone.length; ++i) {
			for (int j = 0; j < tone[i][2]; ++j) { // Anzahl Wdh. je Note
				message = new ShortMessage();
				message.setMessage(ShortMessage.NOTE_ON, 0, tone[i][0], volumeclass.getVolume());
				track.add(new MidiEvent(message, currentTick));
				currentTick += PPQS * tone[i][1] - STAKKATO;
				message = new ShortMessage();
				message.setMessage(ShortMessage.NOTE_OFF, 0, tone[i][0], 0);
				track.add(new MidiEvent(message, currentTick));
				currentTick += STAKKATO;
			}
		}
		// Sequencer und Synthesizer initialisieren
		sequencer = MidiSystem.getSequencer();
		transmitter = sequencer.getTransmitter();
		synthesizer = MidiSystem.getSynthesizer();
		receiver = synthesizer.getReceiver();
		// Beide öffnen und verbinden
		synthesizer.open();
		sequencer.open();
		transmitter.setReceiver(receiver);
		// Sequence abspielen
		sequencer.setSequence(sequence);
		sequencer.setTempoInBPM(145);
		sequencer.start();
		int count = 0;
		while (true) {
			System.out.println(count);
			count++;
			try {
				Thread.sleep(400);
			} catch (Exception e) {
				// nothing
			}
			if (!sequencer.isRunning()) {
				break;
			}
		}
		// Sequencer anhalten und Geräte schließen
		sequencer.stop();
		sequencer.close();
		synthesizer.close();

	}

}
nun möchte ich diesen Midi Sound in eine wav schreiben bin aber derzeit noch bisschen ratlos :confused:
Habe mir diese Seite finden können aber....
http://java.sun.com/docs/books/tutorial/sound/converters.html
komme dennoch nicht weiter, ich muss irgendwie die "sequence" raus geben um sie als wav zu speichern bin aber wie vernagelt und sehe den Wald vor lauter Bäumen nicht :-(
 
Code:
int[] allowedTypes = MidiSystem.getMidiFileTypes(sequence);
		MidiSystem.write(sequence, allowedTypes[0], new File("filename.wav"));

wer die antwort wissen will :-(


warum finde ich immer die Lösung wenn ich die frage poste
 
vor monat oder so habe ich sowas für mein drummprogramming project gesucht .(dann aber adacta project gelegt)... wenn wirklich klappt dann DANKE! :D klingt viel versprechend
 
Zurück