Compare commits

..

6 Commits

19 changed files with 256 additions and 13 deletions

9
.gitattributes vendored Normal file
View File

@@ -0,0 +1,9 @@
* text=auto eol=lf
/.gitignore export-ignore
/.gitattributes export-ignore
*.mp3 filter=lfs diff=lfs merge=lfs -text
assets/bin/** filter=lfs diff=lfs merge=lfs -text
assets/bin/**/*.env -filter -diff -merge
assets/bin/**/*.txt -filter -diff -merge

19
.gitignore vendored
View File

@@ -1,18 +1,11 @@
# ---> Rust .idea/
# Generated by Cargo .vscode/
# will have compiled files and executables
debug/ debug/
target/ target/
assets/.cache
# These are backup files generated by rustfmt Cargo.lock
**/*.rs.bk
# MSVC Windows builds of rustc generate these, which store debugging information
*.pdb *.pdb
**/*.rs.bk
# RustRover
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/

6
Cargo.toml Normal file
View File

@@ -0,0 +1,6 @@
[package]
name = "new_vegas_radio"
version = "0.1.0"
edition = "2024"
[dependencies]

173
README.md
View File

@@ -1,2 +1,175 @@
# NewVegasRadio # NewVegasRadio
---
### Assets-Directory Structure:
```terminaloutput
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`:
```json5
{
"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`:
```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`
```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`:
```json5
{
"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`:
```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`
```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
)
```

3
assets/bin/aarch64/.env Normal file
View File

@@ -0,0 +1,3 @@
LOCAL_SONGS_DIR=../../../assets/songs
LOCAL_BIN_DIR=.
ARCH_AWARE=false

BIN
assets/bin/aarch64/ffmpeg (Stored with Git LFS) Executable file

Binary file not shown.

BIN
assets/bin/aarch64/ffplay (Stored with Git LFS) Executable file

Binary file not shown.

BIN
assets/bin/aarch64/ffprobe (Stored with Git LFS) Executable file

Binary file not shown.

BIN
assets/bin/aarch64/ogg_to_mp3 (Stored with Git LFS) Executable file

Binary file not shown.

BIN
assets/bin/aarch64/rnv_utils (Stored with Git LFS) Executable file

Binary file not shown.

View File

@@ -0,0 +1,11 @@
LGPL-3.0
ffmpeg, ffplay, ffprobe
https://github.com/BtbN/FFmpeg-Builds/releases/tag/autobuild-2026-02-18-13-03
https://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-n7.1-latest-linux64-lgpl-7.1.tar.xz
sha256:5ec371abbf6da81fa0a7dfe013035754fadf77f8206b93cb784ec582b0870607
LGPL-3.0
rnv_utils
locally compiled (arm64), golang
sha256:051128df6068196f4190d11be587237378846d3f8610ec760f681a9b29efa1f3

3
assets/bin/x86_64/.env Normal file
View File

@@ -0,0 +1,3 @@
LOCAL_SONGS_DIR=../../../assets/songs
LOCAL_BIN_DIR=.
ARCH_AWARE=false

BIN
assets/bin/x86_64/ffmpeg (Stored with Git LFS) Executable file

Binary file not shown.

BIN
assets/bin/x86_64/ffplay (Stored with Git LFS) Executable file

Binary file not shown.

BIN
assets/bin/x86_64/ffprobe (Stored with Git LFS) Executable file

Binary file not shown.

BIN
assets/bin/x86_64/ogg_to_mp3 (Stored with Git LFS) Executable file

Binary file not shown.

BIN
assets/bin/x86_64/rnv_utils (Stored with Git LFS) Executable file

Binary file not shown.

View File

@@ -0,0 +1,11 @@
LGPL-3.0
ffmpeg, ffplay, ffprobe
https://github.com/BtbN/FFmpeg-Builds/releases/tag/autobuild-2026-02-18-13-03
https://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-n7.1-latest-linux64-lgpl-7.1.tar.xz
sha256:5ec371abbf6da81fa0a7dfe013035754fadf77f8206b93cb784ec582b0870607
LGPL-3.0
rnv_utils
locally compiled (amd64), golang
sha256:9b896f6b30d04ff110bb8fd376c02fcb1eab1972a45fea2952ae96f6d89a8be8

4
src/main.rs Normal file
View File

@@ -0,0 +1,4 @@
fn main() {
}