In [1]:
from django.utils.text import slugify

cols = Collection.objects.all()

for c in cols:
    slug = slugify(c.title, allow_unicode=True)
    c.slug = slug
    print c.slug
    c.save()


figurate-numbers
triads
descartes-1653
senario
large-numbers
syntonic-diatonic-scale
pythagorean-diatonic-scale
chromatic-scale
temperament
53-tet-53-edo
descartes-diatonic-scale-2
descartes-diatonic-scale-1
descartes-consonance-circle
descartes-hexachords
spiral-and-helix
mesolabio
syntonic-chromatic-scale
tetrachords
descartes-1640
descartes-1635
boethius-triangles
descartes-1683
combinations-kappa-n
microintervals
descartes-1650
descartes-1656
syntonic-grid
descartes-1628
descartes-1668
tetraktys
syntonic-hexachords
hexachords
syntonic-comma
pythagorean-comma

In [7]:
import json
import sys
import os
import requests
import shutil
import operator
from collections import OrderedDict
from requests.auth import HTTPBasicAuth

import tempfile
from django.core.files.base import ContentFile
from django.core.files import File

base = 'http://medienarchiv.zhdk.ch'
collection_id = '73114b11-08de-42a9-ba36-864d9c1b5641'

user = 'sound-colour-space'
password = '95ca2a71-4e01-4477-8e14-b673e96e4fe9'
auth_header = 'Authorization: Basic c291bmQtY29sb3VyLXNwYWNlOjk1Y2EyYTcxLTRlMDEtNDQ3Ny04ZTE0LWI2NzNlOTZlNGZlOQ=='

auth = HTTPBasicAuth(user, password)

#if r.status_code == 200

def get_authors(relations):
    # for each author
    author_objs = []
    for key, values in relations.iteritems():
        a = requests.get(base+values.get('href'), auth=auth).json()
        #print ("\tauthor: %s %s (%s) [%s %s]") % (a.get('first_name'), a.get('last_name'), a.get('pseudonym'), a.get('date_of_birth'), a.get('date_of_death'))
        new_author = { 'first_name': a.get('first_name'), 'last_name': a.get('last_name'), 'pseudonym': a.get('pseudonym'), 'date_of_birth': a.get('date_of_birth'), 'date_of_death': a.get('date_of_death') }
        
        # create or update author
        obj, created = Author.objects.update_or_create(
            remote_uuid=a.get('id'), defaults=new_author)
        author_objs.append(obj) # add to list for update even if existing
        
    return author_objs
        
def get_licenses(relations):
    # for each license
    license_objs = []
    for key, values in relations.iteritems():
        
        l = requests.get(base+values.get('href'), auth=auth).json()
        #print ("\tlicence (%s): %s, %s, %s") % (l.get('id'), l.get('label'), l.get('url'), l.get('usage'))
        
        new_license = { 'remote_uuid': l.get('id'), 'label': l.get('label'), 'url': l.get('url'), 'usage': l.get('usage') }
        # create or update license
        obj, created = License.objects.update_or_create(
            remote_uuid=l.get('id'), defaults=new_license)
        license_objs.append(obj) # add to list for update even if existing
    
    return license_objs
        
        
def get_entry(key, href):
    # get single entry
    entry_request = requests.get(base+href, auth=auth)
    entry = entry_request.json()
    
    print ('Madek: %s') % entry.get('id')
    
    # the updated entry as dict
    new_entry = {}
    
    # get meta data
    meta_data = requests.get(base + href + '/meta-data/', auth=auth)
    meta_data = meta_data.json()
    
    author_objs = []
    license_objs = []

    # iterate over meta-data
    for m in meta_data.get('meta-data'):
        key = m.get('meta_key_id')
        id = m.get('id')
        if (key == 'madek_core:title'):
            title = requests.get(base+'/api/meta-data/'+id, auth=auth).json().get('value')
            #print('madek_core:title: %s') % title
            new_entry['title'] = title
        elif (key == 'madek_core:subtitle'):
            subtitle = requests.get(base+'/api/meta-data/'+id, auth=auth).json().get('value')
            #print('madek_core:subtitle: %s') % subtitle
            new_entry['subtitle'] = subtitle
        elif (key == 'madek_core:portrayed_object_date'):
            portrayed_object_date = requests.get(base+'/api/meta-data/'+id, auth=auth).json().get('value')
            #print('madek_core:portrayed_object_date: %s') % portrayed_object_date
            new_entry['portrayed_object_date'] = portrayed_object_date
        
        elif (key == 'madek_core:authors'):
            authors = requests.get(base+'/api/meta-data/'+id, auth=auth).json().get('_json-roa')['collection']
            #print('madek_core:authors: %s') % authors
            author_objs = get_authors(authors['relations'])
            
        elif (key == 'copyright:license'):    
            licenses = requests.get(base+'/api/meta-data/'+id, auth=auth).json().get('_json-roa')['collection']
            #print('copyright:license: %s') % licenses
            license_objs = get_licenses(licenses['relations']) # will be set at the end of this function
            
        elif (key == 'copyright:source'):
            source = requests.get(base+'/api/meta-data/'+id, auth=auth).json().get('value')
            #print('copyright:source: %s') % source
            new_entry['source'] = source
            
        elif (key == 'copyright:copyright_usage'):
            #print('copyright:copyright_usage: %s') % requests.get(base+'/api/meta-data/'+id, auth=auth).json().get('value')
            pass
        elif (key == 'madek_core:copyright_notice'):
            copyright_notice = requests.get(base+'/api/meta-data/'+id, auth=auth).json().get('value')
            #print('madek_core:copyright_notice: %s') % copyright_notice
            new_entry['copyright_notice'] = copyright_notice
    
    
    # create or update entry
    obj, created = Entry.objects.update_or_create(
        remote_uuid = entry.get('id'), defaults=new_entry)
    
    # save image
    image_href = entry['_json-roa']['relations']['media-file'].get('href')
    image_request = requests.get(base + image_href, auth=auth)
    image = image_request.json()
    image_data_request = requests.get(base + image['_json-roa']['relations']['data-stream']['href'], stream=True, auth=auth)
    
    if image_data_request.status_code == 200:
        f = tempfile.NamedTemporaryFile(delete=False)
        with open(f.name, 'wb') as f:
            image_data_request.raw.decode_content = True
            shutil.copyfileobj(image_data_request.raw, f)
            #for chunk in image_data_request:
            #    f.write(chunk)
            f.close()
        # save entry
        with open(f.name, 'r') as f:
            
            print(image.get('filename'))
            obj.image.save(image.get('filename'), File(f), save=True)
            
        f.close()
        os.unlink(f.name)
            
    # set licenses, authors
    print("Entry: %s") % obj
    obj.license.set(license_objs)
    obj.author.set(author_objs)
    
    return obj
        

def get_collection(key, href):
    # get single entry
    collection_request = requests.get(base+href, auth=auth)
    collection = collection_request.json()
    
    print ('Madek: [%s] %s') % (key, collection.get('id'))
    
    # the updated collection as dict
    new_collection = {}
    
    # get meta data
    meta_data = requests.get(base + href + '/meta-data/', auth=auth)
    meta_data = meta_data.json()
    
    author_objs = []
    
    # iterate over meta-data
    for m in meta_data.get('meta-data'):
        key = m.get('meta_key_id')
        id = m.get('id')
        
        if (key == 'madek_core:title'):
            title = requests.get(base+'/api/meta-data/'+id, auth=auth).json().get('value')
            #print('madek_core:title: %s') % title
            new_collection['title'] = title
        if (key == 'madek_core:subtitle'):
            subtitle = requests.get(base+'/api/meta-data/'+id, auth=auth).json().get('value')
            #print('madek_core:subtitle: %s') % subtitle
            new_collection['subtitle'] = subtitle
        if (key == 'madek_core:description'):
            description = requests.get(base+'/api/meta-data/'+id, auth=auth).json().get('value')
            #print('madek_core:description: %s') % description
            new_collection['description'] = description
        elif (key == 'madek_core:authors'):
            authors = requests.get(base+'/api/meta-data/'+id, auth=auth).json().get('_json-roa')['collection']
            #print('madek_core:authors: %s') % authors
            author_objs = get_authors(authors['relations'])
            for a in author_objs:
                print ("Author: %s") % a.get_full_name()
            
    #print new_collection
    
    # create or update set
    obj, created = Collection.objects.update_or_create(
        remote_uuid = collection.get('id'), defaults=new_collection)
    
    obj.author.set(author_objs)
    
    entry_objs = []
    
    # get entries
    url = base + '/api/media-entries/?collection_id=' + collection.get('id')
    while (True):
        r = requests.get(url, auth=auth)
        entries_data = r.json()['_json-roa']['collection']

        relations = entries_data.get('relations')
        next_page = entries_data.get('next')

        # iterate page
        for key, value in relations.iteritems():

            e = get_entry(key, value.get('href'))
            entry_objs.append(e)
            #print('########################')

        if (next_page == None):
            break
        else:
            url = base + entries_data['next']['href']
            print ("page at: %s") % url
    
    
    obj.entry.set(entry_objs)
    
    print("Collection: %s") % (obj)
    
    
    
#url = base + '/api/media-entries/?collection_id=' + collection_id
url = base + '/api/collections/?collection_id=' + collection_id

while (True):
    r = requests.get(url, auth=auth)

    collection_data = r.json()['_json-roa']['collection']

    relations = collection_data.get('relations')
    next_page = collection_data.get('next')

    # iterate page
    for key, value in relations.iteritems():

        #get_entry(key, value.get('href'))
        get_collection(key, value.get('href'))

        print('########################')

        # sys.exit(0) # exit after first item (debugging)


    if (next_page == None):
        break
    else:
        url = base + collection_data['next']['href']
        print ("page at: %s") % url
    
print('done')


