[PYTHON] Faites correspondre les clés de karaoké

Quand je veux chanter une chanson avec une touche haute en karaoké, je ne sais souvent pas combien il faut baisser la touche, alors j'ai écrit un programme d'ajustement de clé en Python. [Ajout] J'ai essayé de monter sur Laravel

Le problème que vous souhaitez résoudre

―― De combien devriez-vous baisser la tonalité pour qu'elle corresponde à une chanson qui ne peut pas être chantée avec une note aiguë sur votre note la plus élevée? --Exemple: combien de clé doit être abaissée pour une personne dont le son le plus élevé de la voix au sol est mid2G # (le son le plus élevé de BUMP OF CHICKEN "observation astronomique") pour chanter B'z "ultra soul" (son le plus élevé hiC #) C'est OK ―― À propos, les informations sur la plage sonore du morceau sont basées sur Sound range.com.

La source

――Mais, je fais juste ressortir la différence de hauteur entre la chanson que je veux chanter et ma note la plus élevée ^^; ――Je ne peux pas nier le sentiment d'un code inutile et long en raison de la gestion des erreurs d'entrée et de l'affichage de l'utilisation. --Ajout <2016/4/18> -Prend en charge jusqu'à 2 octaves

py3.karaoke.py


#coding:utf-8
import sys

oniki = [
        'lowF', 'lowF_s', 'lowG', 'lowG_s',
        'mid1A', 'mid1A_s', 'mid1B', 'mid1C', 'mid1C_s', 'mid1D', 'mid1D_s', 'mid1E', 'mid1F', 'mid1F_s', 'mid1G', 'mid1G_s',
        'mid2A', 'mid2A_s', 'mid2B', 'mid2C', 'mid2C_s', 'mid2D', 'mid2D_s', 'mid2E', 'mid2F', 'mid2F_s', 'mid2G', 'mid2G_s',
        'hiA', 'hiA_s', 'hiB', 'hiC', 'hiC_s', 'hiD', 'hiD_s', 'hiE', 'hiF', 'hiF_s', 'hiG', 'hiG_s',
        'hihiA', 'hihiA_s', 'hihiB', 'hihiC', 'hihiC_s', 'hihiD', 'hihiD_s', 'hihiF', 'hihiF_s']

def printAdjustKey(adjust_type, diff_key):
    if   adjust_type == '1OctaveDown': ad_oc = 12
    elif adjust_type == '2OctaveDown': ad_oc = 24
    elif adjust_type == '1OctaveUp'  : ad_oc = -12
    elif adjust_type == '2OctaveUp'  : ad_oc = -24
    else: ad_oc = 0

    print(adjust_type + '\t:\t', diff_key + ad_oc, end='\t')
    if abs(diff_key + ad_oc) > 7: print('x')
    else: print('o')

def Usage():
    print('Usage: python3 karaoke.py [your key] [key your want to sing]')
    print('ex   : python3 karaoke.py mid2G_s hiC_s')
   
    print('Kind of range:')
    cnt = 1
    for key in oniki:
        print(key, end = ' ')
        cnt += 1
        if cnt % 10 == 0: print('')
    sys.exit()

def validation(argv):
    if len(argv) != 3: Usage()
    your_key = argv[1]
    target_key = argv[2]
    
    dict_oniki = {x:i for i, x in enumerate(oniki)}
    if your_key not in dict_oniki or target_key not in dict_oniki:
        Usage()

    return dict_oniki, your_key, target_key

def main(argv):
    dict_oniki, your_key, target_key = validation(argv)
    print('Key that you can sing    : ', your_key)
    print('Key that you want to sing: ', target_key)
    print('')

    print('To adjust key')
    diff_key_num = dict_oniki[your_key] - dict_oniki[target_key]
    printAdjustKey('Original', diff_key_num)
    printAdjustKey('1OctaveDown', diff_key_num)
    printAdjustKey('1OctaveUp', diff_key_num)
    print('');
    printAdjustKey('2OctaveDown', diff_key_num)
    printAdjustKey('2OctaveUp', diff_key_num)

if __name__ == "__main__":
    main(sys.argv)

Comment utiliser

--Utiliser la ligne de commande

Exemple d'exécution (* Ne manquez pas le mauvais anglais)

% python3 karaoke.py mid2G_s hiC_s                               
Key that you can sing    :  mid2G_s
Key that you want to sing:  hiC_s

To adjust key
Original	:	 -5	o
1OctaveDown	:	 7	o
1OctaveUp	:	 -17	x

Chanson féminine: chanson tremblante "Je veux te rencontrer, je veux te rencontrer" de Kana Nishino (note la plus haute: hiE)

% python3 karaoke.py mid2G_s hiE                            
Key that you can sing    :  mid2G_s
Key that you want to sing:  hiE

To adjust key
Original	:	 -8	x
1OctaveDown	:	 4	o
1OctaveUp	:	 -20	x

――Ce résultat montre que vous pouvez chanter simplement en élevant 4 touches et en chantant une octave plus bas.

Au contraire, je dirai aussi le modèle lorsqu'une femme veut chanter la chanson d'un homme. Dans le cas des femmes, pensez à faire correspondre les notes les plus basses. La note la plus basse d'une femme est mid1E (la note la plus basse de «SAKURA») Considérez le modèle de chant "Soyons une famille" (note la plus basse: lowG #) de Masaharu Fukuyama.

% python3 karaoke.py mid1E lowG_s                              
Key that you can sing    :  mid1E
Key that you want to sing:  lowG_s

To adjust key
Original	:	 8	x
1OctaveDown	:	 20	x
1OctaveUp	:	 -4	o

――Ce résultat montre que si vous abaissez les 4 touches et chantez une octave plus haut, vous vous sentirez bien de devenir une famille.

Résumé

Cette fois, j'ai écrit un programme de réglage des touches qui peut être exécuté avec CUI (bien qu'il calcule simplement la différence de hauteur). Puisqu'il s'agit d'un CUI, sa polyvalence est très limitée, mais je pense que s'il peut être appliqué au laravel etc. actuellement à l'étude et utilisé sur le web, la polyvalence va s'étendre. Il serait intéressant de saisir votre propre plage et titre de chanson et d'extraire la plage de la chanson de range.com. Si vous avez des erreurs de programmation ou des conseils tels que "C'est plus élégant!", Merci de nous le faire savoir dans les commentaires m (__) m

Recommended Posts

Faites correspondre les clés de karaoké
Correspondance de fichiers
Touches de karaoké assorties ~ J'ai essayé de le mettre sur Laravel ~ <en route>