NewVegasRadio


Assets-Directory Structure:

assets/
   config.(json|toml|ron)
   bin/
      x86_64/
      aarch64/
   songs/
      my_song/
         my_song.mp3
         descriptor.(json|toml|ron)
         intro/
            Intro_MrNewVegas_my_song.mp3 (optional)
   generic/
      intro/
         Intro_MrNewVegas_N.mp3
      news/
         story_N/
            story.toml (ignored, metadata)
            Story_MrNewVegas_N.mp3
            Story_Guest_N.mp3
   .cache/ (automatically generated)
      songs/
         my_song/
            song.pcm (f32 pcm)
            intro.pcm (f32 pcm)
            cache.json
      generic/
         intro/
            Intro_MrNewVegas_N.pcm (f32 pcm)
            Intro_MrNewVegas_N.cache.json
         news/
            story_N/
               part_N.pcm (f32 pcm)
               cache.json

config.json:

{
  "defaults": {
    "songs_directory":   "songs",
    "generic_directory": "generic",
    "log_directory":     "logs",
    "temp_directory":    "temp"
  },
  "settings": {
    "weight":    1.0,
    "volume":    1.0,
    "crossfade": 2.0, // in seconds
    "weights": {
      "news": {
        "chance": 0.2
      },
      "genre": {
        "floor": 0.55,
        "recover_after": 3.0
      },
      "composite": {
        "floor": 0.05,
        "recover_after": 5.0
      }
    }
  },
  "rules": {
    "shuffle_mode": "weighted", // options: "weighted", "strict_random"
  }
}

OR

config.toml:

[defaults]
songs_directory   = "songs"
generic_directory = "generic"
log_directory     = "logs"
temp_directory    = "temp"

[settings]
weight    = 1.0
volume    = 1.0
crossfade = 2.0 # in seconds
[settings.weights.news]
chance = 0.2
[settings.weights.genre]
floor         = 0.55
recover_after = 3.0
[settings.weights.composite]
floor         = 0.05
recover_after = 5.0

[rules]
shuffle_mode = "weighted" # "weighted", "strict_random"

OR

config.ron

(
    defaults: (
        songs_directory:   "songs",
        generic_directory: "generic",
        log_directory:     "logs",
        temp_directory:    "temp",
    ),
    settings: (
        debug:     true,
        weight:    1.0,
        volume:    1.0,
        crossfade: 2.0, // in seconds
        weights: (
            news: (
                chance: 0.2,
            ),
            genre: (
                floor:         0.55,
                recover_after: 3.0,
            ),
            composite: (
                floor:         0.05,
                recover_after: 5.0,
            ),
        ),
    ),
    rules: (
        shuffle_mode: weighted, // weighted, strict_random
    ),
)

descriptor.json:

{
  "title":  "[I Got Spurs That] Jingle, Jangle, Jingle",
  "artist": "Kay Kyser",
  "tags":   ["orchestra", "swing", "jazz"],
  "genre":  ["swing", "jazz"],
  "intro":  true,
  "weight": 1.0, // optional
  "volume": 1.0, // optional
}

OR

descriptor.toml:

title  = "[I Got Spurs That] Jingle, Jangle, Jingle"
artist = "Kay Kyser"
tags   = ["orchestra", "swing", "jazz"]
genre  = ["swing", "jazz"]
intro  = true
weight = 1.0 # optional
volume = 1.0 # optional

OR

descriptor.ron

(
    title:  "[I Got Spurs That] Jingle, Jangle, Jingle",
    artist: "Kay Kyser",
    tags:   ["orchestra", "swing", "jazz"],
    genre:  ["swing", "jazz"],
    intro:  true,
    weight: 1.0, // optional
    volume: 1.0, // optional
)
Description
No description provided
Readme AGPL-3.0 591 MiB