Madek: [10] 6c79ef56-9394-4c6e-80a3-69f53fcf3647
Madek: 572a733b-bdc9-46aa-95ee-9d927bb30e31
1651_Raymundi_Lullii_Opera_omnia_30_TertiaFigura.jpg
Entry: Tertia Figura [74]
Madek: e7ebae8b-18e8-44c1-b50e-b8b1df474068
13xx_odington_walter_CSI_194_1_Tetraktys_Square.jpg
Entry: Tetraktys square [12]
Madek: 3b6a009d-1be5-4e03-bb2b-38e30cc87cd6
1547_glareanus_dodecachordon_Lib_1_025_054_Bisdiapason.jpg
Entry: Bisdiapason - Double Tetraktys [29]
Madek: 39058115-324b-4ad8-9dd5-a5231fa5d5f8
1210_c_PetrusPictaviensis_CottonFaustinaBVII_folio42v_ScutumFidei_early13thc__wikipedia.jpg
Entry: Shield of the Trinity [17]
Madek: de121544-5300-49ea-884d-0a34c75e35e6
1562_zarlino_institutioni_harmoniche_0072_p_061_pentenario_kappa_5.jpg
Entry: Quinario [35]
Madek: 47f114da-3d2c-45ef-9f84-6d3311e38911
1562_zarlino_institutioni_harmoniche_0036_p_025_senario_Circle.jpg
Entry: Senario Circle [32]
Madek: 1fc6a5d1-4227-4e44-85a0-959ac4726e0b
1577_salinas_De_musica_124_chromaticScale.jpg
Entry: Totius harmoniae vis hoc diagrammate fulget [46]
Madek: 61f64d6e-7233-4179-8a49-a08fda63022d
1571_zarlino_dimostrationi_harmoniche_112_1_Tetraktys_6_8_9_12.jpg
Entry: Tetraktys (6 : 8 : 9 : 12) [40]
Madek: 84889511-7d2e-42bf-981c-5d24e5fa8575
1650_descartes_Compendium_13_senario_triangle.jpg
Entry: Senario Triangle [73]
Madek: 11c1942b-4861-4768-89b5-595b2af35121
1577_Salinas_De_musica_230_TriangleOverChromaticScale.jpg
Entry: Triangle over chromatic scale [48]
page at: http://medienarchiv.zhdk.ch/api/media-entries/?collection_id=6c79ef56-9394-4c6e-80a3-69f53fcf3647&page=1
Madek: a86cbcc3-0fb2-411d-a600-27b71955a2c8
1636_mersenne_HarmUniv_TraitezDesConsDiss_Livre_II_DesDissonances_136__chromaticCircleKappa12.jpg
Entry: Syntonic Chromatic Scale [212]
Madek: 6348bdac-a15b-4420-86fe-734705d54bc5
1612_Lippius_Synopsis_musicae_novae_fol_F3r_DiatonicCircle.jpg
Entry: Syntonic diatonic scale on a circle [515]
Madek: 49dc43e2-1613-435b-8dc0-8e9c826485bb
1529_fogliano_Musica_theorica_fol_31v_smallIntervalsAndTheirDifferences.jpg
Entry: Small syntonic intervals and their differences [501]
page at: http://medienarchiv.zhdk.ch/api/media-entries/?collection_id=6c79ef56-9394-4c6e-80a3-69f53fcf3647&page=2
Collection: Combinations: kappa-n
########################
Madek: [1] 3a7f7eea-a8ea-4f96-85bb-00c28c1c077b
Author: René Descartes
Madek: 81be7501-037b-465d-ad13-19c30ef34aea
1650_descartes__consonanceCircle__19_BnF.jpg
Entry: Consonance Circle [None]
Madek: d7caad48-4346-4c41-8972-1d298e343e6e
1650_descartes__diatonicScale_1__32_BnF.jpg
Entry: Diatonic Scale 1 [None]
Madek: d9e9dc0b-615d-49d0-9cd4-cb6f9b50bb9e
1650_descartes__diatonicScale_2__32_BnF.jpg
Entry: Diatonic Scale 2 [None]
Madek: 0859f3c9-69fa-4297-b918-46c9eaf1334e
1650_descartes__hexachords__35_BnF.jpg
Entry: Hexachords [None]
page at: http://medienarchiv.zhdk.ch/api/media-entries/?collection_id=3a7f7eea-a8ea-4f96-85bb-00c28c1c077b&page=1
Collection: Descartes 1650 
########################
Madek: [3] c37d9db6-5b23-42cd-bc9e-a2c23024c337
Author: René Descartes
Madek: c42b3514-79fa-4ca2-ada6-9be03ceb17c9
1656_descartes__consonanceCircle__brockt_1978_20.jpg
Entry: Consonance Circle [329]
Madek: e7a6895a-b672-401e-9dfb-8dfced9e8439
1656_descartes__diatonicScale_2__brockt_1978_36.jpg
Entry: Diatonic Scale 2 [331]
Madek: fad5b7fa-eba5-465a-9c7b-120ce765d979
1656_descartes__diatonicScale_1__brockt_1978_36.jpg
Entry: Diatonic Scale 1 [330]
Madek: 94b61d49-8780-4ef2-9b65-0d2e481d0ecc
1656_descartes__hexachords__brockt_1978_40.jpg
Entry: Hexachords [332]
page at: http://medienarchiv.zhdk.ch/api/media-entries/?collection_id=c37d9db6-5b23-42cd-bc9e-a2c23024c337&page=1
Collection: Descartes 1656 
########################
Madek: [2] adaa8695-bf94-41fd-a0f9-22ef773841fb
Author: René Descartes
Madek: c20de48a-f66c-44cb-8587-91c7f9790a80
1653_descartes__consonanceCircle__en_017.jpg
Entry: Consonance Circle [None]
Madek: 5cf43022-587c-42b6-9e5e-d9118bcf1b7b
1653_descartes__diatonicScale_2_compendium__en_032.jpg
Entry: Diatonic Scale 2 [None]
Madek: 497345d0-6aa5-417a-962d-9429a830f494
1653_descartes__diatonicScale_1__en_032.jpg
Entry: Diatonic Scale 1 [None]
Madek: f1671cd3-bb94-402f-a03a-da177c90c675
1653_descartes_brouncker__consonanceCircle__animadv_070.jpg
Entry: Consonance Circle [325]
Madek: a66f8389-2449-47d3-af63-73f6a69de64a
1653_descartes__hexachords_compendium__en_035.jpg
Entry: Hexachords [None]
Madek: ef156be6-28ac-43fc-9b60-6381beb2bc31
1653_descartes_brouncker__diatonicScale_1_B__animadv_075.jpg
Entry: Diatonic Scale 1 [327]
Madek: 929ad83f-1760-4c9a-bf09-5d6ad926a681
1653_descartes_brouncker__diatonicScale_1_A__animadv_074.jpg
Entry: Diatonic Scale 1 [326]
Madek: 280641ce-c213-4237-b18d-835b74a311dc
1653_descartes_brouncker__diatonicScale_1_C__animadv_076.jpg
Entry: Diatonic Scale 1 [328]
page at: http://medienarchiv.zhdk.ch/api/media-entries/?collection_id=adaa8695-bf94-41fd-a0f9-22ef773841fb&page=1
Collection: Descartes 1653 
########################
Madek: [5] eef91168-33b8-4e76-8bb4-71ed91250d54
Author: René Descartes
Madek: d040e253-8deb-47da-a9d5-35aba03e625e
1628_beeckman__consonanceCircle__MS_Middelburg_167r.jpg
Entry: Consonance Circle [None]
Madek: 3f506cc3-3bfb-48e1-ab66-e57c6099c039
1628_beeckman__diatonicScale_2__MS_Middelburg_171r.jpg
Entry: Diatonic Scale 2 [None]
Madek: f3a4e0f1-888f-43de-9ea8-df2c9b838295
1628_beeckman__diatonicScale_1__MS_Middelburg_171_r.jpg
Entry: Diatonic Scale 1 [None]
Madek: 0ed65d10-1fc7-46c1-9216-89f5f6209d09
1628_beeckman__hexachords__MS_Middelburg_172r.jpg
Entry: Hexachords [None]
page at: http://medienarchiv.zhdk.ch/api/media-entries/?collection_id=eef91168-33b8-4e76-8bb4-71ed91250d54&page=1
Collection: Descartes 1628
########################
Madek: [4] 35ba0bb0-6cf3-40ec-98bd-2fff1a0b8fc0
Author: René Descartes
Madek: 3072f694-340a-48cd-b95a-4d98d35d104d
1668_descartes__consonanceCircle__buzon_2012_078.jpg
Entry: Consonance Circle [333]
Madek: 6cb5e3b6-f0b8-4ae4-bbb4-c50f50d14c83
1668_descartes__diatonicScale_2__buzon_2012_100_B.jpg
Entry: Diatonic Scale 2 [335]
Madek: a2601ae6-447c-4ba7-96f4-e4fb86e6f316
1668_descartes__diatonicScale_1__buzon_2012_100_A.jpg
Entry: Diatonic Scale 1 [334]
Madek: a35abc38-5616-48bb-8dde-495a2aadb7c1
1668_descartes__hexachords__buzon_2012_104.jpg
Entry: Hexachords [336]
page at: http://medienarchiv.zhdk.ch/api/media-entries/?collection_id=35ba0bb0-6cf3-40ec-98bd-2fff1a0b8fc0&page=1
Collection: Descartes 1668 
########################
Madek: [7] 9e2e6cc4-e7fc-4322-bee8-0b59a860a823
Author: René Descartes
Madek: 92d1b51b-0a92-4073-87f7-1cbd2f5dcfc0
1640_descartes__consonanceCircle___MS_Groningen.jpg
Entry: Consonance Circle [None]
Madek: 330c1f71-8e0d-4b89-9b02-ca0324837864
1640_descartes__diatonicScale_2__MS_Groningen.jpg
Entry: Diatonic Scale 2 [None]
Madek: 6476b7a9-a262-4dcb-9d54-b7553f0b994a
1640_descartes__diatonicScale_1__MS_Groningen.jpg
Entry: Diatonic Scale 1 [None]
Madek: 2f7b5893-c03c-4963-953c-9f9d53c991d0
1640_descartes__hexachords__MS_Groningen.jpg
Entry: Hexachords [None]
page at: http://medienarchiv.zhdk.ch/api/media-entries/?collection_id=9e2e6cc4-e7fc-4322-bee8-0b59a860a823&page=1
Collection: Descartes 1640
########################
Madek: [6] 5a7aa57b-d9ad-40b1-99ea-ac98a4988d19
Author: René Descartes
Madek: 853619a7-40fe-40a1-86aa-a65291445d69
1635_descartes__consonanceCircle__MS_Leiden_ublwhs_hug_29_a_f042v.jpg
Entry: Consonance Circle [None]
Madek: b071d589-c1c4-4a58-9d93-e146639f7f6b
1635_descartes__diatonicscale_2__MS_Leiden_ublwhs_hug_29_a_f047v.jpg
Entry: Diatonic Scale 2 [None]
Madek: 55e53716-6e8f-4f15-818a-cca742a4f37a
1635_descartes__diatonicScale_1__MS_Leiden_ublwhs_hug_29_a_f047v.jpg
Entry: Diatonic Scale 1 [None]
Madek: 1e5c4105-12a7-4976-a1d5-9a22ce9498ff
1635_descartes__hexachords__MS_Leiden_ublwhs_hug_29_a_f048v.jpg
Entry: Hexachords [None]
page at: http://medienarchiv.zhdk.ch/api/media-entries/?collection_id=5a7aa57b-d9ad-40b1-99ea-ac98a4988d19&page=1
Collection: Descartes 1635 
########################
Madek: [9] 8c6af4ef-a2dd-471c-b5c4-6327b2d1af18
Madek: 0f06a5ec-d766-4ff5-aa4e-9e7f0f1a4647
1739_Euler__Tentamen_279_ChromScalePowers.jpg
Entry: Chromatic Scale Powers [95]
Madek: 15682539-c0cc-406c-b3f8-3822c5ac4dc1
09xx_Boethius_DeInstitutioneArithmetica_Mh_1_f_4r_detail_02.jpg
Entry: Number triangle (2 : 3) [1]
Madek: 0b9482da-0570-4984-bb0a-46fc3dfe9437
09xx_Boethius_DeInstitutioneArithmetica_Mh_1_f_4v_detail_02.jpg
Entry: Number triangle (4 : 5) [3]
Madek: b8d41539-f57c-4792-946a-6aa5b06c6a0c
09xx_Boethius_DeInstitutioneArithmetica_Mh_1_f_4v_detail_01.jpg
Entry: Number triangle (3 : 4) [2]
Madek: c46e4003-571f-43c7-980a-541a33410830
13xx_torkesey__Declaratio_trianguli_et_scuti_vatlib_it_mss_reg_lat_1146_55v_triangle_detail.jpg
Entry: Triangular grid of durations [16]
Madek: add71817-bc40-4470-b86b-9acc7a04c160
13xx_odington_walter_CSI_187_4_NumberTriangle_8_9.jpg
Entry: Number triangle (8 : 9) [11]
Madek: 9601411b-3407-4203-b98e-858f0bff3e58
1624_fludd_uch_1_0434_Tract_II_Part_II_Lib_IV_204_lowerTriangle.jpg
Entry: Triangle of durations [71]
Madek: 377c5fa2-370a-4bf0-beaa-c580b5390ca5
1624_fludd_eod_uch_1_Tract_II_Part_II_Lib_I_161_ad_templum_detail_triangles.jpg
Entry: Triangular diagrams [62]
Madek: c7f6e83a-17df-466a-9ce2-ec87e886d47b
1739_Euler__Tentamen_147_ChromaticScale.jpg
Entry: Chromatic Scale [94]
Madek: 711f380f-2764-45e9-896d-00025c9d9de3
1726_rameau__NouveauSysteme_24_TableDesProgressions.jpg
Entry: Table des Progressions [93]
page at: http://medienarchiv.zhdk.ch/api/media-entries/?collection_id=8c6af4ef-a2dd-471c-b5c4-6327b2d1af18&page=1
Collection: Boethius triangles
########################
Madek: [8] 9ae74adf-0405-4739-8e9e-30b591aab510
Author: René Descartes
Madek: 45834bc2-2415-428a-ae96-495ef9cd1089
1683_descartes__consonanceCircle__17_pdf_172.jpg
Entry: Consonance Circle [None]
Madek: 411df630-54c1-4550-9dc2-9348c0d3df63
1683_descartes__diatonicScale_2__28_pdf_174.jpg
Entry: Diatonic Scale 2 [None]
Madek: 755ed51e-b9ca-4857-bc2b-24eacec27cce
1683_descartes__hexachords__30_pdf_165.jpg
Entry: Hexachords [None]
Madek: 7af7540f-ad96-4dd0-9065-dab3276c8c93
1683_descartes__diatonicScale_1__28_pdf_174.jpg
Entry: Diatonic Scale 1 [None]
page at: http://medienarchiv.zhdk.ch/api/media-entries/?collection_id=9ae74adf-0405-4739-8e9e-30b591aab510&page=1
Collection: Descartes 1683 
########################
page at: http://medienarchiv.zhdk.ch/api/collections/?collection_id=73114b11-08de-42a9-ba36-864d9c1b5641&page=1
Madek: [11] dd69af60-aaa9-4929-9ce9-d8715ed86a41
Madek: 711f380f-2764-45e9-896d-00025c9d9de3
1726_rameau__NouveauSysteme_24_TableDesProgressions.jpg
Entry: Table des Progressions [93]
Madek: 0f06a5ec-d766-4ff5-aa4e-9e7f0f1a4647
1739_Euler__Tentamen_279_ChromScalePowers.jpg
Entry: Chromatic Scale Powers [95]
Madek: c7f6e83a-17df-466a-9ce2-ec87e886d47b
1739_Euler__Tentamen_147_ChromaticScale.jpg
Entry: Chromatic Scale [94]
Madek: 3b98e4f4-e788-4d96-a26b-45230d17907e
1917_oettingen__Grundlagen_der_Musikwissenschaft_176_chi53.jpg
Entry: Syntonic tone system with 53 pitch classes [558]
page at: http://medienarchiv.zhdk.ch/api/media-entries/?collection_id=dd69af60-aaa9-4929-9ce9-d8715ed86a41&page=1
Collection: Syntonic grid
########################
Madek: [13] 7508412a-0ee1-46b4-8c7f-c5578542912a
Madek: f6645267-83da-41e3-918e-6a6e50eb9b79
09xx_Boethius_DeInstitutioneArithmetica_Mh_1_f_8v_detail_02_a.jpg
Entry: Figurate numbers (1) [6]
Madek: 31a3a582-ff97-436b-9fe2-0f8ae6c58bdd
09xx_Boethius_DeInstitutioneArithmetica_Mh_1_f_8v_detail_02_b.jpg
Entry: Figurate numbers (2) [7]
page at: http://medienarchiv.zhdk.ch/api/media-entries/?collection_id=7508412a-0ee1-46b4-8c7f-c5578542912a&page=1
Collection: Figurate numbers
########################
Madek: [12] 61ae9c58-d292-48e7-8c1f-33c3c93576b9
Madek: 22ceec79-0ecd-4da3-849d-86491ed9a834
1617_fludd_uch_1_0092_Tract_I_Lib_III_084_doubleTetraktys.jpg
Entry: Double Tetraktys [53]
Madek: ca02b832-6db2-402a-b123-0f9a77507fc0
09xx_Boethius_DeInstitutioneArithmetica_Mh_1_f_8v_detail_01_a.jpg
Entry: Tetrahedron [4]
Madek: 31a3a582-ff97-436b-9fe2-0f8ae6c58bdd
09xx_Boethius_DeInstitutioneArithmetica_Mh_1_f_8v_detail_02_b.jpg
Entry: Figurate numbers (2) [7]
Madek: b5f07222-ce22-4d75-a102-a0aff0402bf4
09xx_Boethius_DeInstitutioneArithmetica_Mh_1_f_8v_detail_01_b.jpg
Entry: Tetrahedron (detail) [5]
Madek: 311d0455-6c2d-487e-8162-7cb214d5c540
1510_raffael_schule-von-athen-pythagoras_2006_Lauenstein_017.jpg
Entry: Tetraktys [None]
Madek: e7ebae8b-18e8-44c1-b50e-b8b1df474068
13xx_odington_walter_CSI_194_1_Tetraktys_Square.jpg
Entry: Tetraktys square [12]
Madek: ed0852f8-6e97-4a5d-9a3c-cfb60d5741d6
1529_Agricola_Martin__TetraktysHammers_gouk_138_4_29.jpg
Entry: Tetraktys Hammers [23]
Madek: 659d55cc-88b7-4186-b59f-370f8e6e7601
1528_agricola_martin__tetraktys_hammers_116.jpg
Entry: Tetraktys Hammers [22]
Madek: 61f64d6e-7233-4179-8a49-a08fda63022d
1571_zarlino_dimostrationi_harmoniche_112_1_Tetraktys_6_8_9_12.jpg
Entry: Tetraktys (6 : 8 : 9 : 12) [40]
Madek: d2d40264-c4da-4594-8467-84552b96b31c
1529_fogliano_tetraktys.jpg
Entry: Monochord: Tetraktys [25]
page at: http://medienarchiv.zhdk.ch/api/media-entries/?collection_id=61ae9c58-d292-48e7-8c1f-33c3c93576b9&page=1
Madek: 23509c3f-99ff-4d32-a9fc-cb8b193d330a
1617_fludd_uch_1_0097_Tract_I_Lib_III_089_doubleCone_Tetraktys.jpg
Entry: Double Cone Tetraktys [54]
Madek: 3817deed-b7af-4a59-aa37-17cbcd92bf31
1495_de_Podio_Guillermus_Ars_musicorum_Liber_III_XXI_tetractys.jpg
Entry: Tetractys [403]
Madek: 02ab651b-fffa-4eb4-875f-50b7c2132ad4
1617_fludd_uch_1_0174_Tract_I_Lib_V_164_lambdaTetrakys.jpg
Entry: Lambda Tetrakys [59]
Madek: bfae1cb2-7139-4c7b-bd08-8aafc354205a
1514_cochlaeus_Tetrachordum_musices_tract_I_fol_A4v_TwoSemitones.jpg
Entry: Two semitones [498]
page at: http://medienarchiv.zhdk.ch/api/media-entries/?collection_id=61ae9c58-d292-48e7-8c1f-33c3c93576b9&page=2
Collection: Tetraktys
########################
Madek: [15] eee5943c-3977-4834-baa3-039460e253c9
Madek: 0859f3c9-69fa-4297-b918-46c9eaf1334e
1650_descartes__hexachords__35_BnF.jpg
Entry: Hexachords [None]
Madek: 0ed65d10-1fc7-46c1-9216-89f5f6209d09
1628_beeckman__hexachords__MS_Middelburg_172r.jpg
Entry: Hexachords [None]
Madek: 2f7b5893-c03c-4963-953c-9f9d53c991d0
1640_descartes__hexachords__MS_Groningen.jpg
Entry: Hexachords [None]
Madek: 1e5c4105-12a7-4976-a1d5-9a22ce9498ff
1635_descartes__hexachords__MS_Leiden_ublwhs_hug_29_a_f048v.jpg
Entry: Hexachords [None]
Madek: 94b61d49-8780-4ef2-9b65-0d2e481d0ecc
1656_descartes__hexachords__brockt_1978_40.jpg
Entry: Hexachords [332]
Madek: a66f8389-2449-47d3-af63-73f6a69de64a
1653_descartes__hexachords_compendium__en_035.jpg
Entry: Hexachords [None]
Madek: c3abd9d8-d2b0-4a20-b121-10372cccca35
1665_newton__manus_230_109r_detail_01.jpg
Entry: Diatonic circles (1) [80]
Madek: a35abc38-5616-48bb-8dde-495a2aadb7c1
1668_descartes__hexachords__buzon_2012_104.jpg
Entry: Hexachords [336]
Madek: 755ed51e-b9ca-4857-bc2b-24eacec27cce
1683_descartes__hexachords__30_pdf_165.jpg
Entry: Hexachords [None]
Madek: b15d538c-802f-49a4-9ffb-754046e3ec85
1665_newton__manus_231_109v_detail_01.jpg
Entry: Diatonic circles (2) [81]
page at: http://medienarchiv.zhdk.ch/api/media-entries/?collection_id=eee5943c-3977-4834-baa3-039460e253c9&page=1
Collection: Syntonic hexachords
########################
Madek: [14] 3368b90a-4815-4de7-9246-357454228e76
Madek: 71970d67-2cdf-4cdb-8d03-d19cc0fce0a7
1562_zarlino_institutioni_harmoniche_0115_p_104_hexachords.jpg
Entry: Hexachords [36]
Madek: 0ed65d10-1fc7-46c1-9216-89f5f6209d09
1628_beeckman__hexachords__MS_Middelburg_172r.jpg
Entry: Hexachords [None]
Madek: 2f7b5893-c03c-4963-953c-9f9d53c991d0
1640_descartes__hexachords__MS_Groningen.jpg
Entry: Hexachords [None]
Madek: 1e5c4105-12a7-4976-a1d5-9a22ce9498ff
1635_descartes__hexachords__MS_Leiden_ublwhs_hug_29_a_f048v.jpg
Entry: Hexachords [None]
Madek: 94b61d49-8780-4ef2-9b65-0d2e481d0ecc
1656_descartes__hexachords__brockt_1978_40.jpg
Entry: Hexachords [332]
Madek: a66f8389-2449-47d3-af63-73f6a69de64a
1653_descartes__hexachords_compendium__en_035.jpg
Entry: Hexachords [None]
Madek: ef7ba6b1-4962-4c3c-bfaf-a1fc8ed05149
13xx_odington_walter_CSI_216_Hexachords.jpg
Entry: Hexachords [15]
Madek: 81e3951b-9b8c-4532-867c-c186115589fc
10xx__Ut_queant_laxis__Bayerische_Staatsbibliothek_Clm_14965a_fol_30_hexachords_wikipedia.png
Entry: Ut queant laxis [9]
Madek: fd40a1b1-2e9d-47e2-889c-66f0180ab847
1547_glareanus_dodecachordon_Lib_1_004_034_hexachords.jpg
Entry: Hexachords [28]
Madek: e86a6b48-2603-4881-a564-e3ff5bebc972
1506_Kleinspeck_michael__Lilium_musice_plane_musicologie_org_hexachords.jpg
Entry: Lilium Musice Plane [19]
page at: http://medienarchiv.zhdk.ch/api/media-entries/?collection_id=3368b90a-4815-4de7-9246-357454228e76&page=1
Madek: 97fd7229-a08e-42b1-945e-da6bc807c49b
1571_zarlino_dimostrationi_harmoniche_278_nomi_moderni_ed_antichi.jpg
Entry: Nomi Moderni ed Antichi [42]
Madek: 7628c860-0308-4393-ae71-eb82aa99a786
1624_fludd_eod_uch_1_tract_ii_part_ii_lib_i_161_ad_templum_detail_hexachords.jpg
Entry: Hexachords [61]
Madek: 154a7917-984b-4363-b520-b16e3d659548
1577_Salinas_De_musica_195_RecentiorumHexachordaCumAntiqorumTetrachordis.jpg
Entry: Recentiorum hexachorda cum antiquorum tetrachordis [47]
Madek: c3abd9d8-d2b0-4a20-b121-10372cccca35
1665_newton__manus_230_109r_detail_01.jpg
Entry: Diatonic circles (1) [80]
Madek: 795898a8-c1ac-4951-b890-c4a82a118cd9
1624_fludd_eod_uch_1_Tract_II_Part_II_Lib_I_161_ad_templum.jpg
Entry: Templum musicae [60]
Madek: 755ed51e-b9ca-4857-bc2b-24eacec27cce
1683_descartes__hexachords__30_pdf_165.jpg
Entry: Hexachords [None]
Madek: b15d538c-802f-49a4-9ffb-754046e3ec85
1665_newton__manus_231_109v_detail_01.jpg
Entry: Diatonic circles (2) [81]
Madek: 0859f3c9-69fa-4297-b918-46c9eaf1334e
1650_descartes__hexachords__35_BnF.jpg
Entry: Hexachords [None]
page at: http://medienarchiv.zhdk.ch/api/media-entries/?collection_id=3368b90a-4815-4de7-9246-357454228e76&page=2
Collection: Hexachords
########################
Madek: [17] 05ce654e-aff8-4cf5-bfb0-46cdb687f685
Madek: 04d38c30-53a6-49f7-bf57-15373ad42f35
1529_fogliano_Musica_theorica_fol_34v_syntonicChromaticAndDiatonicScale.jpg
Entry: Syntonic diatonic and chromatic scale [502]
Madek: b5ed877a-8c12-41d8-a655-7a56f60eddcb
1562_zarlino_institutioni_harmoniche_0141_p_130_distributionOfThe Comma.jpg
Entry: Distribution of the Comma [None]
Madek: 5fd75bbb-4582-4adb-a5ed-8a9f3c33b7f9
1577_Salinas_De_musica_113_diatonicScale.jpg
Entry: Diatonic Scale [45]
Madek: 51b28885-a619-455f-9f6f-57de6c503975
1571_zarlino_dimostrationi_harmoniche_284_TemperamentoMonochordoRegolareDiatonico.jpg
Entry: Temperamento del Monochordo Regolare Diatonico [43]
Madek: 0befcbd7-094b-4923-85b3-ee7fc5bb93db
1680_PhiloMus_A_B__Synopsis_of_Vocal_Musick_1.jpg
Entry: Diatonic scales: F major and C major [89]
Madek: 11c1942b-4861-4768-89b5-595b2af35121
1577_Salinas_De_musica_230_TriangleOverChromaticScale.jpg
Entry: Triangle over chromatic scale [48]
Madek: e00129d7-7e38-4c3c-830a-bf677b978d96
1731_Holder_William__A_Treatise_of_the_natural_grounds_080_53tet_intervals.jpg
Entry: 53-tet Intervals [221]
Madek: 4ee1c9ad-aaf9-417a-a982-e531b719f975
1636_mersenne_HarmUniv_TraitezDesConsDiss_Livre_II_DesDissonances_123__9SyntComas.jpg
Entry: 9 Syntonic commas [210]
Madek: 49dc43e2-1613-435b-8dc0-8e9c826485bb
1529_fogliano_Musica_theorica_fol_31v_smallIntervalsAndTheirDifferences.jpg
Entry: Small syntonic intervals and their differences [501]
Madek: d7caad48-4346-4c41-8972-1d298e343e6e
1650_descartes__diatonicScale_1__32_BnF.jpg
Entry: Diatonic Scale 1 [None]
page at: http://medienarchiv.zhdk.ch/api/media-entries/?collection_id=05ce654e-aff8-4cf5-bfb0-46cdb687f685&page=1
Madek: 0587155b-8151-4c79-8a03-bff96c92e5ca
1529_fogliano_Musica_theorica_fol_36r_bisectionOfSyntonicComma.jpg
Entry: Bisection of the syntonic comma [503]
Madek: c7660c84-d266-4cb0-ac92-e938d11f5dab
1581_galilei_vincenzo_dialogodellamusicaanticaedellamoderna_045.jpg
Entry: Pythagorean and syntonic comma [506]
Madek: 2e5d7bb9-3dc3-4ac5-bc2c-415d3f4d3186
1581_Galilei_Vincenzo_DialogoDellaMusicaAnticaEDellaModerna_045__WrongPythagoreanAndSyntonicComma.jpg
Entry: Comparison of the Pythagorean with the syntonic comma [507]
page at: http://medienarchiv.zhdk.ch/api/media-entries/?collection_id=05ce654e-aff8-4cf5-bfb0-46cdb687f685&page=2
Collection: Syntonic comma
########################
Madek: [16] bf76343a-1c17-4c32-b49a-19ce86c459da
Madek: bfae1cb2-7139-4c7b-bd08-8aafc354205a
1514_cochlaeus_Tetrachordum_musices_tract_I_fol_A4v_TwoSemitones.jpg
Entry: Two semitones [498]
Madek: add71817-bc40-4470-b86b-9acc7a04c160
13xx_odington_walter_CSI_187_4_NumberTriangle_8_9.jpg
Entry: Number triangle (8 : 9) [11]
Madek: 1cff9bdb-0bae-476a-a5e0-26ea8a1fd794
1544_stifel__arithmetica_integra_e_rara_ethbib_de_musicis_progressionibus_cap_ix_75v_detail.jpg
Entry: Pythagorean Semitone and Pythagorean Commas (detail) [27]
Madek: 0930f157-348c-4bd4-a8cb-22d0f4ee448f
13xx_odington_walter_CSI_197_SizeOfPythagoreanComma.jpg
Entry: Size of Pythagorean Comma [13]
Madek: 408f16e5-9912-41cc-b3f5-3506997cf538
1547_glareanus_dodecachordon_Lib_1_028_058_tonus.jpg
Entry: Division of the Tone (8 : 9) [30]
Madek: 8fd02f56-d78f-4e93-9028-384bbe8d8f18
1544_Stifel__Arithmetica_integra_E_Rara_ETHBib_De_musicis_progressionibus_Cap_IX_75v.jpg
Entry: Pythagorean Semitone and Pythagorean Commas [26]
Madek: cd9d10a0-72d2-42c6-a378-5e1187860050
1551_Stapul_Jac_Fabrum__Musica_LibrisQuatuorDemonstrata_pdf_050.jpg
Entry: Comparison of the Pythagorean comma with the Pythagorean semitone [405]
Madek: 20df2d4e-50cd-4b57-a6ab-56ca4e15d038
1495_de_Podio_Guillermus_Ars_musicorum_Liber_III_XXVIII_tritonus.jpg
Entry: Tritonus [404]
Madek: bb98ce51-3a70-4262-bddb-422275b3c86d
1323_De_Muris_Johannes__Musica_speculativa_fol_107v_TonusMicrodivision.jpg
Entry: Division of the tone into small intervals [495]
Madek: a2b409e9-ebd8-434e-84c9-0541c8b8b2fa
1323_De_Muris_Johannes__Musica_speculativa_fol_099r_QuinqueToniBisDiatesseron.jpg
Entry: Comparison of five tones with two fourths [494]
page at: http://medienarchiv.zhdk.ch/api/media-entries/?collection_id=bf76343a-1c17-4c32-b49a-19ce86c459da&page=1
Madek: 93dee41d-fb43-4691-bc34-9547a8621f16
1518_Gaffurio__De_harmonia_musicorum_instrumentorum_opus_Lib_II_fol_60v_SexTonisDiapason.jpg
Entry: Comparison of six tones with the octave [500]
Madek: 93486e5e-e2bf-4a4d-a5fc-0b4ee593fa08
1581_Galilei_Vincenzo_DialogoDellaMusicaAnticaEDellaModerna_045__WrongPythagoreanComma.jpg
Entry: Calculation of the Pythagorean Comma [508]
Madek: 2e5d7bb9-3dc3-4ac5-bc2c-415d3f4d3186
1581_Galilei_Vincenzo_DialogoDellaMusicaAnticaEDellaModerna_045__WrongPythagoreanAndSyntonicComma.jpg
Entry: Comparison of the Pythagorean with the syntonic comma [507]
page at: http://medienarchiv.zhdk.ch/api/media-entries/?collection_id=bf76343a-1c17-4c32-b49a-19ce86c459da&page=2
Collection: Pythagorean comma
########################
Madek: [19] db7268c1-e8f0-458e-9686-d22bb932d0c9
Madek: 0241cf31-60ef-438f-b2d2-9b0322977053
1704_newton_Opticks_Book_I_Part_II_Plate_1_Fig_4_monochordSpectre.jpg
Entry: Monochord Spectre [92]
Madek: 497345d0-6aa5-417a-962d-9429a830f494
1653_descartes__diatonicScale_1__en_032.jpg
Entry: Diatonic Scale 1 [None]
Madek: 01cadfc4-9827-4945-99fc-fa0289249059
1562_zarlino_institutioni_harmoniche_0133_p_122_syntonicDiatonicScale.jpg
Entry: Syntonic Diatonic Scale [37]
Madek: 5cf43022-587c-42b6-9e5e-d9118bcf1b7b
1653_descartes__diatonicScale_2_compendium__en_032.jpg
Entry: Diatonic Scale 2 [None]
Madek: 5fd75bbb-4582-4adb-a5ed-8a9f3c33b7f9
1577_Salinas_De_musica_113_diatonicScale.jpg
Entry: Diatonic Scale [45]
Madek: 03af9848-77b7-4b32-a695-abf7a54f8d1c
1571_zarlino_dimostrationi_harmoniche_219_MonochordoRegolareDiatonico.jpg
Entry: Monochordo Regolare Diatonico [41]
Madek: 0befcbd7-094b-4923-85b3-ee7fc5bb93db
1680_PhiloMus_A_B__Synopsis_of_Vocal_Musick_1.jpg
Entry: Diatonic scales: F major and C major [89]
Madek: c0c699d0-d888-452c-96e4-34b7fb4b4c06
1672_Salmon_1213_WhirligigOctaveCircle_gouk_130_4_16_detail.jpg
Entry: Whirligig Octave Circle [84]
Madek: ed71dd26-1faf-4dda-8d51-a524c1ebd80d
1684_anonymous__themusicallcompass_herissone_2000_musictheory_085.jpg
Entry: The Musicall Compass [91]
Madek: 0d7afa09-6dea-44f5-8027-f1ca74b0df6e
1680_PhiloMus_A_B__Synopsis_of_Vocal_Musick_2.jpg
Entry: Diatonic scale: microtonal graduation [90]
page at: http://medienarchiv.zhdk.ch/api/media-entries/?collection_id=db7268c1-e8f0-458e-9686-d22bb932d0c9&page=1
Madek: 4db85fea-79c3-408e-82d3-b28156622ea4
1636_mersenne_HarmUniv_TraitezDesConsDiss_Livre_I_DesConsonances_004__3octavesSyntPyth.jpg
Entry: Syntonic and Pythagorean Diatonic Scale [208]
Madek: e247796b-1783-4279-be74-0859e7d2b117
1702_Salmon_ThePracticalTheory_BritishLibrary_Add_MS_4919_fol_6r_02_SyntonicDiatonicScale.jpg
Entry: Syntonic Diatonic Scale [216]
Madek: 23e05201-d1cf-41a5-8880-e3eaf78e74b9
1636_mersenne_HarmUniv_TraitezDesConsDiss_Livre_I_DesConsonances_050__SyntonicDiatonicScaleSolmization.jpg
Entry: Termes radicaux des degrez de l'octave [209]
Madek: 875e356e-abb3-4d25-8d5e-f1c0844916da
1731_Holder_William__A_Treatise_of_the_natural_grounds_ad_118_ChromaticScale.jpg
Entry: Chromatic Scale [222]
Madek: 5152f5c2-8cb9-4d15-ba28-2e643d36ee6a
1705_Salmon_TheTheoryOfMusickReduced_2041_RoyalSocietyOfLondon_SyntonicDiatonicAndChromaticScale.jpg
Entry: Syntonic Diatonic and Chromatic Scale [217]
Madek: d7caad48-4346-4c41-8972-1d298e343e6e
1650_descartes__diatonicScale_1__32_BnF.jpg
Entry: Diatonic Scale 1 [None]
Madek: d9e9dc0b-615d-49d0-9cd4-cb6f9b50bb9e
1650_descartes__diatonicScale_2__32_BnF.jpg
Entry: Diatonic Scale 2 [None]
Madek: 6348bdac-a15b-4420-86fe-734705d54bc5
1612_Lippius_Synopsis_musicae_novae_fol_F3r_DiatonicCircle.jpg
Entry: Syntonic diatonic scale on a circle [515]
Madek: 04d38c30-53a6-49f7-bf57-15373ad42f35
1529_fogliano_Musica_theorica_fol_34v_syntonicChromaticAndDiatonicScale.jpg
Entry: Syntonic diatonic and chromatic scale [502]
page at: http://medienarchiv.zhdk.ch/api/media-entries/?collection_id=db7268c1-e8f0-458e-9686-d22bb932d0c9&page=2
Collection: Syntonic diatonic scale
########################
Madek: [18] bd276158-70b2-485a-b83f-016514226e8d
Madek: 7ea365bc-f09d-4de2-be43-e6c3eb2a8f90
1495_de_Podio_Guillermus_Ars_musicorum_Liber_III_XX_diatonicScaleTwoOctaves.jpg
Entry: Diatonic Scale, Two Octaves [402]
Madek: 742b0988-bb6f-48c0-88dc-f74fa29ce988
1498_Heritius_Erasmus__MusicaSpeculativa_7r_HERSPE_01GF_diatonicScale.gif
Entry: Diatonic Scale - 12 Semitones [18]
Madek: fd40a1b1-2e9d-47e2-889c-66f0180ab847
1547_glareanus_dodecachordon_Lib_1_004_034_hexachords.jpg
Entry: Hexachords [28]
Madek: e86a6b48-2603-4881-a564-e3ff5bebc972
1506_Kleinspeck_michael__Lilium_musice_plane_musicologie_org_hexachords.jpg
Entry: Lilium Musice Plane [19]
Madek: 154a7917-984b-4363-b520-b16e3d659548
1577_Salinas_De_musica_195_RecentiorumHexachordaCumAntiqorumTetrachordis.jpg
Entry: Recentiorum hexachorda cum antiquorum tetrachordis [47]
Madek: 71970d67-2cdf-4cdb-8d03-d19cc0fce0a7
1562_zarlino_institutioni_harmoniche_0115_p_104_hexachords.jpg
Entry: Hexachords [36]
Madek: fc0e2729-a72d-48a5-a821-6415d797850d
1200_c_d_mu_8_cod_375_cim_13_p_094__guido_micrologus_088_diatonicScale.jpg
Entry: Diatonic Scale [201]
Madek: 62d17b76-433b-4e98-9e2d-134771cc466c
1200_c_d_mu_8_cod_375_cim_13_p_093__guido_micrologus_087_diatonicScale.jpg
Entry: Diatonic Scale [200]
Madek: 4db85fea-79c3-408e-82d3-b28156622ea4
1636_mersenne_HarmUniv_TraitezDesConsDiss_Livre_I_DesConsonances_004__3octavesSyntPyth.jpg
Entry: Syntonic and Pythagorean Diatonic Scale [208]
Madek: 64444300-71d0-45f9-8297-3fa9a15d19a1
1498_heritius_ub_muennchen_4_cod_ms_752_fol_7r_detail.jpg
Entry: Perfect and Imperfect Consonances [203]
page at: http://medienarchiv.zhdk.ch/api/media-entries/?collection_id=bd276158-70b2-485a-b83f-016514226e8d&page=1
Madek: 2aab1772-4766-45a4-b3d3-b4e65278bdfc
1492_Gaffurio__Theorica_musicae_fol_056v_diatonicScale.jpg
Entry: Diatonic Scale [497]
page at: http://medienarchiv.zhdk.ch/api/media-entries/?collection_id=bd276158-70b2-485a-b83f-016514226e8d&page=2
Collection: Pythagorean diatonic scale
########################
Madek: [20] ad155d64-22e2-4202-84d1-881555133158
Madek: 9d4bc00c-494e-41c5-a7e2-dde04f6a27cb
1581_Galilei_Vincenzo_DialogoDellaMusicaAnticaEDellaModerna_052__13Tuoni_Aristosseno.jpg
Entry: Dimostratione de' tredici Tuoni, secondo la mente d'Aristosseno [509]
Madek: 40598852-99eb-4c10-835c-1e4d728c0fad
1614_beekman_JIB_I_Fol_14_r_stevin_chromaticScale.jpg
Entry: Chromatic Scale [49]
Madek: 36804e03-c82e-404d-b611-91e1a0e8ee8d
1665_newton__manus_225_106v_detail_01.jpg
Entry: Geometric and Syntonic Division of the Octave [76]
Madek: fa6d5d2d-1212-42b4-a839-ab362016d100
1665_newton__manus_223_105v_detail_01.jpg
Entry: Syntonic Chromatic Scale Measured by 12tet Semitones [75]
Madek: c5ebc7c0-6882-4521-9df3-b79cb726f0f9
1636_mersenne_HarmUniv_PremierePreface_noPages__12tet_chromaticScale.jpg
Entry: Table pour les facteurs d'instrumens [207]
Madek: 64444300-71d0-45f9-8297-3fa9a15d19a1
1498_heritius_ub_muennchen_4_cod_ms_752_fol_7r_detail.jpg
Entry: Perfect and Imperfect Consonances [203]
Madek: b9a1711c-b9a2-4657-9247-87f9f2a9223c
1702_Salmon_ThePracticalTheory_BritishLibrary_Add_MS_4919_fol_6r_01_NonStandardDivOfOctave.jpg
Entry: Non-Standard Division of the Octave [215]
Madek: 574afcc6-ab90-434f-856d-56c465fbb4ac
1636_mersenne_HarmUniv_TraitezDesConsDiss_Livre_II_DesDissonances_132__ChromaticScale_12tetSyntonic.jpg
Entry: 12-tet and Syntonic Chromatic Scale [211]
Madek: fdfcda4d-a6fb-4cb6-8c67-dff0bfaea853
1705_Salmon_TheTheoryOfMusickReduced_Foldout_RoyalSocietyOfLondon_LuteTuning.jpg
Entry: Lute Tuning [218]
Madek: 5152f5c2-8cb9-4d15-ba28-2e643d36ee6a
1705_Salmon_TheTheoryOfMusickReduced_2041_RoyalSocietyOfLondon_SyntonicDiatonicAndChromaticScale.jpg
Entry: Syntonic Diatonic and Chromatic Scale [217]
page at: http://medienarchiv.zhdk.ch/api/media-entries/?collection_id=ad155d64-22e2-4202-84d1-881555133158&page=1
Madek: ea317eaf-808b-4e3a-9351-3ba3861e0673
1581_Galilei_Vincenzo_DialogoDellaMusicaAnticaEDellaModerna_058__8Tuoni_Boethius.jpg
Entry: Dimostratione degli otto Tuoni, secondo la mente di Boethio [510]
Madek: fa55dd0f-2f2b-4542-aea6-d7a442c0a6d0
1588_zarlino_SopplimentiMusicali_lib_IV_202.jpg
Entry: Dodeci Semituoni di proportione Sesquidecimasettima non adempiano perfettamente la Diapason [550]
Madek: 9b9653e8-a433-483f-8871-7d86916032c6
1624_fludd_uch_1_0462_Tract_II_Part_II_Lib_VI_232_transpositionWheel.jpg
Entry: Transposition wheel for the lute [516]
Madek: d0ff71c9-1f36-481c-abc4-0cb1eff4f59a
1588_zarlino_SopplimentiMusicali_lib_IV_209.jpg
Entry: Consonantiae Diapason in Duodecim Partes Aequalis Divisio [552]
Madek: 798b2e91-4c45-4472-9bb6-ef6047b59a6b
1588_zarlino_SopplimentiMusicali_lib_IV_205.jpg
Entry: Dodeci Semituoni di proportione Sesquidecimasettima non fanno una Diapason perfetta [551]
page at: http://medienarchiv.zhdk.ch/api/media-entries/?collection_id=ad155d64-22e2-4202-84d1-881555133158&page=2
Collection: Chromatic scale
########################
page at: http://medienarchiv.zhdk.ch/api/collections/?collection_id=73114b11-08de-42a9-ba36-864d9c1b5641&page=2
Madek: [24] b95a1542-a6cb-498f-ac76-84f410f9bd56
Madek: 1f324176-fc64-417d-82c7-35ef8aedb641
1731_Holder_William__A_Treatise_of_the_natural_grounds_079_080_mercator_53tet.jpg
Entry: Mercator: 53-tet [219]
Madek: 0930f157-348c-4bd4-a8cb-22d0f4ee448f
13xx_odington_walter_CSI_197_SizeOfPythagoreanComma.jpg
Entry: Size of Pythagorean Comma [13]
Madek: 408f16e5-9912-41cc-b3f5-3506997cf538
1547_glareanus_dodecachordon_Lib_1_028_058_tonus.jpg
Entry: Division of the Tone (8 : 9) [30]
Madek: 1cff9bdb-0bae-476a-a5e0-26ea8a1fd794
1544_stifel__arithmetica_integra_e_rara_ethbib_de_musicis_progressionibus_cap_ix_75v_detail.jpg
Entry: Pythagorean Semitone and Pythagorean Commas (detail) [27]
Madek: 057411a6-268b-41b5-8ad5-12dd94557c25
1562_zarlino_institutioni_harmoniche_0152_p_141_keyboard_dividedKeys.jpg
Entry: Keyboard: Divided Keys [39]
Madek: b5ed877a-8c12-41d8-a655-7a56f60eddcb
1562_zarlino_institutioni_harmoniche_0141_p_130_distributionOfThe Comma.jpg
Entry: Distribution of the Comma [None]
Madek: 1fc6a5d1-4227-4e44-85a0-959ac4726e0b
1577_salinas_De_musica_124_chromaticScale.jpg
Entry: Totius harmoniae vis hoc diagrammate fulget [46]
Madek: 5fd75bbb-4582-4adb-a5ed-8a9f3c33b7f9
1577_Salinas_De_musica_113_diatonicScale.jpg
Entry: Diatonic Scale [45]
Madek: 4ee1c9ad-aaf9-417a-a982-e531b719f975
1636_mersenne_HarmUniv_TraitezDesConsDiss_Livre_II_DesDissonances_123__9SyntComas.jpg
Entry: 9 Syntonic commas [210]
Madek: b6227b89-7429-4203-88d9-88df19d6a8ec
1665_newton__manus_229_108v_detail_01.jpg
Entry: Division of the Octave into 53 and 612 Equal Parts [79]
page at: http://medienarchiv.zhdk.ch/api/media-entries/?collection_id=b95a1542-a6cb-498f-ac76-84f410f9bd56&page=1
Madek: e00129d7-7e38-4c3c-830a-bf677b978d96
1731_Holder_William__A_Treatise_of_the_natural_grounds_080_53tet_intervals.jpg
Entry: 53-tet Intervals [221]
Madek: bb98ce51-3a70-4262-bddb-422275b3c86d
1323_De_Muris_Johannes__Musica_speculativa_fol_107v_TonusMicrodivision.jpg
Entry: Division of the tone into small intervals [495]
Madek: d7caad48-4346-4c41-8972-1d298e343e6e
1650_descartes__diatonicScale_1__32_BnF.jpg
Entry: Diatonic Scale 1 [None]
Madek: 93dee41d-fb43-4691-bc34-9547a8621f16
1518_Gaffurio__De_harmonia_musicorum_instrumentorum_opus_Lib_II_fol_60v_SexTonisDiapason.jpg
Entry: Comparison of six tones with the octave [500]
Madek: bfae1cb2-7139-4c7b-bd08-8aafc354205a
1514_cochlaeus_Tetrachordum_musices_tract_I_fol_A4v_TwoSemitones.jpg
Entry: Two semitones [498]
Madek: 0587155b-8151-4c79-8a03-bff96c92e5ca
1529_fogliano_Musica_theorica_fol_36r_bisectionOfSyntonicComma.jpg
Entry: Bisection of the syntonic comma [503]
Madek: 49dc43e2-1613-435b-8dc0-8e9c826485bb
1529_fogliano_Musica_theorica_fol_31v_smallIntervalsAndTheirDifferences.jpg
Entry: Small syntonic intervals and their differences [501]
Madek: 93486e5e-e2bf-4a4d-a5fc-0b4ee593fa08
1581_Galilei_Vincenzo_DialogoDellaMusicaAnticaEDellaModerna_045__WrongPythagoreanComma.jpg
Entry: Calculation of the Pythagorean Comma [508]
Madek: 2e5d7bb9-3dc3-4ac5-bc2c-415d3f4d3186
1581_Galilei_Vincenzo_DialogoDellaMusicaAnticaEDellaModerna_045__WrongPythagoreanAndSyntonicComma.jpg
Entry: Comparison of the Pythagorean with the syntonic comma [507]
Madek: 3b98e4f4-e788-4d96-a26b-45230d17907e
1917_oettingen__Grundlagen_der_Musikwissenschaft_176_chi53.jpg
Entry: Syntonic tone system with 53 pitch classes [558]
page at: http://medienarchiv.zhdk.ch/api/media-entries/?collection_id=b95a1542-a6cb-498f-ac76-84f410f9bd56&page=2
Collection: Microintervals
########################
Madek: [25] 96269c4b-cac5-4265-8860-655859c436c9
Madek: 5daf344f-786e-41ee-a6ea-2ad9ae75978b
1636_mersenne_HarmUniv_TraitezDesConsDiss_Livre_II_DesDissonances_140__SixDivisionsDeLOctave.jpg
Entry: Six Divisions de l'Octave [213]
Madek: 6fde0f48-f2cd-4b59-a526-77307922bc36
1581_Galilei_Vincenzo_DialogoDellaMusicaAnticaEDellaModerna_073__majorTriad.jpg
Entry: Major triad with octave replicas [512]
Madek: 81be7501-037b-465d-ad13-19c30ef34aea
1650_descartes__consonanceCircle__19_BnF.jpg
Entry: Consonance Circle [None]
Madek: e9a199e4-d03b-497b-9d99-8f40839b87aa
1722_RameauTraiteStringsDivision.jpg
Entry: Overtones [557]
Madek: 9f596764-388c-4f4a-86c5-a297e854a996
1624_fludd_uch_1_0417_Tract_II_Part_II_Lib_V_217_upperTriangle.jpg
Entry: Triangle with Consonant Chords [554]
page at: http://medienarchiv.zhdk.ch/api/media-entries/?collection_id=96269c4b-cac5-4265-8860-655859c436c9&page=1
Collection: Triads
########################
Madek: [26] 4ec58123-9e16-4bce-9dae-7bc290e0c9a2
Madek: 795898a8-c1ac-4951-b890-c4a82a118cd9
1624_fludd_eod_uch_1_Tract_II_Part_II_Lib_I_161_ad_templum.jpg
Entry: Templum musicae [60]
Madek: ed71dd26-1faf-4dda-8d51-a524c1ebd80d
1684_anonymous__themusicallcompass_herissone_2000_musictheory_085.jpg
Entry: The Musicall Compass [91]
Madek: dfc1e8d6-7cce-4a77-ad7e-f721c129446b
1676_mace_thomas__MusicalInfinity_SpiralPoem_gouk_153_4_48.jpg
Entry: Mysterium Aeternitatis [88]
Madek: 902dac17-87fa-4a11-b2e2-b5bbde0c4cfe
1852_drobisch__121_skrews.jpg
Entry: Pitch Helix [97]
Madek: 656c8876-c12e-4e67-9b44-90cd5297e62c
1834_opelt_SchraubenLinie.jpg
Entry: Pitch Helix [96]
page at: http://medienarchiv.zhdk.ch/api/media-entries/?collection_id=4ec58123-9e16-4bce-9dae-7bc290e0c9a2&page=1
Collection: Spiral and helix
########################
Madek: [27] 61881c4a-3efc-43a4-a58c-4e4a28ecfa5c
Madek: d0ff71c9-1f36-481c-abc4-0cb1eff4f59a
1588_zarlino_SopplimentiMusicali_lib_IV_209.jpg
Entry: Consonantiae Diapason in Duodecim Partes Aequalis Divisio [552]
Madek: 06252c75-3943-47b0-a6c1-7b389bcf6775
1637_Descartes__Geometry_318_GeometricProgressionTool.jpg
Entry: Mesolabio [555]
Madek: 78baafb6-730e-4907-9e00-ac28823ad742
1588_zarlino_SopplimentiMusicali_lib_IV_211.jpg
Entry: Consonantiae Diapason in Duodecim Semitonia aequalis divisio [553]
page at: http://medienarchiv.zhdk.ch/api/media-entries/?collection_id=61881c4a-3efc-43a4-a58c-4e4a28ecfa5c&page=1
Collection: Mesolabio
########################
Madek: [21] f0dfe8b4-ab6e-40c0-a2d2-40d7772103ba
Madek: 0f06a5ec-d766-4ff5-aa4e-9e7f0f1a4647
1739_Euler__Tentamen_279_ChromScalePowers.jpg
Entry: Chromatic Scale Powers [95]
Madek: 057411a6-268b-41b5-8ad5-12dd94557c25
1562_zarlino_institutioni_harmoniche_0152_p_141_keyboard_dividedKeys.jpg
Entry: Keyboard: Divided Keys [39]
Madek: 11c1942b-4861-4768-89b5-595b2af35121
1577_Salinas_De_musica_230_TriangleOverChromaticScale.jpg
Entry: Triangle over chromatic scale [48]
Madek: 1fc6a5d1-4227-4e44-85a0-959ac4726e0b
1577_salinas_De_musica_124_chromaticScale.jpg
Entry: Totius harmoniae vis hoc diagrammate fulget [46]
Madek: 36804e03-c82e-404d-b611-91e1a0e8ee8d
1665_newton__manus_225_106v_detail_01.jpg
Entry: Geometric and Syntonic Division of the Octave [76]
Madek: fa6d5d2d-1212-42b4-a839-ab362016d100
1665_newton__manus_223_105v_detail_01.jpg
Entry: Syntonic Chromatic Scale Measured by 12tet Semitones [75]
Madek: 423f7a2d-f01f-4041-8516-dc140eb79138
1665_newton__manus_227_107v_detail_01.jpg
Entry: Analysis of Newton's Chromatic Scale [78]
Madek: c6ec2008-5b03-4c3b-b1bb-270b07f80261
1665_newton__manus_226_107r_detail_01.jpg
Entry: Analysis of Newton's Chromatic Scale [77]
Madek: c7f6e83a-17df-466a-9ce2-ec87e886d47b
1739_Euler__Tentamen_147_ChromaticScale.jpg
Entry: Chromatic Scale [94]
Madek: b6227b89-7429-4203-88d9-88df19d6a8ec
1665_newton__manus_229_108v_detail_01.jpg
Entry: Division of the Octave into 53 and 612 Equal Parts [79]
page at: http://medienarchiv.zhdk.ch/api/media-entries/?collection_id=f0dfe8b4-ab6e-40c0-a2d2-40d7772103ba&page=1
Madek: 574afcc6-ab90-434f-856d-56c465fbb4ac
1636_mersenne_HarmUniv_TraitezDesConsDiss_Livre_II_DesDissonances_132__ChromaticScale_12tetSyntonic.jpg
Entry: 12-tet and Syntonic Chromatic Scale [211]
Madek: 875e356e-abb3-4d25-8d5e-f1c0844916da
1731_Holder_William__A_Treatise_of_the_natural_grounds_ad_118_ChromaticScale.jpg
Entry: Chromatic Scale [222]
Madek: a86cbcc3-0fb2-411d-a600-27b71955a2c8
1636_mersenne_HarmUniv_TraitezDesConsDiss_Livre_II_DesDissonances_136__chromaticCircleKappa12.jpg
Entry: Syntonic Chromatic Scale [212]
Madek: 57f94f35-4781-4b62-8dfd-097835524930
1529_fogliano_Musica_theorica_fol_38r_tuningSyntonicChromaticScale.jpg
Entry: Tuning of the monochord with the syntonic chromatic scale [505]
Madek: 04d38c30-53a6-49f7-bf57-15373ad42f35
1529_fogliano_Musica_theorica_fol_34v_syntonicChromaticAndDiatonicScale.jpg
Entry: Syntonic diatonic and chromatic scale [502]
Madek: d2def72a-2d2e-4954-92c0-6fc6b52f1469
1619_Kepler_Lib_III_49_v_galilei_chromaticScale.jpg
Entry: Comparison of Vincenzo Galilei's tempered chromatic scale (s = 18/17) with Kepler's syntonic chromatic scale [560]
Madek: 8a44fb96-f3b1-43ae-b67e-041c9b92f6ed
1619_Kepler_Lib_III_47_chromaticScale_stave.jpg
Entry: Syntonic chromatic scale with 12 pitches [559]
Madek: 3b98e4f4-e788-4d96-a26b-45230d17907e
1917_oettingen__Grundlagen_der_Musikwissenschaft_176_chi53.jpg
Entry: Syntonic tone system with 53 pitch classes [558]
page at: http://medienarchiv.zhdk.ch/api/media-entries/?collection_id=f0dfe8b4-ab6e-40c0-a2d2-40d7772103ba&page=2
Collection: Syntonic chromatic scale
########################
Madek: [22] e6bfeff5-dc47-4611-bcfa-cbbef0c89020
Madek: fd40a1b1-2e9d-47e2-889c-66f0180ab847
1547_glareanus_dodecachordon_Lib_1_004_034_hexachords.jpg
Entry: Hexachords [28]
Madek: 154a7917-984b-4363-b520-b16e3d659548
1577_Salinas_De_musica_195_RecentiorumHexachordaCumAntiqorumTetrachordis.jpg
Entry: Recentiorum hexachorda cum antiquorum tetrachordis [47]
Madek: 71970d67-2cdf-4cdb-8d03-d19cc0fce0a7
1562_zarlino_institutioni_harmoniche_0115_p_104_hexachords.jpg
Entry: Hexachords [36]
Madek: 9a4f12a8-0acd-425e-8046-b8619a98ec0a
1562_zarlino_institutioni_harmoniche_0149_p_140_chromaticTetrachord.jpg
Entry: Chromatic Tetrachord [205]
Madek: bf4a06b6-3885-424e-8d34-c43e497e07e3
1562_zarlino_institutioni_harmoniche_0145_p_134_monochord_tetrachords.jpg
Entry: Monochord, Tetrachords [204]
Madek: a9d64ebd-b3d9-46c0-a41a-69ed44bdfac4
1495_de_Podio_Guillermus_Ars_musicorum_Liber_II_XII_greekTetrachords.jpg
Entry: Greek Tetrachords [401]
Madek: 3c64cf53-8768-4b99-9bfe-5a23f4fc2537
1562_zarlino_institutioni_harmoniche_0151_p_142_enharmonicTetrachord.jpg
Entry: Enharmonic Tetrachord [206]
Madek: 37973c7f-7dec-47bd-a4e2-9ca17c98b8f4
1514_cochlaeus_Tetrachordum_musices_tract_I_fol_A5v_GreekTetrachords.jpg
Entry: Greek tetrachord genera [499]
page at: http://medienarchiv.zhdk.ch/api/media-entries/?collection_id=e6bfeff5-dc47-4611-bcfa-cbbef0c89020&page=1
Collection: Tetrachords
########################
Madek: [23] 245dac18-9df9-44da-aa7b-fcff374e3927
Madek: 47f114da-3d2c-45ef-9f84-6d3311e38911
1562_zarlino_institutioni_harmoniche_0036_p_025_senario_Circle.jpg
Entry: Senario Circle [32]
Madek: 84889511-7d2e-42bf-981c-5d24e5fa8575
1650_descartes_Compendium_13_senario_triangle.jpg
Entry: Senario Triangle [73]
Madek: de121544-5300-49ea-884d-0a34c75e35e6
1562_zarlino_institutioni_harmoniche_0072_p_061_pentenario_kappa_5.jpg
Entry: Quinario [35]
Madek: 572a733b-bdc9-46aa-95ee-9d927bb30e31
1651_Raymundi_Lullii_Opera_omnia_30_TertiaFigura.jpg
Entry: Tertia Figura [74]
page at: http://medienarchiv.zhdk.ch/api/media-entries/?collection_id=245dac18-9df9-44da-aa7b-fcff374e3927&page=1
Collection: Senario
########################
Madek: [30] 04faed8d-e20d-4919-af61-e65c1613b4e9
Madek: 1cff9bdb-0bae-476a-a5e0-26ea8a1fd794
1544_stifel__arithmetica_integra_e_rara_ethbib_de_musicis_progressionibus_cap_ix_75v_detail.jpg
Entry: Pythagorean Semitone and Pythagorean Commas (detail) [27]
Madek: cd9d10a0-72d2-42c6-a378-5e1187860050
1551_Stapul_Jac_Fabrum__Musica_LibrisQuatuorDemonstrata_pdf_050.jpg
Entry: Comparison of the Pythagorean comma with the Pythagorean semitone [405]
page at: http://medienarchiv.zhdk.ch/api/media-entries/?collection_id=04faed8d-e20d-4919-af61-e65c1613b4e9&page=1
Collection: Large numbers
########################
Madek: [28] 80d3d8a6-ec20-4476-a728-936a8392e91c
Madek: b5ed877a-8c12-41d8-a655-7a56f60eddcb
1562_zarlino_institutioni_harmoniche_0141_p_130_distributionOfThe Comma.jpg
Entry: Distribution of the Comma [None]
Madek: 798b2e91-4c45-4472-9bb6-ef6047b59a6b
1588_zarlino_SopplimentiMusicali_lib_IV_205.jpg
Entry: Dodeci Semituoni di proportione Sesquidecimasettima non fanno una Diapason perfetta [551]
Madek: 51b28885-a619-455f-9f6f-57de6c503975
1571_zarlino_dimostrationi_harmoniche_284_TemperamentoMonochordoRegolareDiatonico.jpg
Entry: Temperamento del Monochordo Regolare Diatonico [43]
page at: http://medienarchiv.zhdk.ch/api/media-entries/?collection_id=80d3d8a6-ec20-4476-a728-936a8392e91c&page=1
Collection: Temperament
########################
Madek: [29] 61108a56-dca5-490f-90cf-f6b8659a33ac
Madek: b6227b89-7429-4203-88d9-88df19d6a8ec
1665_newton__manus_229_108v_detail_01.jpg
Entry: Division of the Octave into 53 and 612 Equal Parts [79]
Madek: b15d538c-802f-49a4-9ffb-754046e3ec85
1665_newton__manus_231_109v_detail_01.jpg
Entry: Diatonic circles (2) [81]
Madek: c3abd9d8-d2b0-4a20-b121-10372cccca35
1665_newton__manus_230_109r_detail_01.jpg
Entry: Diatonic circles (1) [80]
Madek: e00129d7-7e38-4c3c-830a-bf677b978d96
1731_Holder_William__A_Treatise_of_the_natural_grounds_080_53tet_intervals.jpg
Entry: 53-tet Intervals [221]
Madek: 1f324176-fc64-417d-82c7-35ef8aedb641
1731_Holder_William__A_Treatise_of_the_natural_grounds_079_080_mercator_53tet.jpg
Entry: Mercator: 53-tet [219]
Madek: 3b98e4f4-e788-4d96-a26b-45230d17907e
1917_oettingen__Grundlagen_der_Musikwissenschaft_176_chi53.jpg
Entry: Syntonic tone system with 53 pitch classes [558]
page at: http://medienarchiv.zhdk.ch/api/media-entries/?collection_id=61108a56-dca5-490f-90cf-f6b8659a33ac&page=1
Collection: 53-tet / 53-edo
########################
page at: http://medienarchiv.zhdk.ch/api/collections/?collection_id=73114b11-08de-42a9-ba36-864d9c1b5641&page=3
Madek: [33] 93e430db-215c-499f-b9c1-fe5ae36d4540
Madek: 3f506cc3-3bfb-48e1-ab66-e57c6099c039
1628_beeckman__diatonicScale_2__MS_Middelburg_171r.jpg
Entry: Diatonic Scale 2 [None]
Madek: 330c1f71-8e0d-4b89-9b02-ca0324837864
1640_descartes__diatonicScale_2__MS_Groningen.jpg
Entry: Diatonic Scale 2 [None]
Madek: b071d589-c1c4-4a58-9d93-e146639f7f6b
1635_descartes__diatonicscale_2__MS_Leiden_ublwhs_hug_29_a_f047v.jpg
Entry: Diatonic Scale 2 [None]
Madek: e7a6895a-b672-401e-9dfb-8dfced9e8439
1656_descartes__diatonicScale_2__brockt_1978_36.jpg
Entry: Diatonic Scale 2 [331]
Madek: 5cf43022-587c-42b6-9e5e-d9118bcf1b7b
1653_descartes__diatonicScale_2_compendium__en_032.jpg
Entry: Diatonic Scale 2 [None]
Madek: 411df630-54c1-4550-9dc2-9348c0d3df63
1683_descartes__diatonicScale_2__28_pdf_174.jpg
Entry: Diatonic Scale 2 [None]
Madek: 6cb5e3b6-f0b8-4ae4-bbb4-c50f50d14c83
1668_descartes__diatonicScale_2__buzon_2012_100_B.jpg
Entry: Diatonic Scale 2 [335]
Madek: d9e9dc0b-615d-49d0-9cd4-cb6f9b50bb9e
1650_descartes__diatonicScale_2__32_BnF.jpg
Entry: Diatonic Scale 2 [None]
page at: http://medienarchiv.zhdk.ch/api/media-entries/?collection_id=93e430db-215c-499f-b9c1-fe5ae36d4540&page=1
Collection: Descartes: diatonic scale 2
########################
Madek: [32] 751e6a62-dd26-46c1-9715-85e64059e1e6
Madek: 7af7540f-ad96-4dd0-9065-dab3276c8c93
1683_descartes__diatonicScale_1__28_pdf_174.jpg
Entry: Diatonic Scale 1 [None]
Madek: f3a4e0f1-888f-43de-9ea8-df2c9b838295
1628_beeckman__diatonicScale_1__MS_Middelburg_171_r.jpg
Entry: Diatonic Scale 1 [None]
Madek: 6476b7a9-a262-4dcb-9d54-b7553f0b994a
1640_descartes__diatonicScale_1__MS_Groningen.jpg
Entry: Diatonic Scale 1 [None]
Madek: 55e53716-6e8f-4f15-818a-cca742a4f37a
1635_descartes__diatonicScale_1__MS_Leiden_ublwhs_hug_29_a_f047v.jpg
Entry: Diatonic Scale 1 [None]
Madek: 929ad83f-1760-4c9a-bf09-5d6ad926a681
1653_descartes_brouncker__diatonicScale_1_A__animadv_074.jpg
Entry: Diatonic Scale 1 [326]
Madek: 497345d0-6aa5-417a-962d-9429a830f494
1653_descartes__diatonicScale_1__en_032.jpg
Entry: Diatonic Scale 1 [None]
Madek: 280641ce-c213-4237-b18d-835b74a311dc
1653_descartes_brouncker__diatonicScale_1_C__animadv_076.jpg
Entry: Diatonic Scale 1 [328]
Madek: ef156be6-28ac-43fc-9b60-6381beb2bc31
1653_descartes_brouncker__diatonicScale_1_B__animadv_075.jpg
Entry: Diatonic Scale 1 [327]
Madek: a2601ae6-447c-4ba7-96f4-e4fb86e6f316
1668_descartes__diatonicScale_1__buzon_2012_100_A.jpg
Entry: Diatonic Scale 1 [334]
Madek: fad5b7fa-eba5-465a-9c7b-120ce765d979
1656_descartes__diatonicScale_1__brockt_1978_36.jpg
Entry: Diatonic Scale 1 [330]
page at: http://medienarchiv.zhdk.ch/api/media-entries/?collection_id=751e6a62-dd26-46c1-9715-85e64059e1e6&page=1
Madek: d7caad48-4346-4c41-8972-1d298e343e6e
1650_descartes__diatonicScale_1__32_BnF.jpg
Entry: Diatonic Scale 1 [None]
page at: http://medienarchiv.zhdk.ch/api/media-entries/?collection_id=751e6a62-dd26-46c1-9715-85e64059e1e6&page=2
Collection: Descartes: diatonic scale 1
########################
Madek: [31] acabe9e3-dd7e-4269-a6c1-c0024c55a2a5
Madek: d040e253-8deb-47da-a9d5-35aba03e625e
1628_beeckman__consonanceCircle__MS_Middelburg_167r.jpg
Entry: Consonance Circle [None]
Madek: 92d1b51b-0a92-4073-87f7-1cbd2f5dcfc0
1640_descartes__consonanceCircle___MS_Groningen.jpg
Entry: Consonance Circle [None]
Madek: 853619a7-40fe-40a1-86aa-a65291445d69
1635_descartes__consonanceCircle__MS_Leiden_ublwhs_hug_29_a_f042v.jpg
Entry: Consonance Circle [None]
Madek: f1671cd3-bb94-402f-a03a-da177c90c675
1653_descartes_brouncker__consonanceCircle__animadv_070.jpg
Entry: Consonance Circle [325]
Madek: c20de48a-f66c-44cb-8587-91c7f9790a80
1653_descartes__consonanceCircle__en_017.jpg
Entry: Consonance Circle [None]
Madek: 3072f694-340a-48cd-b95a-4d98d35d104d
1668_descartes__consonanceCircle__buzon_2012_078.jpg
Entry: Consonance Circle [333]
Madek: c42b3514-79fa-4ca2-ada6-9be03ceb17c9
1656_descartes__consonanceCircle__brockt_1978_20.jpg
Entry: Consonance Circle [329]
Madek: 81be7501-037b-465d-ad13-19c30ef34aea
1650_descartes__consonanceCircle__19_BnF.jpg
Entry: Consonance Circle [None]
Madek: 45834bc2-2415-428a-ae96-495ef9cd1089
1683_descartes__consonanceCircle__17_pdf_172.jpg
Entry: Consonance Circle [None]
page at: http://medienarchiv.zhdk.ch/api/media-entries/?collection_id=acabe9e3-dd7e-4269-a6c1-c0024c55a2a5&page=1
Collection: Descartes: consonance circle
########################
Madek: [34] 81d8a342-48a6-4b99-9a47-8a1e2fc98eda
Madek: 0ed65d10-1fc7-46c1-9216-89f5f6209d09
1628_beeckman__hexachords__MS_Middelburg_172r.jpg
Entry: Hexachords [None]
Madek: 2f7b5893-c03c-4963-953c-9f9d53c991d0
1640_descartes__hexachords__MS_Groningen.jpg
Entry: Hexachords [None]
Madek: 1e5c4105-12a7-4976-a1d5-9a22ce9498ff
1635_descartes__hexachords__MS_Leiden_ublwhs_hug_29_a_f048v.jpg
Entry: Hexachords [None]
Madek: 94b61d49-8780-4ef2-9b65-0d2e481d0ecc
1656_descartes__hexachords__brockt_1978_40.jpg
Entry: Hexachords [332]
Madek: a66f8389-2449-47d3-af63-73f6a69de64a
1653_descartes__hexachords_compendium__en_035.jpg
Entry: Hexachords [None]
Madek: 755ed51e-b9ca-4857-bc2b-24eacec27cce
1683_descartes__hexachords__30_pdf_165.jpg
Entry: Hexachords [None]
Madek: a35abc38-5616-48bb-8dde-495a2aadb7c1
1668_descartes__hexachords__buzon_2012_104.jpg
Entry: Hexachords [336]
Madek: 0859f3c9-69fa-4297-b918-46c9eaf1334e
1650_descartes__hexachords__35_BnF.jpg
Entry: Hexachords [None]
page at: http://medienarchiv.zhdk.ch/api/media-entries/?collection_id=81d8a342-48a6-4b99-9a47-8a1e2fc98eda&page=1
Collection: Descartes: hexachords
########################
page at: http://medienarchiv.zhdk.ch/api/collections/?collection_id=73114b11-08de-42a9-ba36-864d9c1b5641&page=4
done

