How can I make a post that belongs to a category or have specific tags, display different from the other single posts?

With CSS: If your theme uses post_class() on a containing element, you can target that element with the class .category-songs to control styling.

With a template filter: add a filter to single_template and check the assigned categories for your songs category, and use the template songs-single.php if that category is found:

function wpse_check_single_categories( $template="" ){
    $categories = get_the_category();
    foreach( $categories as $cat ):
        if( $cat->name == 'songs' ):
            $template = locate_template( array( "songs-single.php", $template ), false );
        endif;
    endforeach;
    return $template;
}
add_filter( 'single_template', 'wpse_check_single_categories' );