X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=beet-data;h=5fb0538140940cf217d4eac9455497e2bcb1c568;hb=refs%2Fheads%2Fmaster;hp=b41b05bf4c5a4856cf2f04f7500c76f40f9866b3;hpb=63e3670ab59869f5f74904edbe64daa943fad15f;p=distro-setup diff --git a/beet-data b/beet-data index b41b05b..0aee2b4 100644 --- a/beet-data +++ b/beet-data @@ -1,4 +1,25 @@ #!/bin/bash +# I, Ian Kelling, follow the GNU license recommendations at +# https://www.gnu.org/licenses/license-recommendations.en.html. They +# recommend that small programs, < 300 lines, be licensed under the +# Apache License 2.0. This file contains or is part of one or more small +# programs. If a small program grows beyond 300 lines, I plan to switch +# its license to GPL. + +# Copyright 2024 Ian Kelling + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# http://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + nav_tags=( ## cross-genre tags that dont really make a playlist @@ -21,6 +42,7 @@ nav_tags=( run ) + pl_tags=( "${nav_tags[@]}" # alternate version of a song we already have which isn't as good @@ -45,7 +67,8 @@ common_genres=( # like power glove darkwave hardcore - instrumental + # nonvocal / instrumental + nv latin metal # mq = mac quale. similar to the mr robot soundtracks. @@ -99,99 +122,108 @@ tags=( sad ) - -for g in ${ignore_genres[@]}; do - ignore_genres_a[$g]=t -done -for g in ${slow_genres[@]}; do - slow_genres_a[$g]=t -done - -# genres that have a beat -beat_genres=() -genres=() - - -# relatively upbeat genres to listen, eg while biking -upbeat_genres=() -for g in ${all_genres[@]}; do - if [[ ${ignore_genres_a[$g]} ]]; then continue; fi - genres+=($g) - if [[ ${slow_genres_a[$g]} ]]; then continue; fi - beat_genres+=($g) - case $g in - chill) - continue - ;; - esac - upbeat_genres+=($g) -done - -# generate regex for beat playlist -beat_regex= -first=true -for g in ${beat_genres[@]}; do - if $first; then - first=false - beat_regex=$g - else - beat_regex+="|$g" - fi -done - -# generate regex for upbeat playlist -upbeat_regex= -first=true -for g in ${upbeat_genres[@]}; do - if $first; then - first=false - upbeat_regex=$g - else - upbeat_regex+="|$g" - fi -done - declare -A bpla # beet playlist associative array beetapl() { # beet add playlist local name name="$1" shift - bpla[$name]="${@@Q}" + bpla[$name]="${*@Q}" } -for g in ${genres[@]}; do - for r in {3..5}; do + +# this function is just so we can have some local vars +# and not mess with the global var namespace. +_beet-gen-global-vars() { + + local first g t r + + for g in ${ignore_genres[@]}; do + ignore_genres_a[$g]=t + done + for g in ${slow_genres[@]}; do + slow_genres_a[$g]=t + done + + # genres that have a beat + beat_genres=() + genres=() + + + # relatively upbeat genres to listen, eg while biking + upbeat_genres=() + for g in ${all_genres[@]}; do + if [[ ${ignore_genres_a[$g]} ]]; then continue; fi + genres+=($g) + if [[ ${slow_genres_a[$g]} ]]; then continue; fi + beat_genres+=($g) case $g in - pop|rap) - beetapl ${g}-${r} rating:${r}..5 genre::^$g\$ ^expl:t ^gimicky:t ^lesser_version:t - beetapl ${g}-x-${r} rating:${r}..5 genre::^$g\$ ^gimicky:t ^lesser_version:t - ;; - *) - beetapl ${g}-${r} rating:${r}..5 genre:$g ^gimicky:t ^lesser_version:t + chill) + continue ;; esac + upbeat_genres+=($g) + done + + # generate regex for beat playlist + beat_regex= + first=true + for g in ${beat_genres[@]}; do + if $first; then + first=false + beat_regex=$g + else + beat_regex+="|$g" + fi + done + + # generate regex for upbeat playlist + upbeat_regex= + first=true + for g in ${upbeat_genres[@]}; do + if $first; then + first=false + upbeat_regex=$g + else + upbeat_regex+="|$g" + fi + done + + + for g in ${genres[@]}; do + for r in {3..5}; do + case $g in + pop|rap) + beetapl ${g}-${r} rating:${r}..5 genre::^$g\$ ^expl:t ^gimicky:t ^lesser_version:t + beetapl ${g}-x-${r} rating:${r}..5 genre::^$g\$ ^gimicky:t ^lesser_version:t + ;; + *) + beetapl ${g}-${r} rating:${r}..5 genre:$g ^gimicky:t ^lesser_version:t + ;; + esac + done + done + + for t in ${tags[@]}; do + for r in {3..5}; do + beetapl ${t}-${r} rating:${r}..5 $t:t ^lesser_version:t + done + done + + for r in {3..5}; do + beetapl beat-${r} rating:${r}..5 genre::$beat_regex ^expl:t ^gimicky:t ^lesser_version:t + beetapl beat-x-${r} rating:${r}..5 genre::$beat_regex ^gimicky:t ^lesser_version:t + beetapl upbeat-${r} rating:${r}..5 genre::$upbeat_regex ^expl:t ^gimicky:t ^lesser_version:t ^sad:t + beetapl upbeat-x-${r} rating:${r}..5 genre::$upbeat_regex ^gimicky:t ^lesser_version:t ^sad:t + beetapl gimicky-${r} rating:${r}..5 gimicky:t ^lesser_version:t done -done -for t in ${tags[@]}; do for r in {3..5}; do - beetapl ${t}-${r} rating:${r}..5 $t:t ^lesser_version:t + beetapl \ + sy$r rating:${r}..5 genre::$upbeat_regex ^gimicky:t ^lesser_version:t 'artist:sonic youth' + done + + for t in ${nav_tags[@]}; do + beetapl $t $t:t done -done - -for r in {3..5}; do - beetapl beat-${r} rating:${r}..5 genre::$beat_regex ^expl:t ^gimicky:t ^lesser_version:t - beetapl beat-x-${r} rating:${r}..5 genre::$beat_regex ^gimicky:t ^lesser_version:t - beetapl upbeat-${r} rating:${r}..5 genre::$upbeat_regex ^expl:t ^gimicky:t ^lesser_version:t ^sad:t - beetapl upbeat-x-${r} rating:${r}..5 genre::$upbeat_regex ^gimicky:t ^lesser_version:t ^sad:t - beetapl gimicky-${r} rating:${r}..5 gimicky:t ^lesser_version:t -done - -for r in {3..5}; do - beetapl \ - sy$r rating:${r}..5 genre::$upbeat_regex ^gimicky:t ^lesser_version:t 'artist:sonic youth' -done - -for t in ${nav_tags[@]}; do - beetapl $t $t:t -done +} +_beet-gen-global-vars