Find missing by doc_id


In [ ]:
for i in range (1,100):
    try:
        e = Entry.objects.get(doc_id=i)
    except(Entry.DoesNotExist):
        print i

Parse references


In [10]:
import sys
import collections
import re
entries = Entry.objects.all()



#refs = {}

for e in entries:
    matches = re.findall('\[\d+\]', unicode(e.description))
    if matches:
        i = 0
        for m in matches:
            number = (int)(matches[i].replace('[', '').replace(']', ''))
            try:
                ref = Entry.objects.get(doc_id=number)
                title = ref.title
                # update description text: [doc_id](doc_id "title")
                e.description = e.description.replace(matches[i], '[' + matches[i] + '](' + str(number) + ' "' + title + '")')
                
                # add related obj
                e.related.add(ref)
                
                e.save()
            
                # save only number for related set
                #matches[i] = number
            except (Entry.DoesNotExist):
                pass
                    
            
            i += 1
            
        #refs[e.doc_id] = matches
        
        
'''
od = collections.OrderedDict(sorted(refs.items()))

for id, refs in od.items():
    # get related objects
    related_objs = Entry.objects.filter(doc_id__in=refs)
    e = Entry.objects.get(doc_id=id)
    print e, '==>', related_objs
    # set them (empty sets will clear related objs)
    e.related.set(related_objs)
'''

