# -*- coding: utf-8 -*-
"""
conversion d'un fichier musicxml en fichier .smwi

$Id$
$URL$
"""

from app.musicxml import musicXml2Song
from songs.Song import Song
import sys
import os.path
from optparse import OptionParser

def main() :
    usage = "%prog musicXmlFile.xml [options]"
    op = OptionParser(usage)
    op.add_option("-i", "--part-index", dest="partIndex"
                 , default = 0
                 , help = "Index de la partie qui contient le champ.")

    op.add_option("-p", '--print', dest='printNotes'
                  , action="store_true"
                  , default = False
                  , help = "Affiche les notes sur la sortie standard (debug)")

    op.add_option("-c", '--no-chorus', dest='autoDetectChorus'
                , action="store_false"
                , default = True
                , help = "désactive la détection du refrain")

    
    options, args = op.parse_args()
    
    if len(args) != 1 :
        raise SystemExit(op.format_help())
    
    part = musicXml2Song(args[0],
                         partIndex=options.partIndex,
                         autoDetectChorus=options.autoDetectChorus,
                         printNotes=options.printNotes)
    
    midiNoteNumbers = []
    noteLengths = []
    lyrics = []
    for note, verseIndex in part.iterNotes() :
        midiNoteNumbers.append(note.midi)
        noteLengths.append(note.duration)
        lyrics.append(note.lyrics[verseIndex].syllabus())
    
    #scale = [55, 57, 59, 60, 62, 64, 65, 67, 69, 71, 72]
    print [n.midi for n in part.distinctNotes]
    for n in part.distinctNotes :
        print n.midi, n.nom
        
    
    # houlala, c'est codé en dur !!!
    # scale = [65, 67, 69, 71, 72, 74, 76, 77, 79, 81, 83] (étoile des neiges)
    # quarterNoteLength = 500
    scale =   [60, 62, 67, 69, 70, 72, 74, 75, 77, 79, 81] # (mon amant de saint-jean)
    quarterNoteLength = 300
    #---

    lowerNote = part.distinctNotes[0].midi
    higherNote = part.distinctNotes[-1].midi
    requiresExtendedScale = higherNote - lowerNote > 12 # une octave == 12 demi-tons
    song = Song(scale,
                requiresExtendedScale=requiresExtendedScale,
                midiNoteNumbers=midiNoteNumbers,
                noteLengths=noteLengths,
                lyrics=lyrics,
                name=args[0],
                quarterNoteLength=quarterNoteLength)
    dest = os.path.abspath(__file__).split(os.path.sep)[:-1]
    dest.append('smwis')
    dest.append('%s.smwi' % os.path.splitext(os.path.basename(song.name))[0])
    dest = os.path.sep.join(dest)
    print dest
    song.save(dest)
    

if __name__ == '__main__' :
    sys.exit(main())
