summary | 
shortlog | 
log | 
commit | commitdiff | 
tree
raw | 
patch | 
inline | side by side (from parent 1: 
b3621dc)
 
- min_file_duration: permits excluding very short audio files
- max_filename_length: permits reducing output file name length for
    filesystem compatibility (e.g. Windows likes names shorter than
    255 characters).
- showUsage(): Update description to indicate that the script copies
    based on whether an audio track is detectable or not.
-# Desc: Copies random music
+# Desc: Copies random audio files
 # Usage: bk-copy-rand-music.sh [dir SOURCE] [dir DEST] [int DURATION]
 # Usage: bk-copy-rand-music.sh [dir SOURCE] [dir DEST] [int DURATION]
 
 declare -Ag appRollCall # Associative array for storing app status
 declare -Ag fileRollCall # Associative array for storing file status
 
 declare -Ag appRollCall # Associative array for storing app status
 declare -Ag fileRollCall # Associative array for storing file status
 
 # Adjustable parameters
 music_codecs=("vorbis" "aac" "mp3" "flac" "opus"); # whitelist of valid codec_names ffprobe might return
 
 # Adjustable parameters
 music_codecs=("vorbis" "aac" "mp3" "flac" "opus"); # whitelist of valid codec_names ffprobe might return
-max_loops=1000000; # max number of files to test whether are audio or not
+max_loops="1000000"; # max number of files to test whether are audio or not
+max_filename_length="255"; # max output filename length
+min_file_duration="10"; # minimum duration per music file
 
 yell() { echo "$0: $*" >&2; } # print script path and all args to stderr
 die() { yell "$*"; exit 111; } # same as yell() but non-zero exit status
 
 yell() { echo "$0: $*" >&2; } # print script path and all args to stderr
 die() { yell "$*"; exit 111; } # same as yell() but non-zero exit status
-      This script may be used to copy a random selection of files from
-      SOURCE to DEST.
+      This script may be used to copy a random selection of files containing
+      audio tracks from SOURCE to DEST.
 
     USAGE:
       bk-copy-rand-music [dir SOURCE] [dir DEST] [int DURATION]
 
     USAGE:
       bk-copy-rand-music [dir SOURCE] [dir DEST] [int DURATION]
        dur_cand="$(get_media_length "$path_candfile")";
        dur_cand="${dur_cand%%.*}"; # convert float to int
        if ! checkInt "$dur_cand"; then continue; fi; # reject
        dur_cand="$(get_media_length "$path_candfile")";
        dur_cand="${dur_cand%%.*}"; # convert float to int
        if ! checkInt "$dur_cand"; then continue; fi; # reject
+       if [[ "$dur_cand" -lt "$min_file_duration" ]]; then continue; fi; # reject
 
        ### Add/update candfile to list_copy assoc. array (key=path; value=duration)
        #yell "DEBUG:Adding $path_candfile";
 
        ### Add/update candfile to list_copy assoc. array (key=path; value=duration)
        #yell "DEBUG:Adding $path_candfile";
        ## Get 16-character b2sum fingerprint (for different files that share basename)
        fingerprint="$(b2sum -l64 "$key" | cut -d' ' -f1)";
 
        ## Get 16-character b2sum fingerprint (for different files that share basename)
        fingerprint="$(b2sum -l64 "$key" | cut -d' ' -f1)";
 
+       ## Form output filename
+       file_name="$fingerprint".."$file_basename";
+       file_name="${file_name:0:$max_filename_length}"; # Limit filename length (e.g. Windows has max of 255 characters)
+
-       path_output="$dir_dest"/"$fingerprint".."$file_basename";
+       path_output="$dir_dest"/"$file_name";
        
        ## Copy
        try cp "$key" "$path_output" && yell "NOTICE:Copied ($value seconds): $key ";
        
        ## Copy
        try cp "$key" "$path_output" && yell "NOTICE:Copied ($value seconds): $key ";