CARDS


In [35]:
import csv
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
entries = Entry.objects.all()

with open('/home/stahl/icst/soundcolourspace/cards/cards.csv', 'wb') as csvfile:
    cardswriter = csv.writer(csvfile, delimiter='#', quotechar='|', quoting=csv.QUOTE_MINIMAL)
    for e in entries[0:10]:
        if len(e.author.all()) > 0:
            author_first = e.author.all()[0].first_name or ""
            author_last = e.author.all()[0].last_name or ""
            author = author_first + " " + author_last
        else:
            author = ""
        cardswriter.writerow([e.title, e.description, e.image, e.image.width, e.image.height, author, e.portrayed_object_date])


#with open('cards.csv') as csvfile:
#    reader = csv.reader(csvfile, delimiter=' ', quotechar='|', quoting=csv.QUOTE_MINIMAL)
#    for row in reader:
#        print (row[0])

In [ ]:
entries = Entry.objects.all()
e = entries[33]
e.image.width
e.image.height
print (e.date_accuracy)
from datetime import datetime
from django.utils import timezone
print (timezone.get_current_timezone())

date_object = datetime.strptime('Jun 1 1436  1:33PM', '%b %d %Y %I:%M%p')
print (date_object)
date_object = timezone.make_aware(date_object, timezone.get_current_timezone())
print (date_object)

