Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
issue190:python [2023/02/28 07:54] – d52fr | issue190:python [2023/03/01 12:56] (Version actuelle) – andre_domenech |
---|
Speaking of which, let’s get started. You might notice the title of this article. Yes, it DOES have to do with Python and missing beeps. For years, my computer has not had a built-in speaker, so the beep that I would normally rely on to get the user’s attention didn’t function the way I was used to. For a while, I tried in vain to get the blasted BEEP to respond, then something would come up and I’d have to abandon it for a while. Each time, the “a while” became longer and longer, and it eventually got lost in the shuffle. Until today.** | Speaking of which, let’s get started. You might notice the title of this article. Yes, it DOES have to do with Python and missing beeps. For years, my computer has not had a built-in speaker, so the beep that I would normally rely on to get the user’s attention didn’t function the way I was used to. For a while, I tried in vain to get the blasted BEEP to respond, then something would come up and I’d have to abandon it for a while. Each time, the “a while” became longer and longer, and it eventually got lost in the shuffle. Until today.** |
| |
J'ai une confession embarrassante à faire. Entre les problèmes de météo dans le centre du Texas, les échéances des chapitres du livre, les problèmes de support et de tests, je n'ai pas commencé à penser à ce numéro de FCM avant le 1er février. Je n'ai même pas commencé à faire des recherches ou à écrire les programmes de démonstration avant le 2 février. Cependant, une fois que j'aurai tout écrit, je crois vraiment que je pourrai garder la tête haute et être fier de l'article de ce numéro. | J'ai une confession embarrassante à faire. Entre les problèmes de météo dans le centre du Texas, les échéances des chapitres du livre, les problèmes de support et de tests, je n'ai pas commencé à penser à ce numéro du FCM avant le 1er février. Je n'ai même pas commencé à faire des recherches ou à écrire les programmes de démonstration avant le 2 février. Cependant, une fois que j'aurai tout écrit, je crois vraiment que je pourrai garder la tête haute et être fier de l'article de ce numéro. |
| |
En parlant de ça, commençons. Vous avez peut-être remarqué le titre de cet article. Oui, il a bien un rapport avec Python et les « bips » manquants. Pendant des années, mon ordinateur n'a pas eu de haut-parleur intégré, donc le bip sur lequel je comptais normalement pour attirer l'attention de l'utilisateur ne fonctionnait pas comme j'en avais l'habitude. Pendant un certain temps, j'ai essayé en vain d'obtenir une réponse de ce maudit BIP, puis quelque chose se produisait et je devais l'abandonner pour un moment. A chaque fois, le « un moment » devenait de plus en plus long, et il finissait par se perdre dans la masse. Jusqu'à aujourd'hui. | Sur ce, commençons. Vous avez peut-être remarqué le titre de cet article. Oui, il a bien un rapport avec Python et les « bips » manquants. Pendant des années, mon ordinateur n'a pas eu de haut-parleur intégré, donc le bip sur lequel je comptais normalement pour attirer l'attention de l'utilisateur ne fonctionnait pas comme j'en avais l'habitude. Pendant un certain temps, j'ai essayé en vain d'obtenir une réponse de ce maudit BIP, puis quelque chose se produisait et je devais l'abandonner pour un moment. À chaque fois, le « un moment » devenait de plus en plus long, et il finissait par se perdre dans la masse. Jusqu'à aujourd'hui. |
| |
| |
>>>** | >>>** |
| |
J'ai essayé de revenir en arrière - pour trouver un moyen de faire fonctionner le bip - et toujours pas de chance. J'ai donc décidé d'abandonner l'idée de forcer un bip à sortir de mes haut-parleurs, et j'ai commencé à chercher une méthode alternative, qui n'obligerait pas mes utilisateurs à installer une tonne de bibliothèques avant de pouvoir utiliser un de mes programmes. J'ai trouvé une bibliothèque nommée (entre autres) Beepy. C'est une bibliothèque assez simple, légère, et elle n'a qu'une seule dépendance. J'ai donc fait un essai. Les instructions disaient de l'installer via pip ; j'ai la chance que mes installations de Python ne nécessitent pas l'utilisation d'un « 3 » à la fin de mes commandes Python et Pip, mais j'oublie que beaucoup d'entre vous n'ont pas cette chance. Donc si vous pouvez seulement utiliser « pip », convertissez mentalement « pip3 » quand vous le voyez. | J'ai essayé de revenir en arrière - pour trouver un moyen de faire fonctionner le bip - et toujours pas de chance. J'ai donc décidé d'abandonner l'idée d'obliger un bip à sortir de mes haut-parleurs, et j'ai commencé à chercher une méthode alternative, qui n'obligerait pas mes utilisateurs à installer une tonne de bibliothèques avant de pouvoir utiliser un de mes programmes. J'ai trouvé une bibliothèque nommée (qui l'eut cru ?!) Beepy. C'est une bibliothèque assez simple, légère, et elle n'a qu'une seule dépendance. Je l'ai donc essayée. Les instructions disaient de l'installer via pip ; par chance, mes installations de Python ne nécessitent pas l'utilisation d'un « 3 » à la fin de mes commandes Python et Pip, mais j'oublie que beaucoup d'entre vous n'ont pas cette chance. Donc si vous pouvez seulement utiliser « pip », convertissez-le mentalement quand vous voyez « pip3 ». |
| |
pip3 install beepy | pip3 install beepy |
| |
J'ai lancé mon REPL ptpython... Les instructions disent... | J'ai lancé mon REPL ptpython... Les instructions disent : |
| |
import beepy | import beepy |
beep(sound=1) | beep(sound=1) |
| |
C'est assez facile à suivre, même pour moi. Malheureusement, quand j'ai fait ça, rien ne s'est passé - à part un message d'erreur. | C'est assez facile à suivre, même pour moi. Malheureusement, quand j'ai fait ça, rien ne s'est passé, à part un message d'erreur. |
| |
Traceback (most recent call last): | Traceback (appel le plus récent en dernier) : |
| |
File "<stdin>", line 1, in <module> | File "<stdin>", line 1, in <module> |
Hmmm. Only 7 options. I tried all 7 sounds and, while they worked, I wasn’t really impressed. Given the fact that the last release was in 2019, I thought there might be a better solution.** | Hmmm. Only 7 options. I tried all 7 sounds and, while they worked, I wasn’t really impressed. Given the fact that the last release was in 2019, I thought there might be a better solution.** |
| |
J'ai revérifié la documentation (le peu qu'il y a), et les instructions sont toujours les mêmes. J'ai donc pensé qu'il y avait peut-être eu un changement dans le programme et que la documentation n'avait pas été mise à jour ; alors je me suis gratté plusieurs parties du corps et j'ai décidé de jeter un coup d'oeil à la sortie de la fonction dir(). | J'ai revérifié la documentation (le peu qu'il y a), et les instructions sont toujours les mêmes. J'ai donc pensé qu'il y avait peut-être eu un changement dans le programme et que la documentation n'avait pas été mise à jour ; alors je me suis gratté plusieurs parties du corps et j'ai décidé de jeter un coup d'œil à la sortie de la fonction dir() : |
| |
>>> dir(beepy) | >>> dir(beepy) |
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', 'beep', 'make_sound'] | ['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', 'beep', 'make_sound'] |
| |
Il y avait la commande beep, donc je savais qu'il y avait simplement deux façons de la faire fonctionner. Je pouvais essayer | Il y avait la commande beep, donc je savais qu'il y avait simplement deux façons de la faire fonctionner. Je pouvais essayer : |
| |
from beepy import beep | from beepy import beep |
beep(sound=1) | beep(sound=1) |
| |
Et voilà ! Le son de la vie ! C'est assez simple à inclure et à coder pour moi - si je voulais attirer l'attention de l'utilisateur. Mais qu'en est-il de l'autre option ? | Et voilà ! On a tous pu apprendre quelque chose ! C'est assez simple à inclure et à coder pour moi, si je voulais attirer l'attention de l'utilisateur. Mais qu'en est-il de l'autre option ? |
| |
import beepy | import beepy |
Et voilà, c'était un moment d'apprentissage pour nous tous. J'ai lu le reste des instructions et j'ai trouvé le reste des commandes. | Et voilà, c'était un moment d'apprentissage pour nous tous. J'ai lu le reste des instructions et j'ai trouvé le reste des commandes. |
| |
L'argument sound prend comme argument, soit des entiers (1-7), soit des chaînes (de la liste ci-dessous). | L'argument sound prend comme argument soit des entiers (1-7), soit des chaînes (de la liste ci-dessous). |
| |
Voici les correspondances pour les nombres : 1 : 'coin', 2 : 'robot_error', 3 : 'error', 4 : 'ping', 5 : 'ready', 6 : 'success', 7 : 'wilhelm'. | Voici les correspondances pour les nombres : 1 : 'coin', 2 : 'robot_error', 3 : 'error', 4 : 'ping', 5 : 'ready', 6 : 'success', 7 : 'wilhelm'. |
I moved through the documentation, seeing that, yes, there is a way to make simple beeps, but not so simply… But, I found what I knew had to be there. A way to play audio files, .wav files specifically. While I’m not a huge fan of .wav files, it would do the trick and, if I absolutely had to, there are plenty of websites that have free .wav files just for the purpose of embedding into someone’s program. So I tried it (I still had ptpython running). Code is shown top right.** | I moved through the documentation, seeing that, yes, there is a way to make simple beeps, but not so simply… But, I found what I knew had to be there. A way to play audio files, .wav files specifically. While I’m not a huge fan of .wav files, it would do the trick and, if I absolutely had to, there are plenty of websites that have free .wav files just for the purpose of embedding into someone’s program. So I tried it (I still had ptpython running). Code is shown top right.** |
| |
Puisque beepy n'avait qu'une seule dépendance, j'ai pensé que je pourrais essayer de chercher quelque chose de plus simple et avec un peu plus d'options. Cette dépendance est une bibliothèque appelée simpleaudio. J'ai fait une recherche sur Internet et j'ai trouvé leur adresse github. https://github.com/hamiltron/py-simple-audio. J'étais à nouveau enthousiaste. Au moins jusqu'à ce que je lise la dernière date de sortie. 2019. ARRGH ! Cependant, au moins il y avait de la documentation. Il y avait encore de la lumière au bout du tunnel, et je priais pour que ce ne soit pas un train de marchandises. J'ai appelé l'URL de la documentation (https://simpleaudio.readthedocs.io/en/latest/) et j'ai commencé à creuser. La première chose qui est montrée est une vérification rapide des fonctions. Ok. Je peux le faire. | Puisque beepy n'avait qu'une seule dépendance, j'ai pensé que je pourrais essayer d'y chercher quelque chose de plus simple et avec un peu plus d'options. Cette dépendance est une bibliothèque appelée simpleaudio. J'ai fait une recherche sur Internet et j'ai trouvé leur adresse github. https://github.com/hamiltron/py-simple-audio. J'étais à nouveau enthousiaste. Au moins jusqu'à ce que je lise la dernière date de sortie. 2019. ARRGH ! Cependant, au moins il y avait de la documentation. Il y avait encore de la lumière au bout du tunnel, et je priais pour que ce ne soit pas un train de marchandises. J'ai appelé l'URL de la documentation (https://simpleaudio.readthedocs.io/en/latest/) et j'ai commencé à lire. La première chose qui est montrée est une vérification rapide des fonctions. Ok. Je peux le faire. |
| |
import simpleaudio.functionchecks as fc | import simpleaudio.functionchecks as fc |
Je pensais entendre quelque chose comme « Right speaker » (haut-parleur droit) sortant des haut-parleurs, mais j'ai été heureux d'entendre une note de piano sortir d'un des haut-parleurs et, un instant plus tard, la même note mais une octave plus haut sortir de l'autre. Je commençais à entrevoir quelques possibilités. J'ai continué à lire. | Je pensais entendre quelque chose comme « Right speaker » (haut-parleur droit) sortant des haut-parleurs, mais j'ai été heureux d'entendre une note de piano sortir d'un des haut-parleurs et, un instant plus tard, la même note mais une octave plus haut sortir de l'autre. Je commençais à entrevoir quelques possibilités. J'ai continué à lire. |
| |
J'ai parcouru la documentation, voyant que, oui, il y avait un moyen de faire des bips simples, mais pas si simples... Mais, j'ai trouvé ce que je savais devoir être là. Un moyen de lire des fichiers audio, plus précisément des fichiers .wav. Bien que je ne sois pas un grand fan des fichiers .wav, cela ferait l'affaire et, si je devais absolument le faire, il y a beaucoup de sites Web qui ont des fichiers .wav gratuits juste pour les intégrer dans le programme de quelqu'un. J'ai donc essayé (j'avais toujours ptpython en cours d'exécution). Le code est affiché en haut à droite. | J'ai parcouru la documentation, voyant que, oui, il y avait un moyen de faire des bips simples, mais pas si simplement... Mais j'ai trouvé ce que je savais devoir être là. Un moyen de lire des fichiers audio, plus précisément des fichiers .wav. Bien que je ne sois pas un grand fan des fichiers .wav, cela ferait l'affaire et, si je devais absolument le faire, il y a beaucoup de sites Web qui ont des fichiers .wav gratuits juste pour les intégrer dans un programme. Je l'ai donc essayé (j'avais toujours ptpython en cours d'exécution). Le code est affiché en haut à droite. |
| |
| |
Well, that is very familiar to a guy who spent 6 years in the school band. If there were only two things I learned in High School, it was music and computers. So the three lines simply give the frequencies of a concert A4, a C# and an E. The next part sort-of made sense and I’m not a big numpy user. Basically, after setting the sample rate, and the duration of any note, numpy generates an array of values (bottom right). | Well, that is very familiar to a guy who spent 6 years in the school band. If there were only two things I learned in High School, it was music and computers. So the three lines simply give the frequencies of a concert A4, a C# and an E. The next part sort-of made sense and I’m not a big numpy user. Basically, after setting the sample rate, and the duration of any note, numpy generates an array of values (bottom right). |
| |
The next bit of code (below) creates numpy arrays containing the values for the sine waves of the three notes.**Je venais de trouver un de ces fichiers "destinés à être intégrés" et je l'ai téléchargé sur mon bureau. J'ai copié le bloc de code dans le REPL et j'ai remplacé le chemin d'accès de l'exemple par mon chemin d'accès réel et, comme par hasard, cela a fonctionné comme prévu. La première fois ! | The next bit of code (below) creates numpy arrays containing the values for the sine waves of the three notes.** |
| |
J'ai creusé un peu plus profondément et j'ai trouvé l'autre chose que je voulais. La possibilité de créer un ou deux sons simples à la demande. Cependant, l'échantillon et cette partie de la documentation concernaient l'utilisation de numpy pour générer les formes d'onde. Cela semblait être un peu plus que ce que j'étais prêt à faire, mais j'ai quand même essayé, puisque le REPL était toujours en place (au milieu à droite). | Je venais de trouver un de ces fichiers « destinés à être intégrés » et je l'ai téléchargé sur mon bureau. J'ai copié le bloc de code dans le REPL et j'ai remplacé le chemin d'accès de l'exemple par mon chemin d'accès réel et, comme par hasard, cela a fonctionné comme prévu. La première fois ! |
| |
| Je venais de trouver l'un de ces fichiers « à intégrer » et l'ai téléchargé sur mon bureau. J'ai copié le bloc de code dans le REPL et j'ai changé le chemin de l'exemple à mon vrai chemin et, surprise, il fonctionnait comme attendu. La première fois ! |
| |
| J'ai creusé un peu plus profondément et j'ai trouvé l'autre chose que je voulais. La possibilité de créer un ou deux sons simples à la demande. Cependant, l'échantillon et cette partie de la documentation concernaient l'utilisation de numpy pour générer des formes d'onde. Cela semblait être un peu plus que ce que j'étais prêt à faire, mais j'ai quand même essayé, puisque le REPL était toujours en place (au milieu à droite). |
| |
Eh bien, c'est très familier pour un gars qui a passé 6 ans dans la fanfare de l'école. S'il n'y a que deux choses que j'ai apprises au lycée, c'est la musique et les ordinateurs. Les trois lignes donnent simplement les fréquences d'un La4, d'un Do# et d'un Mi de concert. La partie suivante est plus ou moins logique et je ne suis pas un grand utilisateur de numpy. En gros, après avoir défini la fréquence d'échantillonnage et la durée de chaque note, numpy génère un tableau de valeurs (en bas à droite). | Eh bien, c'est très familier pour un gars qui a passé 6 ans dans la fanfare de l'école. S'il n'y a que deux choses que j'ai apprises au lycée, c'est la musique et les ordinateurs. Les trois lignes donnent simplement les fréquences d'un La4, d'un Do# et d'un Mi de concert. La partie suivante est plus ou moins logique et je ne suis pas un grand utilisateur de numpy. En gros, après avoir défini la fréquence d'échantillonnage et la durée de chaque note, numpy génère un tableau de valeurs (en bas à droite). |
t = np.linspace(0, T, int(T * sample_rate), False)** | t = np.linspace(0, T, int(T * sample_rate), False)** |
| |
Ensuite, ce code (page suivante, en haut à gauche) va « regrouper » toutes les notes et les normaliser en un seul tableau numpy. | Puis, ce code (page suivante, en haut à gauche) va « regrouper » toutes les notes et les normaliser en un seul tableau numpy. |
| |
Ensuite, nous introduisons les données audio dans le tampon d'exécution (playbuffer) et attendons qu'il soit terminé (en haut à droite). | Ensuite, nous introduisons les données audio dans le tampon d'exécution (playbuffer) et attendons qu'il soit terminé (en haut à droite). |
| |
Sachant que je ne pouvais pas faire de fautes de frappe, puisque j'ai copié le code directement à partir de la documentation, j'ai appuyé sur la touche <enter> après la dernière ligne, attendant qu'on me présente un accord de trois notes, une note à la fois. Cependant, ce que j'ai obtenu est (ci-dessous)... | Sachant que je ne pouvais pas faire de fautes de frappe, puisque j'ai copié le code directement à partir de la documentation, j'ai appuyé sur la touche <entrée> après la dernière ligne, m'attendant à ce qu'on me présente un accord de trois notes, une note à la fois. Cependant, ce que j'ai obtenu est (ci-dessous). |
| |
C'était VRAIMENT frustrant. J'ai regardé à nouveau le code et j'ai réalisé que la seule valeur à virgule flottante était la valeur de T, qui est la durée de la note à jouer. Cela devait être dans la commande np.linspace. | C'était VRAIMENT frustrant. J'ai regardé le code à nouveau et j'ai réalisé que la seule valeur à virgule flottante était la valeur de T, qui est la durée de la note à jouer. Cela devait être dans la commande np.linspace. |
| |
T = 0.25 | T = 0.25 |
t = np.linspace(0, T, T * sample_rate, False) | t = np.linspace(0, T, T * sample_rate, False) |
| |
Ah. La partie T * taux d'échantillonnage va retourner une valeur à virgule flottante, j'ai donc essayé de la convertir en un nombre entier. | Ah ! La partie T * taux d'échantillonnage va retourner une valeur à virgule flottante ; j'ai donc essayé de la convertir en un nombre entier : |
| |
t = np.linspace(0, T, int(T * sample_rate), False) | t = np.linspace(0, T, int(T * sample_rate), False) |
Lorsque j'ai relancé le programme, j'ai obtenu les trois tons que j'attendais depuis le début. | Lorsque j'ai relancé le programme, j'ai obtenu les trois tons que j'attendais depuis le début. |
| |
J'ai essayé d'autres exemples du site Web, dont l'un crée un objet de plus haute résolution, puis j'ai essayé d'ajouter des notes à l'ensemble du processus. L'idée était de créer toutes les notes de La4 à La5. J'ai modifié le fichier de base pour calculer les treize notes. | J'ai essayé d'autres exemples du site Web, dont l'un crée un objet de plus haute résolution, puis j'ai essayé d'ajouter plus de notes à l'ensemble du processus. L'idée était de créer toutes les notes de La4 à La5. J'ai modifié le fichier de base pour calculer les treize notes : |
<nowiki> | <nowiki> |
# calculate the frequencies | # calculate the frequencies |
A5_freq = 880 | A5_freq = 880 |
</nowiki> | </nowiki> |
Si vous n'êtes pas musicien, cela ne signifie peut-être pas grand-chose pour vous ; cependant, je vais essayer de vous donner un point de référence. J'ai saisi une capture d'écran du clavier virtuel d'un piano à partir d'une application sur mon ordinateur, et j'ai ajouté quelques indications. | Si vous n'êtes pas musicien, cela ne signifie peut-être pas grand-chose pour vous ; cependant, je vais essayer de vous donner un point de référence. J'ai saisi une capture d'écran du clavier virtuel d'un piano à partir d'une application sur mon ordinateur et j'ai ajouté quelques indices. |
| |
Chacune des touches blanches est appelée touche naturelle. Dans l'image, on commence par le Do central (qui est Do4) et on monte d'une octave (13 notes) jusqu'au do5. On l'appelle do central parce que c'est la touche do au milieu du clavier. | Chacune des touches blanches est appelée touche naturelle. Dans l'image, on commence par le Do central (qui est Do4) et on monte d'une octave (13 notes) jusqu'au Do5. On l'appelle Do central parce que c'est la touche Do au milieu du clavier. |
| |
**The black keys are sharps or flats depending on if you are going up the scale or down. So the keys are | **The black keys are sharps or flats depending on if you are going up the scale or down. So the keys are |
np.save(f, audio)** | np.save(f, audio)** |
| |
Les touches noires sont des dièses ou des bémols, selon que vous montez ou descendez la gamme. Les clés sont donc | Les touches noires sont des dièses ou des bémols, selon que vous montez ou descendez la gamme. Les clés sont donc : |
| |
Do, Do#, Ré, Ré#, Mi, Fa, Fa#, Sol, Sol#, La, La#, Si et retour au Do. | Do, Do#, Ré, Ré#, Mi, Fa, Fa#, Sol, Sol#, La, La#, Si et retour au Do. |
Vous pouvez trouver le programme pour le faire sous le nom de tones4.py dans le dépôt. | Vous pouvez trouver le programme pour le faire sous le nom de tones4.py dans le dépôt. |
| |
J'allais clore l'article ici, en notant que je n'avais pas essayé de sauvegarder les objets audio créés dans des fichiers, soit comme un fichier numpy qui peut être chargé plus tard, soit comme un fichier .wav qui éviterait le besoin d'importer numpy dans chaque programme où vous créez et utilisez ceci, mais juste le paquet simpleaudio. Eh bien, après avoir fait une petite pause, j'ai trouvé comment le faire, alors je vais vous révéler le secret. | J'allais clore l'article ici, en notant que je n'avais pas essayé de sauvegarder les objets audio créés dans des fichiers, soit comme un fichier numpy qui peut être chargé plus tard, soit comme un fichier .wav qui éviterait le besoin d'importer numpy dans chaque programme que vous créez et utilisez cela, mais juste le paquet simpleaudio. Après avoir fait une petite pause, j'ai trouvé comment le faire, alors je vais vous révéler le secret. |
| |
La solution pour sauvegarder l'objet audio dans un fichier est vraiment très simple. Au bas du fichier, il y a juste deux lignes. Dans le cas de tones4.py, ajoutez en bas du fichier les lignes suivantes. | La solution pour sauvegarder l'objet audio dans un fichier est vraiment très simple. Au bas du fichier, il y a juste deux lignes. Dans le cas de tones4.py, ajoutez en bas du fichier les lignes suivantes : |
| |
# enregistrer l'objet audio dans un fichier local pour une utilisation future | # enregistrer l'objet audio dans un fichier local pour une utilisation future |
C'est tout. J'ai enregistré le programme sous le nom de tones4a.py . Le fichier qui a été généré peut être réutilisé dans un autre programme (en haut à droite). | C'est tout. J'ai enregistré le programme sous le nom de tones4a.py . Le fichier qui a été généré peut être réutilisé dans un autre programme (en haut à droite). |
| |
Cette solution, cependant, nécessite toujours d'avoir numpy comme dépendance dans le programme. Pour moi, la meilleure solution n'est pas seulement d'avoir le fichier numpy (pour une utilisation future) mais de sauvegarder l'objet audio dans un fichier .wav. Cela nécessite l'importation supplémentaire du paquet wave. Ajoutez-le en haut du programme test4, puis ajoutez le code suivant en bas. | Cette solution, cependant, nécessite toujours d'avoir numpy comme dépendance dans le programme. Pour moi, la meilleure solution n'est pas seulement d'avoir le fichier numpy (pour une utilisation future) mais de sauvegarder l'objet audio dans un fichier .wav. Cela nécessite l'importation supplémentaire du paquet wave. Ajoutez-le en haut du programme test4, puis ajoutez le code suivant en bas : |
obj = wave.open("scale1.wav", "w") | obj = wave.open("scale1.wav", "w") |
obj.setnchannels(1) | obj.setnchannels(1) |
obj.close() | obj.close() |
| |
Cela créera un fichier .wav (sans qu'il soit nécessaire de sauvegarder les données numpy si vous ne le souhaitez pas). Ensuite, pour le lire, tout ce dont vous avez besoin est ce petit bout de code. | Cela créera un fichier .wav (sans qu'il soit nécessaire de sauvegarder les données numpy si vous ne le souhaitez pas). Ensuite, pour le lire, tout ce dont vous avez besoin est ce petit bout de code : |
| |
import simpleaudio as sa | import simpleaudio as sa |
J'ai également inclus la routine de lecture dans un simple fichier python nommé play_my_wav.py qui lira le fichier « scale1.wav ». Bien sûr, les fichiers numpy et quelques exemples de fichiers .wav sont également dans le dépôt. | J'ai également inclus la routine de lecture dans un simple fichier python nommé play_my_wav.py qui lira le fichier « scale1.wav ». Bien sûr, les fichiers numpy et quelques exemples de fichiers .wav sont également dans le dépôt. |
| |
Eh bien, il est temps de conclure pour ce mois-ci. Sachez que la recherche d'une chose aussi simple que de faire sonner votre ordinateur sur commande peut facilement vous conduire sur un chemin où vous pourriez être comme Alice, et « descendre dans le terrier du lapin ». | Bon, il est temps de conclure pour ce mois-ci. Sachez que la recherche d'une chose aussi simple que de faire sonner votre ordinateur sur commande peut facilement vous conduire sur un chemin où vous pourriez être comme Alice, et « descendre dans le terrier du lapin ». |
| |
J'ai mis le fichier .wav pour Beepy ainsi que le fichier de test pour simpleaudio dans mon dépôt github. J'ai également inclus quelques autres fichiers de test que j'ai créés pour tester simpleaudio. Vous pouvez trouver le dépôt à https://github.com/gregwa1953/FCM-190. | J'ai mis le fichier .wav pour Beepy ,ainsi que le fichier de test pour simpleaudio, dans mon dépôt github. J'ai également inclus quelques autres fichiers de test que j'ai créés pour tester simpleaudio. Vous pouvez trouver le dépôt à https://github.com/gregwa1953/FCM-190. |
| |
Jusqu'à la prochaine fois, comme toujours ; restez en sécurité, en bonne santé, positif et créatif ! | Jusqu'à la prochaine fois, comme toujours, restez en sécurité, en bonne santé, positif et créatif ! |
| |