Is there a way to project a part onto another part's surface, without ray-casting?

Main goal:
So, I have been thinking of a way to implement sound upon collisions, but detecting collision using the “.Touched” event doesn’t give much info about the collision point, which is what desperately what I’m trying to get.

Theory:
So I thought, what if you could somehow project object1 onto the surface of object2, to then raycast to that point to get some extra information, like the surface normal. Now I understand that this is probably really inaccurate, but something is better than nothing.

Here is a video of what I mean when I say “Project onto another surface.” (This is using raycasting for demonstration purposes)

Reason behind why I can’t raycast:
Simply, where would you raycast to?

Using the velocity of the moving object? what if the object is moving horizontally but the collision happens vertically…

Raycasting from obj1’s position to obj2’s position?
This would work if everything uses sphere collisions, but what if obj2 is a large floor…

Ending:
But using a position where object1 is projected onto object2, would result in a position close enough to where they most likely collided, at least I think so?

Any information relating to either the projection part or the getting additional information about where objects collide is greatly appreciated!

Thanks!

(Edit)
Also, audio isn’t a very large aspect of the game. So performance has to be taken into account, meaning implementing an entire physics engine with custom collision detection isn’t what I’m looking for.