use of blue.SoundObjectLibrary in project blue by kunstmusik.
the class SoundObjectLibraryUtilsTest method testRemoveLibrarySoundObject.
/**
* Test of removeLibrarySoundObject method, of class SoundObjectLibraryUtils.
*/
@Test
public void testRemoveLibrarySoundObject() {
BlueData data = new BlueData();
Score score = data.getScore();
PolyObject polyObj = new PolyObject(true);
score.add(polyObj);
SoundObjectLibrary library = data.getSoundObjectLibrary();
SoundLayer layer = polyObj.newLayerAt(0);
SoundObject sObj = new GenericScore();
SoundObject sObj2 = new GenericScore();
PolyObject pObjInner = new PolyObject(true);
SoundLayer layerInner = pObjInner.newLayerAt(0);
layerInner.add(new Instance(sObj));
layer.add(new Instance(sObj));
layer.add(new Instance(sObj));
layer.add(new Instance(sObj));
layer.add(sObj2);
layer.add(pObjInner);
library.add(sObj);
assertEquals(5, layer.size());
assertEquals(1, library.size());
assertEquals(1, layerInner.size());
SoundObjectLibraryUtils.removeLibrarySoundObject(data, sObj);
assertEquals(2, layer.size());
assertEquals(0, library.size());
assertEquals(0, layerInner.size());
}
use of blue.SoundObjectLibrary in project blue by kunstmusik.
the class ReplaceWithBufferSoundObjectAction method actionPerformed.
@Override
public void actionPerformed(ActionEvent e) {
ScoreController.ScoreObjectBuffer buffer = ScoreController.getInstance().getScoreObjectBuffer();
List<Layer> layers = scorePath.getAllLayers();
BlueData data = BlueProjectManager.getInstance().getCurrentBlueData();
SoundObjectLibrary sObjLib = data.getSoundObjectLibrary();
List<Instance> instances = new ArrayList<>();
ReplaceScoreObjectEdit top = null;
for (SoundObject sObj : soundObjects) {
SoundObject replacement = getReplacementObject(buffer, instances);
replacement.setStartTime(sObj.getStartTime());
replacement.setSubjectiveDuration(sObj.getSubjectiveDuration());
ScoreObjectLayer layer = (ScoreObjectLayer) findLayerForSoundObject(layers, sObj);
layer.remove(sObj);
layer.add(replacement);
ReplaceScoreObjectEdit edit = new ReplaceScoreObjectEdit(layer, sObj, replacement);
if (top == null) {
top = edit;
} else {
top.addEdit(edit);
}
}
// FIXME - this part is not undoable...
sObjLib.checkAndAddInstanceSoundObjects(instances);
BlueUndoManager.setUndoManager("score");
BlueUndoManager.addEdit(top);
}
use of blue.SoundObjectLibrary in project blue by kunstmusik.
the class PasteAsPolyObjectAction method actionPerformed.
@Override
public void actionPerformed(ActionEvent e) {
BlueData data = BlueProjectManager.getInstance().getCurrentBlueData();
SoundObjectLibrary sObjLib = data.getSoundObjectLibrary();
List<Instance> instanceSoundObjects = new ArrayList<>();
ScoreController.ScoreObjectBuffer buffer = ScoreController.getInstance().getScoreObjectBuffer();
double start = (double) p.x / timeState.getPixelSecond();
if (timeState.isSnapEnabled()) {
start = ScoreUtilities.getSnapValueStart(start, timeState.getSnapValue());
}
int minLayer = Integer.MAX_VALUE;
int maxLayer = Integer.MIN_VALUE;
for (Integer layerIndex : layerIndexes) {
if (layerIndex < minLayer) {
minLayer = layerIndex;
}
if (layerIndex > maxLayer) {
maxLayer = layerIndex;
}
}
int numLayers = maxLayer - minLayer + 1;
for (int i = 0; i < numLayers; i++) {
pObj.newLayerAt(-1);
}
for (int i = 0; i < scoreObjects.size(); i++) {
ScoreObject scoreObj = scoreObjects.get(i);
int layerIndex = layerIndexes.get(i);
SoundLayer layer = pObj.get(layerIndex - minLayer);
SoundObject clone = (SoundObject) scoreObj.deepCopy();
layer.add(clone);
if (clone instanceof Instance) {
instanceSoundObjects.add((Instance) clone);
}
}
sObjLib.checkAndAddInstanceSoundObjects(instanceSoundObjects);
pObj.normalizeSoundObjects();
pObj.setStartTime(start);
final ScoreObjectLayer layer = (ScoreObjectLayer) scorePath.getGlobalLayerForY(p.y);
layer.add(pObj);
AddScoreObjectEdit edit = new AddScoreObjectEdit(layer, pObj);
BlueUndoManager.setUndoManager("score");
BlueUndoManager.addEdit(edit);
}
use of blue.SoundObjectLibrary in project blue by kunstmusik.
the class PasteSoundObjectAction method actionPerformed.
@Override
public void actionPerformed(ActionEvent e) {
double start = (double) p.x / timeState.getPixelSecond();
if (timeState.isSnapEnabled()) {
start = ScoreUtilities.getSnapValueStart(start, timeState.getSnapValue());
}
ScoreController.ScoreObjectBuffer buffer = ScoreController.getInstance().getScoreObjectBuffer();
List<Layer> allLayers = scorePath.getAllLayers();
int selectedLayerIndex = scorePath.getGlobalLayerIndexForY(p.y);
int minLayer = Integer.MAX_VALUE;
int maxLayer = Integer.MIN_VALUE;
double bufferStart = Double.POSITIVE_INFINITY;
for (int i = 0; i < buffer.scoreObjects.size(); i++) {
ScoreObject scoreObj = buffer.scoreObjects.get(i);
int layer = buffer.layerIndexes.get(i);
if (scoreObj.getStartTime() < bufferStart) {
bufferStart = scoreObj.getStartTime();
}
if (layer < minLayer) {
minLayer = layer;
}
if (layer > maxLayer) {
maxLayer = layer;
}
}
int layerTranslation = selectedLayerIndex - minLayer;
double startTranslation = start - bufferStart;
if ((maxLayer + layerTranslation) >= allLayers.size()) {
JOptionPane.showMessageDialog(null, "Not Enough Layers to Paste");
return;
}
for (int i = 0; i < buffer.scoreObjects.size(); i++) {
ScoreObject scoreObj = buffer.scoreObjects.get(i);
int index = buffer.layerIndexes.get(i);
Layer layer = allLayers.get(index + layerTranslation);
if (!layer.accepts(scoreObj)) {
JOptionPane.showMessageDialog(null, "Unable to paste due to target layers not " + "accepting types of objects within the copy buffer (i.e. trying to " + "paste a SoundObject into an AudioLayer");
return;
}
}
BlueData data = BlueProjectManager.getInstance().getCurrentBlueData();
SoundObjectLibrary sObjLib = data.getSoundObjectLibrary();
AddScoreObjectEdit undoEdit = null;
// FIXME - Need a generic way to handle shadow objects; perhaps need to
// deal with this in the model...
List<Instance> instanceSoundObjects = new ArrayList<>();
for (int i = 0; i < buffer.scoreObjects.size(); i++) {
ScoreObject sObj = buffer.scoreObjects.get(i).deepCopy();
int newLayerIndex = buffer.layerIndexes.get(i) + layerTranslation;
if (sObj instanceof Instance) {
instanceSoundObjects.add((Instance) sObj);
} else if (sObj instanceof PolyObject) {
PolyObject pObj = (PolyObject) sObj;
getInstancesFromPolyObject(instanceSoundObjects, pObj);
}
sObj.setStartTime(sObj.getStartTime() + startTranslation);
ScoreObjectLayer<ScoreObject> layer = (ScoreObjectLayer<ScoreObject>) allLayers.get(newLayerIndex);
layer.add(sObj);
AddScoreObjectEdit tempEdit = new AddScoreObjectEdit(layer, sObj);
if (undoEdit == null) {
undoEdit = tempEdit;
} else {
undoEdit.addSubEdit(tempEdit);
}
}
checkAndAddInstanceSoundObjects(sObjLib, instanceSoundObjects);
BlueUndoManager.setUndoManager("score");
BlueUndoManager.addEdit(undoEdit);
}
use of blue.SoundObjectLibrary in project blue by kunstmusik.
the class SoundObjectLibraryUtils method removeLibrarySoundObject.
public static void removeLibrarySoundObject(BlueData data, SoundObject sObj) {
SoundObjectLibrary library = data.getSoundObjectLibrary();
library.removeSoundObject(sObj);
for (SoundObject tempObj : library) {
if (tempObj instanceof PolyObject) {
removeSoundObjectInstances((PolyObject) tempObj, sObj);
}
}
Score score = data.getScore();
for (LayerGroup layerGroup : score) {
if (layerGroup instanceof PolyObject) {
PolyObject pObj = (PolyObject) layerGroup;
removeSoundObjectInstances(pObj, sObj);
}
}
}
Aggregations