In [ ]:
import re
from datetime import datetime
from django.utils import timezone

date_object = datetime.strptime('Jun 1 2005  1:33PM', '%b %d %Y %I:%M%p')

entries = Entry.objects.all()
total = 0
for e in entries:    
    # match 4 digits at start of portrayed_object_date
    m = re.findall('^(\d{4})', str(e.portrayed_object_date))
    if m:
        total = total + 1
        date = datetime.strptime(m[0], '%Y')
        date = timezone.make_aware(date, timezone.get_current_timezone())
        e.date = date
        e.date_accuracy = 3
        e.save()
print ("updated total: %s") % (total)

Import CSV annotations


In [ ]:
import csv
import os
import re

entries = Entry.objects.all()
#print( os.path.basename (entries[0].image.name) )
        
path = '/home/stahl/icst/soundcolourspace/annotations.csv'

class MyDialect(csv.Dialect):
    strict = True
    skipinitialspace = True
    quoting = csv.QUOTE_ALL
    delimiter = ';'
    quotechar = '"'
    lineterminator = '\n'


with open(path, 'rb') as csvfile:
    r=csv.reader(csvfile, MyDialect())
    for i in r:
        #print ("#%s: %s \n\n%s") % (i[2], i[0], i[1])
        
        entries = Entry.objects.filter(image__icontains=i[0])
        if (len(entries) == 0):
            print ("no entries for %s") % i[0]
        elif (len(entries) > 1):
            print ("multiple entries for %s") % i[0]
        else:
            entries[0].description = unicode(i[1], errors='ignore')
            entries[0].save()
            
    
        #print ('####################################################################################')

