started implementing of audio codex

This commit is contained in:
Hellow2
2023-04-05 12:59:00 +02:00
parent 5b947c2d66
commit 2a1d5bef1c
6 changed files with 18 additions and 7 deletions

View File

@@ -0,0 +1,7 @@
from . import metadata
from . import codex
AudioMetadata = metadata.AudioMetadata
write_many_metadata = metadata.write_many_metadata
write_metadata = metadata.write_metadata
write_metadata_to_target = metadata.write_metadata_to_target

View File

@@ -0,0 +1,8 @@
import ffmpeg
from ..utils.shared import BITRATE
from ..objects import Target
def correct_codex(target: Target, bitrate: int = BITRATE):
if not target.exists:
pass

View File

@@ -0,0 +1,87 @@
import mutagen
from mutagen.id3 import ID3, Frame
from pathlib import Path
from typing import List
import logging
from ..utils.shared import (
TAGGING_LOGGER as LOGGER
)
from ..objects import Song, Target, Metadata
class AudioMetadata:
def __init__(self, file_location: str = None) -> None:
self._file_location = None
self.frames: ID3 = ID3()
if file_location is not None:
self.file_location = file_location
def add_metadata(self, metadata: Metadata):
for value in metadata:
"""
https://www.programcreek.com/python/example/84797/mutagen.id3.ID3
"""
self.frames.add(value)
def add_song_metadata(self, song: Song):
self.add_metadata(song.metadata)
def save(self, file_location: Path = None):
LOGGER.debug(f"saving following frames: {self.frames.pprint()}")
if file_location is not None:
self.file_location = file_location
if self.file_location is None:
raise Exception("no file target provided to save the data to")
self.frames.save(self.file_location, v2_version=4)
def set_file_location(self, file_location: Path):
# try loading the data from the given file. if it doesn't succeed the frame remains empty
try:
self.frames.load(file_location, v2_version=4)
LOGGER.debug(f"loaded following from \"{file_location}\"\n{self.frames.pprint()}")
except mutagen.MutagenError:
LOGGER.warning(f"couldn't find any metadata at: \"{self.file_location}\"")
self._file_location = file_location
file_location = property(fget=lambda self: self._file_location, fset=set_file_location)
def write_metadata_to_target(metadata: Metadata, target: Target):
if not target.exists:
return
id3_object = AudioMetadata(file_location=target.file_path)
id3_object.add_metadata(metadata)
id3_object.save()
def write_metadata(song: Song, ignore_file_not_found: bool = True):
target: Target
for target in song.target:
if not target.exists:
if ignore_file_not_found:
continue
else:
raise ValueError(f"{song.target.file} not found")
id3_object = AudioMetadata(file_location=target.file_path)
id3_object.add_song_metadata(song=song)
id3_object.save()
def write_many_metadata(song_list: List[Song]):
for song in song_list:
write_metadata(song=song, ignore_file_not_found=True)
if __name__ == "__main__":
print("called directly")
filepath = "/home/lars/Music/deathcore/Archspire/Bleed the Future/Bleed the Future.mp3"
audio_metadata = AudioMetadata(file_location=filepath)
print(audio_metadata.frames.pprint())