Compare commits
6 Commits
Author | SHA1 | Date |
---|---|---|
|
12d0296517 | |
|
27b4fdf173 | |
|
f205a810c4 | |
|
acd83b32b5 | |
|
c2782293d4 | |
|
a76b268e05 |
|
@ -0,0 +1,26 @@
|
|||
|
||||
repos:
|
||||
# Using this mirror lets us use mypyc-compiled black, which is about 2x faster
|
||||
- repo: https://github.com/psf/black-pre-commit-mirror
|
||||
rev: 24.2.0
|
||||
hooks:
|
||||
- id: black
|
||||
# It is recommended to specify the latest version of Python
|
||||
# supported by your project here, or alternatively use
|
||||
# pre-commit's default_language_version, see
|
||||
# https://pre-commit.com/#top_level-default_language_version
|
||||
language_version: python3.11
|
||||
|
||||
- repo: https://github.com/pycqa/isort
|
||||
rev: 5.13.2
|
||||
hooks:
|
||||
- id: isort
|
||||
name: isort (python)
|
||||
|
||||
- repo: https://github.com/astral-sh/ruff-pre-commit
|
||||
# Ruff version.
|
||||
rev: v0.3.0
|
||||
hooks:
|
||||
# Run the linter.
|
||||
- id: ruff
|
||||
# - id: ruff-format We don't need this because we have black and isort.
|
|
@ -0,0 +1,11 @@
|
|||
# Changelog
|
||||
|
||||
## 1.2
|
||||
|
||||
* chore: ruff, isort and black check
|
||||
* chore: allow newer versions of negromate.songs
|
||||
|
||||
|
||||
## 1.1
|
||||
|
||||
* Fix readme and dependencies
|
40
README.md
40
README.md
|
@ -1,17 +1,27 @@
|
|||
Negro Mate Karaoke
|
||||
==================
|
||||
|
||||
Simple karaoke bideo browser.
|
||||
Simple karaoke video browser.
|
||||
|
||||
This module provides one extra command to negromate:
|
||||
|
||||
negromate karaoke: GUI for negromate karaoke
|
||||
|
||||
|
||||
Uses Kivy, a fairly large python library. It could be more easy to install this
|
||||
package if Kivy is already installed in the system.
|
||||
|
||||
VLC is also used to play the songs.
|
||||
|
||||
Needs the following packages installed:
|
||||
|
||||
* python3-kivy (at least version 2.1.0)
|
||||
* vlc
|
||||
|
||||
Uses kivy, installation instructions here: https://kivy.org/doc/stable/installation/installation-devel.html
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
Launch:
|
||||
|
||||
negromate-karaoke folder/with/songs
|
||||
|
||||
Keyboard shortcuts:
|
||||
|
||||
- A: Previous song
|
||||
|
@ -19,21 +29,3 @@ Keyboard shortcuts:
|
|||
- D: Next song
|
||||
|
||||
The songs are played with vlc, so to exit a playing song: `Ctrl-C`.
|
||||
|
||||
|
||||
Install Mini-howto
|
||||
------------------
|
||||
Instalation uses the pep517 packaging format, whichs requires pip version
|
||||
19 or newer.
|
||||
|
||||
pip install "pip>=19"
|
||||
|
||||
Install dependencies for Kivy:
|
||||
|
||||
apt-get install python3-dev python-setuptools python-pygame python-opengl \
|
||||
python-enchant python-dev build-essential python-pip libgl1-mesa-dev \
|
||||
libgles2-mesa-dev zlib1g-dev
|
||||
|
||||
Install this package
|
||||
|
||||
pip install .
|
||||
|
|
|
@ -1 +1 @@
|
|||
VERSION = "1.0"
|
||||
VERSION = "1.2"
|
||||
|
|
|
@ -1,17 +1,22 @@
|
|||
from pathlib import Path
|
||||
|
||||
name = 'karaoke'
|
||||
help_text = 'GUI for negromate karaoke'
|
||||
name = "karaoke"
|
||||
help_text = "GUI for negromate karaoke"
|
||||
|
||||
|
||||
def options(parser, config, **kwargs):
|
||||
parser.add_argument(
|
||||
'-s', '--song_folder', type=Path,
|
||||
default=config['global']['song_folder'],
|
||||
"-s",
|
||||
"--song_folder",
|
||||
type=Path,
|
||||
default=config["global"]["song_folder"],
|
||||
help="Folder with the song database, defaults to {}".format(
|
||||
config['global']['song_folder']))
|
||||
config["global"]["song_folder"]
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
def run(args, **kwargs):
|
||||
from ..karaoke import main
|
||||
|
||||
main(args.song_folder.expanduser())
|
||||
|
|
|
@ -3,21 +3,23 @@ import os
|
|||
import subprocess
|
||||
|
||||
import kivy
|
||||
kivy.require('2.0.0')
|
||||
|
||||
from kivy.app import App
|
||||
from kivy.core.text import LabelBase
|
||||
from kivy.core.window import Window
|
||||
from kivy.properties import ObjectProperty, ListProperty, BooleanProperty
|
||||
from kivy.resources import resource_add_path
|
||||
from kivy.uix.boxlayout import BoxLayout
|
||||
|
||||
from negromate.songs.loader import load_songs
|
||||
|
||||
kivy.require("2.1.0")
|
||||
|
||||
from kivy.app import App # noqa: E402
|
||||
from kivy.core.text import LabelBase # noqa: E402
|
||||
from kivy.core.window import Window # noqa: E402
|
||||
from kivy.properties import BooleanProperty # noqa: E402
|
||||
from kivy.properties import ListProperty # noqa: E402
|
||||
from kivy.properties import ObjectProperty # noqa: E402
|
||||
from kivy.resources import resource_add_path # noqa: E402
|
||||
from kivy.uix.boxlayout import BoxLayout # noqa: E402
|
||||
|
||||
|
||||
class SongWidget(BoxLayout):
|
||||
active = BooleanProperty(False)
|
||||
song = ObjectProperty('')
|
||||
song = ObjectProperty("")
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
|
@ -49,18 +51,18 @@ class KaraokeGUI(BoxLayout):
|
|||
self.keyboard = Window.request_keyboard(
|
||||
self.keyboard_closed,
|
||||
self,
|
||||
'text',
|
||||
"text",
|
||||
)
|
||||
self.keyboard.bind(on_key_down=self.on_key_down)
|
||||
|
||||
def on_key_down(self, keyboard, keycode, text, modifiers):
|
||||
if text == 'a':
|
||||
if text == "a":
|
||||
self.previous()
|
||||
return True
|
||||
elif text == 'd':
|
||||
elif text == "d":
|
||||
self.next()
|
||||
return True
|
||||
elif text == 's':
|
||||
elif text == "s":
|
||||
self.play()
|
||||
return True
|
||||
return False
|
||||
|
@ -69,7 +71,7 @@ class KaraokeGUI(BoxLayout):
|
|||
pass
|
||||
|
||||
def on_songs(self, instance, value):
|
||||
container = self.ids['song_container']
|
||||
container = self.ids["song_container"]
|
||||
container.clear_widgets()
|
||||
for song in self.songs:
|
||||
container.add_widget(song)
|
||||
|
@ -79,12 +81,12 @@ class KaraokeGUI(BoxLayout):
|
|||
for song in self.songs:
|
||||
song.active = False
|
||||
value.active = True
|
||||
current_song_image = self.ids['current_song_image']
|
||||
current_song_title = self.ids['current_song_title']
|
||||
current_song_image = self.ids["current_song_image"]
|
||||
current_song_title = self.ids["current_song_title"]
|
||||
current_song_image.source = value.cover
|
||||
current_song_title.text = value.name
|
||||
|
||||
scrollview = self.ids['songs_scroll']
|
||||
scrollview = self.ids["songs_scroll"]
|
||||
scrollview.scroll_to(value)
|
||||
|
||||
def previous(self):
|
||||
|
@ -108,19 +110,26 @@ class KaraokeGUI(BoxLayout):
|
|||
self.active_song = self.songs[idx]
|
||||
|
||||
def play(self):
|
||||
subprocess.call([
|
||||
'cvlc',
|
||||
'--fullscreen',
|
||||
'--no-sub-autodetect-file',
|
||||
'--sub-file',
|
||||
subprocess.call(
|
||||
[
|
||||
"cvlc",
|
||||
"--fullscreen",
|
||||
"--no-sub-autodetect-file",
|
||||
"--sub-file",
|
||||
self.active_song.subtitle,
|
||||
self.active_song.video,
|
||||
'vlc://quit'
|
||||
])
|
||||
"vlc://quit",
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
class KaraokeApp(App):
|
||||
kv_directory = os.path.join(os.path.dirname(__file__, ), 'kv_templates')
|
||||
kv_directory = os.path.join(
|
||||
os.path.dirname(
|
||||
__file__,
|
||||
),
|
||||
"kv_templates",
|
||||
)
|
||||
|
||||
def __init__(self, root_folder, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
@ -137,7 +146,5 @@ class KaraokeApp(App):
|
|||
def main(path):
|
||||
# Window.fullscreen = True
|
||||
resource_add_path(os.path.dirname(__file__))
|
||||
LabelBase.register(
|
||||
name='CyrBit',
|
||||
fn_regular='resources/fonts/CyrBit.ttf')
|
||||
LabelBase.register(name="CyrBit", fn_regular="resources/fonts/CyrBit.ttf")
|
||||
KaraokeApp(path).run()
|
||||
|
|
|
@ -1,2 +1 @@
|
|||
Kivy==2.0.0
|
||||
negromate.songs==1.4
|
||||
negromate.songs>=1.5
|
||||
|
|
Loading…
Reference in New Issue