Really the only way to do this is to remove the sound from the weapon datablock so that it doesn't play when you swing. Then, on projectile collision, play the sound from the source position of the projectile (the sword). Soooo..
function YourProjectile::onCollision(%this, %obj, %col, %fade, %pos, %normal) {
%soundPosition = %obj.sourceObject.getPosition();
%ret = parent::onCollision(%this, %obj, %col, %fade, %pos, %normal);
if(!(%col.getType() & $TypeMasks::PlayerObjectType) || %col.getState() !$= "dead")
%soundDB = YourNoKillSoundDatablock;
else
%soundDB = YourKillSoundDatablock;
serverPlay3D(%soundDB, %soundPosition);
return %ret;
}