private void actionMix( )
{
	DefaultMutableTreeNode
		selNd = getSelectedNode();
	if ( selNd != null )
	{
		int[] selIdxs = getNodeIndexList(selNd);
		if ( selIdxs.length == 1 )
		{
			LinkedList<double[]> audioList = audioVectors.get(selIdxs[0]);
			int m = audioList.size();
			if ( m > 0 )
			{
				NumberDialog numberDl = 
					new NumberDialog(this, "Number of output signals...", 1, 1, 32);
				if ( numberDl.open() )
				{
					int n = numberDl.getNumber();
					MatrixDialog matrixDl = 
						new MatrixDialog(this, "Choose the mixing matrix...", Matrix.newMatrix(m, n, 0.0));
					if ( matrixDl.open() )
					{
						// compute the new signals
						double[][] mixingMatrix = Matrix.transpose(matrixDl.getMatrix());
						double[][] audioMatrix = AudioVector.toMatrix(audioList.toArray(new double[1][]));
						double[][] resAudioMatrix = Matrix.mult(mixingMatrix, audioMatrix);
						saveAudioVectors(resAudioMatrix, "Mixed Collection");
					}
				}
			}
		}
	}
}