Exemplo n.º 1
0
 def __init__(self, *args, **kwargs):
     super(Song, self).__init__(*args, **kwargs)
     self.audio_handler = FileHandlerSongAudio()
     if self.audio:
         self.audio_handler.load(self.audio)
Exemplo n.º 2
0
 def audio_url(self):
     if not self.audio:
         return
     if not self.audio_handler:
         self.audio_handler = FileHandlerSongAudio()
     return self.audio_handler.single_url()
Exemplo n.º 3
0
class Song(models.Model):
    name = models.CharField(max_length=128)
    description = models.CharField(max_length=255, null=True, blank=True)
    about = models.TextField(null=True, blank=True)
    album = models.ForeignKey(Album, related_name='songs')
    lyrics = models.TextField(null=True, blank=True)
    duration = models.IntegerField()
    position = models.CharField(max_length=5, null=True, blank=True)
    composer = models.ManyToManyField(ComposerRole)
    signature = models.CharField(max_length=10, null=True, blank=True)
    tempo = models.IntegerField(choices=Tempo.choices(), null=True, blank=True)
    tonality = models.CharField(max_length=10, null=True, blank=True,
                                choices=Tonality.choices())
    audio = models.CharField(max_length=255, null=True, blank=True)

    class Meta:
        unique_together = ('name', 'album')

    def __unicode__(self):
        duration = " (%s)" % self.duration_display if self.duration else ""
        return "%s - %s%s" % (self.position, self.name, duration)

    def __init__(self, *args, **kwargs):
        super(Song, self).__init__(*args, **kwargs)
        self.audio_handler = FileHandlerSongAudio()
        if self.audio:
            self.audio_handler.load(self.audio)

    @property
    def audio_url(self):
        if not self.audio:
            return
        if not self.audio_handler:
            self.audio_handler = FileHandlerSongAudio()
        return self.audio_handler.single_url()

    @property
    def lyrics_html_display(self):
        return '<br />'.join(self.lyrics.splitlines())

    @property
    def tempo_display(self):
        if self.tempo and self.tempo >= 10:
            return "%s bpm"% Tempo.display(self.tempo)
        else:
            return "N/A"

    @property
    def tempo_html_display(self):
        d = self.tempo_display
        tempo = self.tempo or 0
        return '<span class="tempo%s">%s</span>' % (tempo, d)

    @property
    def signature_html_display(self):
        return self.signature

    @property
    def signature_tuple(self):
        if not self.signature:
            return (4, 4)
        return tuple(map(int, self.signature.split('/')))

    @property
    def signature_beats(self):
        return self.signature_tuple[0]

    @property
    def signature_value(self):
        return self.signature_tuple[1]

    @property
    def signature_beats_range(self):
        return range(self.signature_tuple[0])

    @property
    def tonality_html_display(self):
        return Tonality.html_display(self.tonality)

    @property
    def duration_display(self):
        if not self.duration:
            return ""
        z = lambda x: str(x).zfill(2)
        return "%s:%s" % (z(self.duration / 60), z(self.duration % 60))

    @property
    def composer_display(self):
        return ', '.join([str(c.composer) for c in self.composer.all()])