MEDIENARCHIV


In [ ]:
import json
import sys
import os
import requests
import shutil
import operator
from collections import OrderedDict
from requests.auth import HTTPBasicAuth

import tempfile
from django.core.files.base import ContentFile
from django.core.files import File

base = 'http://medienarchiv.zhdk.ch'
collection_id = '73114b11-08de-42a9-ba36-864d9c1b5641'

user = 'sound-colour-space'
password = '95ca2a71-4e01-4477-8e14-b673e96e4fe9'
auth_header = 'Authorization: Basic c291bmQtY29sb3VyLXNwYWNlOjk1Y2EyYTcxLTRlMDEtNDQ3Ny04ZTE0LWI2NzNlOTZlNGZlOQ=='

auth = HTTPBasicAuth(user, password)

#if r.status_code == 200

def get_authors(relations):
    # for each author
    author_objs = []
    for key, values in relations.iteritems():
        a = requests.get(base+values.get('href'), auth=auth).json()
        #print ("\tauthor: %s %s (%s) [%s %s]") % (a.get('first_name'), a.get('last_name'), a.get('pseudonym'), a.get('date_of_birth'), a.get('date_of_death'))
        new_author = { 'first_name': a.get('first_name'), 'last_name': a.get('last_name'), 'pseudonym': a.get('pseudonym'), 'date_of_birth': a.get('date_of_birth'), 'date_of_death': a.get('date_of_death') }
        
        # create or update license
        obj, created = Author.objects.update_or_create(
            remote_uuid=a.get('id'), defaults=new_author)
        author_objs.append(obj) # add to list for update even if existing
        
    return author_objs
        
