Les gens ont écrit beaucoup de choses permettant de visualiser une chose comme une autre. Maintenant je propose de pouvoir traduire des lettres en musique! C'est votre travail d'écrire un programme qui prend un fichier texte et génère un fichier son avec chaque lettre convertie en une note spécifique C3-C8
.
Avertissement - Je ne m'attends pas vraiment à ce que la musique sonne bien, mais j'espère être surpris.
Caractéristiques
- Vous prenez le nom d'un fichier comme une chaîne et le BPM (battements par minute) comme un int
- Vous mettez
A
en majuscule pour être la noteC3
- Et montez d'un demi-pas pour chaque personnage dans cet ordre:
ABCDEFGHIJKLMNOPQRSTUVWXYZ ()-,;.'"abcdefghijklmnopqrstuvwxyz
- Oui, tous les personnages ne seront pas utilisés car ils s'étendent sur trop d'octaves.
- Vous traduisez ainsi chaque caractère du fichier
- Regroupez les notes au BPM donné sous forme de noires
- Soit enregistrer en tant que fichier son (je suppose que midi sera le plus simple, mais tout va bien) ou jouer
- Tout format d'entrée sain est correct
- Aucune échappatoire standard
- C'est le code-golf, donc le code le plus court en octets gagne!
Bonus
- Autoriser la transposition de la sortie - 50 octets
- Autoriser la superposition de plusieurs pistes les unes sur les autres en prenant plusieurs fichiers - 75 octets
- Joignez des lettres consécutives en une seule note plus longue - 50 octets
Edit: Wow, nous avons des scores négatifs. J'annoncerai le gagnant samedi.
Réponses:
MATLAB, 159-50-50-75 = -16
Exemple d'entrée
Exemple de sortie
Génère des ondes sonores sinusoïdales pures, très funky (en dents de scie est également possible, avec un score encore meilleur, mais ça sonne un peu ... trop funky). Fonctionne comme une fonction, attend donc un tableau de caractères (
['abc';'def']
) avec une ligne par «piste». Je pense que cela est couvert par «tout format d'entrée sain» , mais si le consensus général est que j'ai besoin de lire un fichier, je suppose que je peux le changer. L'entréei
est des pistes de texte (d'égale longueur), desb
battements par minute ett
transposés (fournir 0 pour les non transposés). Il mélange deux sinus en un en compensant l'entrée du sinus, j'ai donc obtenu les trois bonus, me donnant un score négatif.Version utilisant le fichier d'entrée: 211-175 = 36
L'argument d'entrée
i
représente désormais le nom du fichier, les autres paramètres étant inchangés. Peut ne pas fonctionner sur les versions plus récentes, car je reçois un avertissement quitextread
pourrait bientôt être obsolète. EDIT: textread se divise apparemment automatiquement aux espaces blancs, donc j'ai corrigé cela. De plus, je pense que j'ai peut-être accidentellement contacté des extraterrestres avec les sons étranges émis lors des tests.Quelle version préférez-vous? :)
la source
.mat
fichiers ont un format d'entrée sain. Créez un fichier .mat avec une variable «i» contenant votre texte. Ensuite, ajoutezload(i);
au début de la ligne 2 de la version supérieure. Score: -16 + 8 =-8
. Je le ferai lorsque votre commentaire aura plus de votes positifs que le mien, ou lorsque le PO aura une opinion :)Snap ! - 401 - 75 = 326
Essayez-le en ligne ici.
J'utilise cette méthode de comptage d'octets pour le programme.
J'ai ajouté jouer plusieurs sons à la fois.
La structure de base est la même que l'original (voir ci-dessous), mais avec l'ajout de
launch{}
.launch{}
démarre un nouveau thread avec le code à l'intérieur, permettant la simultanéité.Le code sous forme de texte est:
Code d'origine, 308.
Lucky Snap! a un jeu MIDI intégré.;)
Malheureusement, il n'a pas de
indexOf
fonction, donc je dois faire un appel JavaScript externe, ce qui est assez cher.Le
repeat () (#)
bloc provient de la bibliothèque d'itérations.Le code peut être écrit sous forme de texte comme celui-ci, c'est ainsi que j'obtiens 308 octets:
la source
-1
deindexOf
? En ce moment, il semble que si ce n'est pas dans la chaîne, il fait le numéro 47.Mathematica, 219 - 50 - 75 - 50 = 44
Prend la liste des fichiers d'entrée, du BPM et du nombre de demi-pas à transposer en entrée et joue le son (à partir d'un piano, tout autre instrument prendrait plus d'octets.) Ne sonne pas si mal!
la source
JavaScript (ES6) 377 - 50 - 50 - 75 = 202
Tout d'abord, voici un extrait exécutable qui utilise des
<input>
champs au lieu de lectures de fichiers:Et maintenant, l'entrée réelle:
Les trois arguments sont un tableau de chaînes de chemin de fichier à jouer simultanément, des notes par minute et un nombre de demi-étapes pour transposer toutes les entrées.
Avec des espaces et des commentaires:
la source