Exemple #1
0
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)
Exemple #2
0
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)
Exemple #3
0
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)
Exemple #4
0
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)
Exemple #5
0
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)
Exemple #6
0
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)
Exemple #7
0
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)
Exemple #8
0
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)
Exemple #9
0
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)