def get_licenses(relations):
    # for each license
    license_objs = []
    for key, values in relations.iteritems():
        
        l = requests.get(base+values.get('href'), auth=auth).json()
        #print ("\tlicence (%s): %s, %s, %s") % (l.get('id'), l.get('label'), l.get('url'), l.get('usage'))
        
        new_license = { 'remote_uuid': l.get('id'), 'label': l.get('label'), 'url': l.get('url'), 'usage': l.get('usage') }
        # create or update license
        obj, created = License.objects.update_or_create(
            remote_uuid=l.get('id'), defaults=new_license)
        license_objs.append(obj) # add to list for update even if existing
    
    return license_objs
        
        
def get_entry(key, href):
    # get single entry
    entry_request = requests.get(base+href, auth=auth)
    entry = entry_request.json()
    
    print ('Madek: %s') % entry.get('id')
    
    # the updated entry as dict
    new_entry = {}
    
    # get meta data
    meta_data = requests.get(base + href + '/meta-data/', auth=auth)
    meta_data = meta_data.json()
    
    author_objs = []
    license_objs = []

    # iterate over meta-data
    for m in meta_data.get('meta-data'):
        key = m.get('meta_key_id')
        id = m.get('id')
        if (key == 'madek_core:title'):
            title = requests.get(base+'/api/meta-data/'+id, auth=auth).json().get('value')
            #print('madek_core:title: %s') % title
            new_entry['title'] = title
        elif (key == 'madek_core:subtitle'):
            subtitle = requests.get(base+'/api/meta-data/'+id, auth=auth).json().get('value')
            #print('madek_core:subtitle: %s') % subtitle
            new_entry['subtitle'] = subtitle
        elif (key == 'madek_core:portrayed_object_date'):
            portrayed_object_date = requests.get(base+'/api/meta-data/'+id, auth=auth).json().get('value')
            #print('madek_core:portrayed_object_date: %s') % portrayed_object_date
            new_entry['portrayed_object_date'] = portrayed_object_date
        
        elif (key == 'madek_core:authors'):
            authors = requests.get(base+'/api/meta-data/'+id, auth=auth).json().get('_json-roa')['collection']
            #print('madek_core:authors: %s') % authors
            author_objs = get_authors(authors['relations'])
            
        elif (key == 'copyright:license'):    
            licenses = requests.get(base+'/api/meta-data/'+id, auth=auth).json().get('_json-roa')['collection']
            #print('copyright:license: %s') % licenses
            license_objs = get_licenses(licenses['relations']) # will be set at the end of this function
            
        elif (key == 'copyright:source'):
            source = requests.get(base+'/api/meta-data/'+id, auth=auth).json().get('value')
            #print('copyright:source: %s') % source
            new_entry['source'] = source
            
        elif (key == 'copyright:copyright_usage'):
            #print('copyright:copyright_usage: %s') % requests.get(base+'/api/meta-data/'+id, auth=auth).json().get('value')
            pass
        elif (key == 'madek_core:copyright_notice'):
            copyright_notice = requests.get(base+'/api/meta-data/'+id, auth=auth).json().get('value')
            #print('madek_core:copyright_notice: %s') % copyright_notice
            new_entry['copyright_notice'] = copyright_notice
    
    
    # create or update entry
    obj, created = Entry.objects.update_or_create(
        remote_uuid = entry.get('id'), defaults=new_entry)
    
    # save image
    image_href = entry['_json-roa']['relations']['media-file'].get('href')
    image_request = requests.get(base + image_href, auth=auth)
    image = image_request.json()
    image_data_request = requests.get(base + image['_json-roa']['relations']['data-stream']['href'], stream=True, auth=auth)
    
    if image_data_request.status_code == 200:
        f = tempfile.NamedTemporaryFile(delete=False)
        with open(f.name, 'wb') as f:
            image_data_request.raw.decode_content = True
            shutil.copyfileobj(image_data_request.raw, f)
            #for chunk in image_data_request:
            #    f.write(chunk)
            f.close()
        # save entry
        with open(f.name, 'r') as f:
            
            print(image.get('filename'))
            obj.image.save(image.get('filename'), File(f), save=True)
            
        f.close()
        os.unlink(f.name)
            
    # set licenses, authors
    print("Entry: %s") % obj
    obj.license.set(license_objs)
    obj.author.set(author_objs)
        

