Derniers sujets
Qui est en ligne ?
Il y a en tout 1 utilisateur en ligne :: 0 Enregistré, 0 Invisible et 1 Invité Aucun
Le record du nombre d'utilisateurs en ligne est de 29 le Mer 25 Fév 2015 - 14:01
Connexion
Statistiques
Nous avons 242 membres enregistrésL'utilisateur enregistré le plus récent est AIRBUS44
Nos membres ont posté un total de 8922 messages dans 811 sujets
musique en c
+4
Ladywasky
Dbug
Jede
romu3
8 participants
Forum Oric :: Forums :: Forum Public :: Programmation en C
Page 2 sur 2
Page 2 sur 2 • 1, 2
Re: musique en c
Sur l'idée des effets de son de LADYWASKY et de son :
j'ai programmé un petit outil en C de génération aléatoire de sons, histoire de faire au hasard une trouvaille sympa =)
y a beaucoup de bruits d'hélicoptères dans le lot ....
- Code:
play_soundfx()
j'ai programmé un petit outil en C de génération aléatoire de sons, histoire de faire au hasard une trouvaille sympa =)
y a beaucoup de bruits d'hélicoptères dans le lot ....
- Fichiers joints
Dernière édition par goyo le Mer 20 Mar 2019 - 14:56, édité 3 fois
goyo- Messages : 199
Date d'inscription : 02/05/2014
Age : 52
Localisation : Massy
Re: musique en c
j'ai mis en téléchargement une nouvelle version ;-)
goyo- Messages : 199
Date d'inscription : 02/05/2014
Age : 52
Localisation : Massy
Re: musique en c
Merci Goyo, c'est sympa ton petit programme !
C'est clair que le AY-3-8912, on dirait qu'il a été conçu pour créer des jeux d'hélicoptères au bord de la mer (avec le bruit des vagues, un "classique" aussi...) !!
C'est clair que le AY-3-8912, on dirait qu'il a été conçu pour créer des jeux d'hélicoptères au bord de la mer (avec le bruit des vagues, un "classique" aussi...) !!
Re: musique en c
si vous avez des remarques pour améliorer l'outil n’hésitez pas à me les suggérer.
Je pensais à une fonction pour générer aléatoirement un son intelligemment : en respectant les formats des octets avec les bits..
Je pensais à une fonction pour générer aléatoirement un son intelligemment : en respectant les formats des octets avec les bits..
goyo- Messages : 199
Date d'inscription : 02/05/2014
Age : 52
Localisation : Massy
Re: musique en c
Quelqu'un saurait-il si on peut jouer une musique tout en lançant des sons comme ping ou shoot par dessus ...
Suffit-il que les sons soient sur des canaux différents de la musique ?
Si je comprends bien l'Oric à trois canaux de son (3 voix ?) ?
Suffit-il que les sons soient sur des canaux différents de la musique ?
Si je comprends bien l'Oric à trois canaux de son (3 voix ?) ?
goyo- Messages : 199
Date d'inscription : 02/05/2014
Age : 52
Localisation : Massy
Re: musique en c
C'est plus ou moins possible, en fonction précisément de combien de canaux tes sons et ta musique utilisent...
Si ton effet sonore et ta musique utilisent des canaux séparés, c'est assez simple, tu positionnes les valeurs des registres correspondant au canal ou aux canaux utilisés par ton effet sonore, tu "valides" pour déclencher la lecture par le PSG, puis tu positionnes les valeurs des registres correspondant au canal ou aux canaux utilisés par la 1ere note de ta musique, tu valides, et les sons des différents canaux se "superposent"... Après, suivant si ton effet sonore "dure" ou doit être modifié, tu modifies les registres nécessaires, puis tu alternes pour les registres des canaux de la musique, pour jouer les différentes notes...
Ceci étant, si tu ne veux pas t'embêter à positionner les registres, tu peux aussi appeler les commandes BASIC SOUND, MUSIC et PLAY en ROM, c'est nettement plus simple...
Dans le cas où tes effets sonores et ta musique utilisent un ou plusieurs canaux identiques en revanche, pas de solution miracle... Il n'y a guère d'autre solution que d'alterner entre restitution de l'effet sonore et jeu de la musique, car "mixer" les 2 serait compliqué voire impossible... En général on s'arrange donc pour réserver un canal sonore et le canal de bruit aux effets sonores, et on utilise les 2 canaux restants pour la musique. Je n'ai pas d'exemple sur Oric (car souvent les jeux proposent soit des effets sonores soit de la musique, car faire les 2 prend énormément de temps CPU, et dans Stormlord par exemple on doit choisir l'un ou l'autre). En revanche sur ST, si tu prends un jeu emblématique comme Goldrunner (vidéo), tu pourras constater que lorsque le joueur tire avec son vaisseau, la musique n'est pas coupée, de même lorsqu'un sample est joué, la musique continue aussi... A priori, 1 canal son (et le canal bruit) est réservé aux effets sonores et la musique utilise les 2 autres canaux son. Il y a cependant les percussions qui utilisent aussi le canal bruit, donc je pense que niveau programmation sonore c'est extrêmement complexe.
Pour répondre à ta dernière question, il y a en fait 4 canaux: 3 canaux de forme d'onde carrée, et 1 canal de bruit blanc, qui peut être mixé soit à un seul canal "'son", soit à plusieurs des canaux son.
Tout ceci est très bien expliqué dans le manuel de l'Atmos par exemple, pour les commandes Basic SOUND, PLAY et MUSIC que tu peux appeler aussi en C en faisant un #include <sys/sound.h> au début de ton programme puis en faisant appel aux fonctions sound(), play() et music() qui sont définies dans ce header.
ATTENTION CEPENDANT, le header inclus dans l'OSDK (depuis la v1.5 au moins..) est incorrect et ne compile pas, j'ai du le corriger à la main il y a qq semaines pour les besoins de mon jeu "ElectrOric", je comptais envoyer le correctif à DBug, c'est l'occasion !!
Pour info, le pb dans ce header est la définition via #defines de "constantes" pour les notes dièse, qui utilise le caractère "-" qui n'est pas autorisé dans un nom de macro #define, et que j'ai donc tout simplement remplacé par le caractère de soulignement "_" et le suffixe "SHARP" (dièse en anglais).
Exemple:
#define NOTE_C- 2
remplacé par:
#define NOTE_C_SHARP 2
==> Je joins donc une version corrigée de ce header, à placer donc dans %OSDK%\include\sys
(NB: le forum permettant seulement l'ajout de certains types de fichiers, j'ai du mettre la pièce jointe dans une archive ZIP)
Si ton effet sonore et ta musique utilisent des canaux séparés, c'est assez simple, tu positionnes les valeurs des registres correspondant au canal ou aux canaux utilisés par ton effet sonore, tu "valides" pour déclencher la lecture par le PSG, puis tu positionnes les valeurs des registres correspondant au canal ou aux canaux utilisés par la 1ere note de ta musique, tu valides, et les sons des différents canaux se "superposent"... Après, suivant si ton effet sonore "dure" ou doit être modifié, tu modifies les registres nécessaires, puis tu alternes pour les registres des canaux de la musique, pour jouer les différentes notes...
Ceci étant, si tu ne veux pas t'embêter à positionner les registres, tu peux aussi appeler les commandes BASIC SOUND, MUSIC et PLAY en ROM, c'est nettement plus simple...
Dans le cas où tes effets sonores et ta musique utilisent un ou plusieurs canaux identiques en revanche, pas de solution miracle... Il n'y a guère d'autre solution que d'alterner entre restitution de l'effet sonore et jeu de la musique, car "mixer" les 2 serait compliqué voire impossible... En général on s'arrange donc pour réserver un canal sonore et le canal de bruit aux effets sonores, et on utilise les 2 canaux restants pour la musique. Je n'ai pas d'exemple sur Oric (car souvent les jeux proposent soit des effets sonores soit de la musique, car faire les 2 prend énormément de temps CPU, et dans Stormlord par exemple on doit choisir l'un ou l'autre). En revanche sur ST, si tu prends un jeu emblématique comme Goldrunner (vidéo), tu pourras constater que lorsque le joueur tire avec son vaisseau, la musique n'est pas coupée, de même lorsqu'un sample est joué, la musique continue aussi... A priori, 1 canal son (et le canal bruit) est réservé aux effets sonores et la musique utilise les 2 autres canaux son. Il y a cependant les percussions qui utilisent aussi le canal bruit, donc je pense que niveau programmation sonore c'est extrêmement complexe.
Pour répondre à ta dernière question, il y a en fait 4 canaux: 3 canaux de forme d'onde carrée, et 1 canal de bruit blanc, qui peut être mixé soit à un seul canal "'son", soit à plusieurs des canaux son.
Tout ceci est très bien expliqué dans le manuel de l'Atmos par exemple, pour les commandes Basic SOUND, PLAY et MUSIC que tu peux appeler aussi en C en faisant un #include <sys/sound.h> au début de ton programme puis en faisant appel aux fonctions sound(), play() et music() qui sont définies dans ce header.
ATTENTION CEPENDANT, le header
Pour info, le pb dans ce header est la définition via #defines de "constantes" pour les notes dièse, qui utilise le caractère "-" qui n'est pas autorisé dans un nom de macro #define, et que j'ai donc tout simplement remplacé par le caractère de soulignement "_" et le suffixe "SHARP" (dièse en anglais).
Exemple:
#define NOTE_C- 2
remplacé par:
#define NOTE_C_SHARP 2
==> Je joins donc une version corrigée de ce header, à placer donc dans %OSDK%\include\sys
(NB: le forum permettant seulement l'ajout de certains types de fichiers, j'ai du mettre la pièce jointe dans une archive ZIP)
- Fichiers joints
Re: musique en c
laurentd75 a écrit:C'est plus ou moins possible, en fonction précisément de combien de canaux tes sons et ta musique utilisent...
Si ton effet sonore et ta musique utilisent des canaux séparés, c'est assez simple, tu positionnes les valeurs des registres correspondant au canal ou aux canaux utilisés par ton effet sonore, tu "valides" pour déclencher la lecture par le PSG, puis tu positionnes les valeurs des registres correspondant au canal ou aux canaux utilisés par la 1ere note de ta musique, tu valides, et les sons des différents canaux se "superposent"... Après, suivant si ton effet sonore "dure" ou doit être modifié, tu modifies les registres nécessaires, puis tu alternes pour les registres des canaux de la musique, pour jouer les différentes notes...
Ceci étant, si tu ne veux pas t'embêter à positionner les registres, tu peux aussi appeler les commandes BASIC SOUND, MUSIC et PLAY en ROM, c'est nettement plus simple...
Dans le cas où tes effets sonores et ta musique utilisent un ou plusieurs canaux identiques en revanche, pas de solution miracle... Il n'y a guère d'autre solution que d'alterner entre restitution de l'effet sonore et jeu de la musique, car "mixer" les 2 serait compliqué voire impossible... En général on s'arrange donc pour réserver un canal sonore et le canal de bruit aux effets sonores, et on utilise les 2 canaux restants pour la musique. Je n'ai pas d'exemple sur Oric (car souvent les jeux proposent soit des effets sonores soit de la musique, car faire les 2 prend énormément de temps CPU, et dans Stormlord par exemple on doit choisir l'un ou l'autre). En revanche sur ST, si tu prends un jeu emblématique comme Goldrunner (vidéo), tu pourras constater que lorsque le joueur tire avec son vaisseau, la musique n'est pas coupée, de même lorsqu'un sample est joué, la musique continue aussi... A priori, 1 canal son (et le canal bruit) est réservé aux effets sonores et la musique utilise les 2 autres canaux son. Il y a cependant les percussions qui utilisent aussi le canal bruit, donc je pense que niveau programmation sonore c'est extrêmement complexe.
Pour répondre à ta dernière question, il y a en fait 4 canaux: 3 canaux de forme d'onde carrée, et 1 canal de bruit blanc, qui peut être mixé soit à un seul canal "'son", soit à plusieurs des canaux son.
Tout ceci est très bien expliqué dans le manuel de l'Atmos par exemple, pour les commandes Basic SOUND, PLAY et MUSIC que tu peux appeler aussi en C en faisant un #include <sys/sound.h> au début de ton programme puis en faisant appel aux fonctions sound(), play() et music() qui sont définies dans ce header.
ATTENTION CEPENDANT, le headerinclus dans l'OSDK (depuis la v1.5 au moins..) est incorrect et ne compile pas, j'ai du le corriger à la main il y a qq semaines pour les besoins de mon jeu "ElectrOric", je comptais envoyer le correctif à DBug, c'est l'occasion !!
Pour info, le pb dans ce header est la définition via #defines de "constantes" pour les notes dièse, qui utilise le caractère "-" qui n'est pas autorisé dans un nom de macro #define, et que j'ai donc tout simplement remplacé par le caractère de soulignement "_" et le suffixe "SHARP" (dièse en anglais).
Exemple:
#define NOTE_C- 2
remplacé par:
#define NOTE_C_SHARP 2
==> Je joins donc une version corrigée de ce header, à placer donc dans %OSDK%\include\sys
(NB: le forum permettant seulement l'ajout de certains types de fichiers, j'ai du mettre la pièce jointe dans une archive ZIP)
Merci Laurent de toutes ces précisions et le header, ça me parait encore un monde bien vaste, la programmation du son. Dans mon proto de jeu "rain panic" j'ai mis une variable compteur tempo=10 après chaque son de type 'ping zap, etc'. quand tempo atteint 0 je joue la note suivante de la musique. Je fais comme tu as indiqué, de l'alternance son/musique. Si tu veux je t'envoie mon proto pour que tu vois comment j'ai fait, si t'as des remarques. L'idéal serait que je joue ma musique dans l'interruption horloge pour qu'elle ait un rythme parfait, mais je ne sais pas encore assez bien utiliser l'assembleur pour ça. Si tu as la routine asm pour la musique et l'interruption horloge ça m’intéresse
goyo- Messages : 199
Date d'inscription : 02/05/2014
Age : 52
Localisation : Massy
Re: musique en c
On peut creer un tableau avec les notes et les temps. En détournant le vecteur d'interruption pour rajouter la routine son, on incrémente un nouveau timer a chaque nouvelle interruption, dès que la valeur correspond a celle du tableau, (temps de la note) on appelle la routine play ou sound pour jouer la nouvelle note du tableau.
kenneth- Modérateur
- Messages : 879
Date d'inscription : 13/01/2013
Age : 56
Localisation : 63
Re: musique en c
Salut Goyo,
Attention, je ne suis nullement un spécialiste de la programmation sonore sur Oric (même si c'est un domaine qui m'intéresse beaucoup), je galère d'ailleurs pas mal à faire des sons corrects et à jouer avec les enveloppes, mais n'hésite pas à poster ton proto dans ce sujet, je pourrai jeter un oeil et d'autres personnes plus calées comme Kenneth pourront sans doute aussi t'aider sur le sujet ou sur celui des interruptions, car sur les interruptions je suis vraiment néophyte, je n'ai jamais rien codé avec des interruptions en 6502, et il faudrait que je me "pose" un peu pour étudier le sujet car il y a plusieurs timers et je me mélange un peu les pinceaux !
Attention, je ne suis nullement un spécialiste de la programmation sonore sur Oric (même si c'est un domaine qui m'intéresse beaucoup), je galère d'ailleurs pas mal à faire des sons corrects et à jouer avec les enveloppes, mais n'hésite pas à poster ton proto dans ce sujet, je pourrai jeter un oeil et d'autres personnes plus calées comme Kenneth pourront sans doute aussi t'aider sur le sujet ou sur celui des interruptions, car sur les interruptions je suis vraiment néophyte, je n'ai jamais rien codé avec des interruptions en 6502, et il faudrait que je me "pose" un peu pour étudier le sujet car il y a plusieurs timers et je me mélange un peu les pinceaux !
Re: musique en c
laurentd75 a écrit:Salut Goyo,
Attention, je ne suis nullement un spécialiste de la programmation sonore sur Oric (même si c'est un domaine qui m'intéresse beaucoup), je galère d'ailleurs pas mal à faire des sons corrects et à jouer avec les enveloppes, mais n'hésite pas à poster ton proto dans ce sujet, je pourrai jeter un oeil et d'autres personnes plus calées comme Kenneth pourront sans doute aussi t'aider sur le sujet ou sur celui des interruptions, car sur les interruptions je suis vraiment néophyte, je n'ai jamais rien codé avec des interruptions en 6502, et il faudrait que je me "pose" un peu pour étudier le sujet car il y a plusieurs timers et je me mélange un peu les pinceaux !
j'ai vu le programme d'interruption horloge sur le Theoric 6 page 36. dommage que le code assembleur ne soit pas commenté.
Je vais un peu arranger mon programme proto avant de le poster. !
Je recherche un bruit de saut de saut (jump) que j' arrive pas à trouver avec la routine d'effet sonore similaire au ping, ni avec l'outil soundgen...
goyo- Messages : 199
Date d'inscription : 02/05/2014
Age : 52
Localisation : Massy
Re: musique en c
Salut Goyo,
Pour un effet sonore de saut, une astuce peut-être d'utiliser un des sons " d'hélicoptère" que tu peux trouver facilement, et de le couper après qq centaines de millisecondes avec un PLAY 0,0,0,0 pour juste garder une période du son.
Mais si tu veux réfléchir un peu plus, en gros, tu cherches sans doute un son sur un canal mixé avec le générateur de bruit et avec l'enveloppe n°1 ou n°2 (enveloppe descendante ou montante qui se coupe toute seule au bout de la période de l'enveloppe). Avec ces infos, tu devrais sans doute pouvoir jouer avec les paramètres pour trouver le son qui convient...
Sinon, tu peux aussi essayer de trouver le son qui te convient dans un jeu existant en BASIC et récupérer les paramètres de ce son (instructions PLAY et SOUND utilisées pour le bruitage).
Pour un effet sonore de saut, une astuce peut-être d'utiliser un des sons " d'hélicoptère" que tu peux trouver facilement, et de le couper après qq centaines de millisecondes avec un PLAY 0,0,0,0 pour juste garder une période du son.
Mais si tu veux réfléchir un peu plus, en gros, tu cherches sans doute un son sur un canal mixé avec le générateur de bruit et avec l'enveloppe n°1 ou n°2 (enveloppe descendante ou montante qui se coupe toute seule au bout de la période de l'enveloppe). Avec ces infos, tu devrais sans doute pouvoir jouer avec les paramètres pour trouver le son qui convient...
Sinon, tu peux aussi essayer de trouver le son qui te convient dans un jeu existant en BASIC et récupérer les paramètres de ce son (instructions PLAY et SOUND utilisées pour le bruitage).
Re: musique en c
laurentd75 a écrit:Salut Goyo,
Pour un effet sonore de saut, une astuce peut-être d'utiliser un des sons " d'hélicoptère" que tu peux trouver facilement, et de le couper après qq centaines de millisecondes avec un PLAY 0,0,0,0 pour juste garder une période du son.
Mais si tu veux réfléchir un peu plus, en gros, tu cherches sans doute un son sur un canal mixé avec le générateur de bruit et avec l'enveloppe n°1 ou n°2 (enveloppe descendante ou montante qui se coupe toute seule au bout de la période de l'enveloppe). Avec ces infos, tu devrais sans doute pouvoir jouer avec les paramètres pour trouver le son qui convient...
Sinon, tu peux aussi essayer de trouver le son qui te convient dans un jeu existant en BASIC et récupérer les paramètres de ce son (instructions PLAY et SOUND utilisées pour le bruitage).
Merci Laurentd75,
oui je peux essayer de bidouiller un son avec la routine rom de $FA86 même si dans les 14 paramètres y a des comportements assez bizaroides ..
je peux aussi utiliser l'outil soundgen pour chercher et faire des expériences.
je trouve que zap rensemble pas mal à un bruit de saut mais ZAP n'utilise pas que cette routine rom mais un autre en plus j'ai cru comprendre...
oui play et sound . je ne les ai pas trop utilisées mais ça peut être une occasion de mieux les pratiquer..
goyo- Messages : 199
Date d'inscription : 02/05/2014
Age : 52
Localisation : Massy
Page 2 sur 2 • 1, 2
Sujets similaires
» Musique du Jeu AtariST Wizzball
» La musique de Lone Raider
» Musique de Goldorak sur Oric
» Faire mumuse avec la musique
» J'ai fais la musique de Duck Hunt sur Atmos
» La musique de Lone Raider
» Musique de Goldorak sur Oric
» Faire mumuse avec la musique
» J'ai fais la musique de Duck Hunt sur Atmos
Forum Oric :: Forums :: Forum Public :: Programmation en C
Page 2 sur 2
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|
Dim 31 Mar 2024 - 14:35 par kenneth
» Bla Bla général du Jury
Jeu 21 Mar 2024 - 8:51 par Dom50
» carte mère Oric (re)tracée
Mar 5 Mar 2024 - 18:54 par kenneth
» Meurtre à Grande Vitesse
Dim 25 Fév 2024 - 5:09 par Iurius
» ORIC-1 sur LE BON COIN
Ven 23 Fév 2024 - 23:01 par Mcar
» ORIC ATMOS sur LE BON COIN
Dim 4 Fév 2024 - 12:06 par kiwilevrai
» Problème d'affichage des couleurs avec un Oric Atmos
Sam 27 Jan 2024 - 1:26 par pierbail
» Bienvenue dans le Forum des Oriciens
Mar 9 Jan 2024 - 12:33 par Dom50
» Rencontre avec Laurant Weill, co-fondateur de Loriciel, et mon garçon de 12 ans
Ven 29 Déc 2023 - 14:13 par Arcade-des-Monts
» Bonnes fêtes
Mar 26 Déc 2023 - 10:21 par Dom50
» Murders in Venice / Meutres à Venise
Sam 18 Nov 2023 - 22:44 par retroric
» Un clavier PS/2 pour tester un ORIC
Dim 27 Aoû 2023 - 9:49 par Voyageur
» Disquette 3" Sedoric
Mar 1 Aoû 2023 - 14:22 par AtomeX
» faire un 6502 avec des phototransistor
Dim 16 Juil 2023 - 17:26 par Voyageur
» Oricutron linux et DSK
Jeu 29 Juin 2023 - 18:34 par Voyageur