def concert(request, uuid, concert_title=None): concert = get_object_or_404(Concert, mbid=uuid) images = concert.images.all() if images: image = images[0].image.url else: image = "/media/images/noconcert.jpg" sample = None tracks = concert.tracklist() if tracks: sample = tracks[:1] tags = tagging.tag_cloud(concert.id, "concert") # Other similar concerts similar = concert.get_similar() # Raaga in ret = {"filter_items": json.dumps(get_filter_items()), "concert": concert, "form": TagSaveForm(), "objecttype": "concert", "objectid": concert.id, "tags": tags, "image": image, "sample": sample, "similar_concerts": similar, "tracks": tracks, } return render(request, "carnatic/concert.html", ret)
def concert(request, uuid): concert = get_object_or_404(Concert, mbid=uuid) images = concert.images.all() if images: image = images[0].image.url else: image = "/media/images/noconcert.jpg" sample = None tracks = concert.tracklist() if tracks: sample = tracks[:1] tags = tagging.tag_cloud(concert.id, "concert") # Other similar concerts similar = concert.get_similar() # Raaga in ret = {"filter_items": json.dumps(get_filter_items()), "concert": concert, "form": TagSaveForm(), "objecttype": "concert", "objectid": concert.id, "tags": tags, "image": image, "sample": sample, "similar_concerts": similar, "tracks": tracks, } return render(request, "carnatic/concert.html", ret)
def work(request, uuid, title=None): work = get_object_or_404(Work, mbid=uuid) tags = tagging.tag_cloud(work.id, "work") recordings = work.recording_set.all() if len(recordings): sample = random.sample(recordings, 1) else: sample = None ret = {"filter_items": json.dumps(get_filter_items()), "work": work, "form": TagSaveForm(), "objecttype": "work", "objectid": work.id, "sample": sample, "tags": tags, } return render(request, "carnatic/work.html", ret)
def work(request, uuid): work = get_object_or_404(Work, mbid=uuid) tags = tagging.tag_cloud(work.id, "work") tracks = work.recording_set.all() if len(tracks): sample = random.sample(tracks, 1) else: sample = None ret = {"filter_items": json.dumps(get_filter_items()), "work": work, "form": TagSaveForm(), "objecttype": "work", "objectid": work.id, "sample": sample, "tags": tags, } return render(request, "carnatic/work.html", ret)
def concert(request, uuid, title=None): concert = get_object_or_404(Concert, mbid=uuid) bootleg = False if concert.bootleg and request.show_bootlegs: bootleg = True elif concert.bootleg and not request.show_bootlegs: raise Http404 images = concert.images.all() if images: image = images[0].image.url else: image = "/media/images/noconcert.jpg" sample = None recordings = concert.recordings.all() if recordings: sample = recordings[:1] tags = tagging.tag_cloud(concert.id, "concert") # Other similar concerts similar = concert.get_similar() # Raaga in ret = {"filter_items": json.dumps(get_filter_items()), "concert": concert, "form": TagSaveForm(), "objecttype": "concert", "objectid": concert.id, "tags": tags, "image": image, "sample": sample, "similar_concerts": similar, "recordings": recordings, "bootleg": bootleg } return render(request, "carnatic/concert.html", ret)
def recording(request, uuid, title=None): recording = get_object_or_404(Recording, mbid=uuid) bootleg = False if recording.is_bootleg() and request.show_bootlegs: bootleg = True elif recording.is_bootleg() and not request.show_bootlegs: raise Http404 tags = tagging.tag_cloud(recording.id, "recording") try: wave = docserver.util.docserver_get_url(recording.mbid, "audioimages", "waveform32", 1, version=settings.FEAT_VERSION_IMAGE) except docserver.util.NoFileException: wave = None try: spec = docserver.util.docserver_get_url(recording.mbid, "audioimages", "spectrum32", 1, version=settings.FEAT_VERSION_IMAGE) except docserver.util.NoFileException: spec = None try: small = docserver.util.docserver_get_url(recording.mbid, "audioimages", "smallfull", version=settings.FEAT_VERSION_IMAGE) except docserver.util.NoFileException: small = None try: audio = docserver.util.docserver_get_mp3_url(recording.mbid) except docserver.util.NoFileException: audio = None try: tonic = docserver.util.docserver_get_contents(recording.mbid, "votedtonic", "tonic", version=settings.FEAT_VERSION_TONIC) notenames = ["A", "A♯", "B", "C", "C♯", "D", "D♯", "E", "F", "F♯", "G", "G♯"] tonic = round(float(tonic), 2) thebin = (12 * math.log(tonic / 440.0) / math.log(2)) % 12 thebin = int(round(thebin)) tonic = str(tonic) if thebin <= 11 and thebin >= 0: tonicname = notenames[thebin] else: print "bin is", thebin, "weird" print tonic tonicname = "" except docserver.util.NoFileException: tonic = None tonicname = None try: akshara = docserver.util.docserver_get_contents(recording.mbid, "rhythm", "aksharaPeriod", version=settings.FEAT_VERSION_RHYTHM) akshara = str(round(float(akshara), 3) * 1000) except docserver.util.NoFileException: akshara = None try: pitchtrackurl = docserver.util.docserver_get_url(recording.mbid, "normalisedpitch", "packedpitch", version=settings.FEAT_VERSION_NORMALISED_PITCH) histogramurl = docserver.util.docserver_get_url(recording.mbid, "normalisedpitch", "drawhistogram", version=settings.FEAT_VERSION_NORMALISED_PITCH) rhythmurl = docserver.util.docserver_get_url(recording.mbid, "rhythm", "aksharaTicks", version=settings.FEAT_VERSION_RHYTHM) aksharaurl = docserver.util.docserver_get_url(recording.mbid, "rhythm", "APcurve", version=settings.FEAT_VERSION_RHYTHM) except docserver.util.NoFileException: pitchtrackurl = "/document/by-id/%s/%s?subtype=%s&v=%s" % (recording.mbid, "normalisedpitch", "packedpitch", settings.FEAT_VERSION_NORMALISED_PITCH) histogramurl = "/document/by-id/%s/%s?subtype=%s&v=%s" % (recording.mbid, "normalisedpitch", "drawhistogram", settings.FEAT_VERSION_NORMALISED_PITCH) rhythmurl = "/document/by-id/%s/%s?subtype=%s&v=%s" % (recording.mbid, "rhythm", "aksharaTicks", settings.FEAT_VERSION_RHYTHM) aksharaurl = "/document/by-id/%s/%s?subtype=%s&v=%s" % (recording.mbid, "rhythm", "APcurve", settings.FEAT_VERSION_RHYTHM) similar = [] try: similar_mbids = search.similar_recordings(recording.mbid) for m in similar_mbids: try: rec = Recording.objects.get(mbid=m[0]) similar.append(rec) except Recording.DoesNotExist: pass except pysolr.SolrError: # TODO: Show error in similar recordings page instead of empty pass similar = similar[:10] try: concert = recording.concert_set.get() recordings = list(concert.recordings.all()) recordingpos = recordings.index(recording) except Concert.DoesNotExist: concert = None recordings = [] recordingpos = 0 nextrecording = None prevrecording = None if recordingpos > 0: prevrecording = recordings[recordingpos - 1] if recordingpos + 1 < len(recordings): nextrecording = recordings[recordingpos + 1] mbid = recording.mbid ret = {"filter_items": json.dumps(get_filter_items()), "recording": recording, "form": TagSaveForm(), "objecttype": "recording", "objectid": recording.id, "tags": tags, "waveform": wave, "spectrogram": spec, "smallimage": small, "audio": audio, "tonic": tonic, "tonicname": tonicname, "akshara": akshara, "mbid": mbid, "nextrecording": nextrecording, "prevrecording": prevrecording, "pitchtrackurl": pitchtrackurl, "histogramurl": histogramurl, "rhythmurl": rhythmurl, "aksharaurl": aksharaurl, "similar": similar, "concert": concert, "bootleg": bootleg, } return render(request, "carnatic/recording.html", ret)
def artist(request, uuid, name=None): artist = get_object_or_404(Artist, mbid=uuid) inst = artist.instruments() ips = InstrumentPerformance.objects.filter(instrument=inst) similar_artists = [] for i in ips: if i.artist not in similar_artists: similar_artists.append(i.artist) if artist.main_instrument and artist.main_instrument.percussion: taalamap = {} taalacount = collections.Counter() taalas = Taala.objects.filter(Q(work__recording__concert__artists=artist) | Q(work__recording__instrumentperformance__artist=artist)) for t in taalas: taalacount[t.name] += 1 if t.name not in taalamap: taalamap[t.name] = t taalas = [] for t, count in taalacount.most_common(): taalas.append((taalamap[t], count)) else: taalas = [] # vocalist or violinist if artist.main_instrument and artist.main_instrument.id in [1, 2]: raagamap = {} raagacount = collections.Counter() raagas = Raaga.objects.filter(Q(work__recording__concert__artists=artist) | Q(work__recording__instrumentperformance__artist=artist)) for r in raagas: raagacount[r.name] += 1 if r.name not in raagamap: raagamap[r.name] = r raagas = [] for r, count in raagacount.most_common(): raagas.append((raagamap[r], count)) else: raagas = [] tags = tagging.tag_cloud(artist.id, "artist") musicbrainz = artist.get_musicbrainz_url() k = data.models.SourceName.objects.get(name="kutcheris.com") w = data.models.SourceName.objects.get(name="Wikipedia") kutcheris = None wikipedia = None kr = artist.references.filter(carnatic_artist_source_set=k) if kr.count(): kutcheris = kr[0].uri wr = artist.references.filter(carnatic_artist_source_set=w) if wr.count(): wikipedia = wr[0].uri desc = artist.description if desc and desc.source.source_name == k: kutcheris = artist.description.source.uri elif desc and desc.source.source_name == w: wikipedia = artist.description.source.uri kr = artist.references.filter(source_name=k) if kr.count() and not kutcheris: kutcheris = kr[0].uri wr = artist.references.filter(source_name=w) if wr.count() and not wikipedia: wikipedia = wr[0].uri # Sample is the first recording of any of their concerts (Vignesh, Dec 9) concerts = artist.concerts() sample = None if concerts: recordings = concerts[0].recordings.all() if recordings: sample = recordings[0] ret = {"filter_items": json.dumps(get_filter_items()), "artist": artist, "form": TagSaveForm(), "objecttype": "artist", "objectid": artist.id, "tags": tags, "similar_artists": similar_artists, "raagas": raagas, "taalas": taalas, "sample": sample, "mb": musicbrainz, "kutcheris": kutcheris, "wiki": wikipedia } return render(request, "carnatic/artist.html", ret)
def recording(request, uuid): recording = get_object_or_404(Recording, mbid=uuid) tags = tagging.tag_cloud(recording.id, "recording") try: wave = docserver.util.docserver_get_url(recording.mbid, "audioimages", "waveform32", 1) except docserver.util.NoFileException: wave = None try: spec = docserver.util.docserver_get_url(recording.mbid, "audioimages", "spectrum32", 1) except docserver.util.NoFileException: spec = None try: small = docserver.util.docserver_get_url(recording.mbid, "audioimages", "smallfull") except docserver.util.NoFileException: small = None try: audio = docserver.util.docserver_get_mp3_url(recording.mbid) except docserver.util.NoFileException: audio = None try: tonic = docserver.util.docserver_get_contents(recording.mbid, "ctonic", "tonic") notenames = ["A", "A♯", "B", "C", "C♯", "D", "D♯", "E", "F", "F♯", "G", "G♯"] tonic = round(float(tonic), 2) thebin = (12 * math.log(tonic/440.0) / math.log(2)) % 12 thebin = int(round(thebin)) tonic = str(tonic) if thebin <= 11 and thebin >= 0: tonicname = notenames[thebin] else: print "bin is", thebin, "weird" print tonic tonicname = "" except docserver.util.NoFileException: tonic = None tonicname = None try: akshara = docserver.util.docserver_get_contents(recording.mbid, "rhythm", "aksharaPeriod") akshara = str(round(float(akshara), 3) * 1000) except docserver.util.NoFileException: akshara = None try: pitchtrackurl = docserver.util.docserver_get_url(recording.mbid, "normalisedpitch", "packedpitch") histogramurl = docserver.util.docserver_get_url(recording.mbid, "normalisedpitch", "drawhistogram") rhythmurl = docserver.util.docserver_get_url(recording.mbid, "rhythm", "aksharaTicks") aksharaurl = docserver.util.docserver_get_url(recording.mbid, "rhythm", "APcurve") except docserver.util.NoFileException: pitchtrackurl = None histogramurl = None rhythmurl = None aksharaurl = None similar = [] try: similar_mbids = search.similar_recordings(recording.mbid) for m in similar_mbids: rec = Recording.objects.get(mbid=m[0]) similar.append(rec) except pysolr.SolrError: # TODO: Show error in similar recordings page instead of empty pass similar = similar[:10] try: concert = recording.concert_set.get() tracks = list(concert.tracks.all()) recordingpos = tracks.index(recording) except Concert.DoesNotExist: concert = None tracks = [] recordingpos = 0 nextrecording = None prevrecording = None if recordingpos > 0: prevrecording = tracks[recordingpos-1] if recordingpos+1 < len(tracks): nextrecording = tracks[recordingpos+1] mbid = recording.mbid ret = {"filter_items": json.dumps(get_filter_items()), "recording": recording, "form": TagSaveForm(), "objecttype": "recording", "objectid": recording.id, "tags": tags, "waveform": wave, "spectrogram": spec, "smallimage": small, "audio": audio, "tonic": tonic, "tonicname": tonicname, "akshara": akshara, "mbid": mbid, "nextrecording": nextrecording, "prevrecording": prevrecording, "pitchtrackurl": pitchtrackurl, "histogramurl": histogramurl, "rhythmurl": rhythmurl, "aksharaurl": aksharaurl, "similar": similar, "concert": concert, } return render(request, "carnatic/recording.html", ret)
def artist(request, uuid): artist = get_object_or_404(Artist, mbid=uuid) inst = artist.instruments() ips = InstrumentPerformance.objects.filter(instrument=inst) similar_artists = [] for i in ips: if i.performer not in similar_artists: similar_artists.append(i.performer) if artist.main_instrument and artist.main_instrument.percussion: taalamap = {} taalacount = collections.Counter() taalas = Taala.objects.filter(Q(work__recording__concert__artists=artist) | Q(work__recording__concert__instrumentconcertperformance__performer=artist) | Q(work__recording__instrumentperformance__performer=artist)) for t in taalas: taalacount[t.name] += 1 if t.name not in taalamap: taalamap[t.name] = t taalas = [] for t, count in taalacount.most_common(): taalas.append((taalamap[t], count)) else: taalas = [] # vocalist or violinist if artist.main_instrument and artist.main_instrument.id in [1, 2]: raagamap = {} raagacount = collections.Counter() raagas = Raaga.objects.filter(Q(work__recording__concert__artists=artist) | Q(work__recording__concert__instrumentconcertperformance__performer=artist) | Q(work__recording__instrumentperformance__performer=artist)) for r in raagas: raagacount[r.name] += 1 if r.name not in raagamap: raagamap[r.name] = r raagas = [] for r, count in raagacount.most_common(): raagas.append((raagamap[r], count)) else: raagas = [] tags = tagging.tag_cloud(artist.id, "artist") musicbrainz = artist.get_musicbrainz_url() k = data.models.SourceName.objects.get(name="kutcheris.com") w = data.models.SourceName.objects.get(name="Wikipedia") kutcheris = None wikipedia = None kr = artist.references.filter(carnatic_artist_source_set=k) if kr.count(): kutcheris = kr[0].uri wr = artist.references.filter(carnatic_artist_source_set=w) if wr.count(): wikipedia = wr[0].uri desc = artist.description if desc and desc.source.source_name == k: kutcheris = artist.description.source.uri elif desc and desc.source.source_name == w: wikipedia = artist.description.source.uri kr = artist.references.filter(source_name=k) if kr.count() and not kutcheris: kutcheris = kr[0].uri wr = artist.references.filter(source_name=w) if wr.count() and not wikipedia: wikipedia = wr[0].uri # Sample is the first track of any of their concerts (Vignesh, Dec 9) concerts = artist.concerts() sample = None if concerts: tracks = concerts[0].tracks.all() if tracks: sample = tracks[0] ret = {"filter_items": json.dumps(get_filter_items()), "artist": artist, "form": TagSaveForm(), "objecttype": "artist", "objectid": artist.id, "tags": tags, "similar_artists": similar_artists, "raagas": raagas, "taalas": taalas, "sample": sample, "mb": musicbrainz, "kutcheris": kutcheris, "wiki": wikipedia } return render(request, "carnatic/artist.html", ret)