url = base + '/api/media-entries/?collection_id=' + collection_id

while (True):
    r = requests.get(url, auth=auth)

    collection_data = r.json()['_json-roa']['collection']

    relations = collection_data.get('relations')
    next_page = collection_data.get('next')

    # iterate page
    for key, value in relations.iteritems():

        get_entry(key, value.get('href'))

        print('########################')

        # sys.exit(0) # exit after first item (debugging)


    if (next_page == None):
        break
    else:
        url = base + collection_data['next']['href']
        print ("page at: %s") % url
    
print('done')

Import files from directory

Search & Replace


In [ ]:
import re
entries = Entry.objects.all()
total = 0
for e in entries:
    #e.title = e.title.replace('.gif', '')
    #e.save()
    
    # match 4 digits at start of title + 1 whitespace
    m = re.findall('^(\d{4}.)', e.title)
    if m:
        total = total + 1
        #print e.title
        #print e.title.replace(m[0], '')
        e.title = e.title.replace(m[0], '')
        #e.save()
print total

SearchQuery


In [ ]:
from haystack.query import SearchQuerySet, EmptySearchQuerySet
from haystack.inputs import Raw
from itertools import chain
results = []
#query = '*mono* OR zarlino'
#query = 'newton'
#query = '1675'
query = 'Fludd OR newton'

author = EmptySearchQuerySet()
#author = SearchQuerySet().models(Entry).filter(author=Raw(query))
portrayed_object_date = EmptySearchQuerySet()
#portrayed_object_date = SearchQuerySet().models(Entry).filter(portrayed_object_date=Raw(query))
auto = EmptySearchQuerySet()
#auto = SearchQuerySet().models(Entry).auto_query(query)
combined = EmptySearchQuerySet()
#combined = SearchQuerySet().models(Entry).autocomplete(title_auto=query).filter(text=Raw(query))
raw_full = EmptySearchQuerySet()
raw_full = SearchQuerySet().models(Entry).filter(text=Raw(query))

results =  list(chain(author, portrayed_object_date, auto, combined, raw_full))

if not results:
    print 'None found.'
else:
    print 'Found %s.' % len(results)
    for r in results:
        print '%d %s %s %s' % (r.portrayed_object_date, r.author ,r.title, r.tags)

Local Import


In [ ]:
import os
from django.core.files import File
for f in sorted(os.listdir('temp')):
    if f.endswith(".jpg") or f.endswith(".gif"):
        img = open('temp/' + f)
        dimg = File(img)
        e = Entry(title=f)
        e.save() # save so we have an uuid for the image path
        e.image.save(f, dimg) # image path will be overwritten by model
        e.save()

Set author


In [ ]:
a = "thius"
entries = Entry.objects.filter(title__icontains=a)
author = Author.objects.get(last_name__icontains=a)
print (author)
entries.update(author=author)
print (entries)

In [ ]:
up = 0
for e in Entry.objects.all():
    t = e.title
    y = t.split('_')[0]
    if any(char.isdigit() for char in y):
        e.portrayed_object_date = y
        e.save()
        up = up + 1
print ('updated %d entries.' % up)