Quelqu'un sait-il comment créer une onde sonore ARBITRARY en C# et la lire depuis les haut-parleurs?Génération réelle de sons de bas niveau en C#?
Ce problème est survenu de temps en temps depuis des années, je finis toujours par l'abandonner après beaucoup d'échecs sans trouver de solution. Ce que je veux faire est comme un reverse-visualizer, c'est-à-dire que je ne veux pas générer de "nombres" à partir du son, je veux générer du son à partir de nombres. Comme obtenir une fonction que je fournis avec la fréquence d'échantillonnage, la taille de l'échantillon, et les données sonores (un tableau d'entiers par exemple), et cela génèrerait le fichier wav approprié (la lecture du son en temps réel serait idéale mais je serais plus que content de ça aussi). Je sais que les spécifications du fichier wav sont partout dans l'interweb, et j'ai fait plusieurs tentatives en créant la fonction ci-dessus, j'ai eu du succès pour les basses fréquences, mais une fois que je commence à jouer avec des bits par échantillon, etc. , désordre incontrôlable.
N'est-ce pas déjà fait? Cela ne me dérangerait pas ce qu'il utilise, tant qu'il y a un wrapper géré par .NET pour cela (et je peux y accéder du VS le plus récent à l'heure). XNA ne prend pas en charge l'audio de bas niveau de cette façon. J'ai également trouvé plusieurs exemples qui prétendent réaliser quelque chose de similaire, mais soit ils ne fonctionnent pas du tout, soit ils font quelque chose de complètement différent.
Merci.
Cela a l'air vraiment génial, et j'ai vraiment honte mais je n'ai pas encore eu le temps de vraiment jouer avec. Juste une question: Est-il facile de faire 4 octets par échantillon? – jssyjrm
Vous pouvez faire 4 octets par échantillon mais je ne sais pas si Windows va le lire. Ça pourrait, je ne sais pas. Quoi qu'il en soit, si vous voulez faire cela, changez toutes les références à sizeof (short) en sizeof (int), changez le type d'échantillon en int, changez le facteur d'échelle (short.MaxValue) en int.MaxValue et corrige la boucle qui remplit le tableau d'octets pour ajouter quatre octets par échantillon. Mais je serais surpris si vous pouvez entendre une différence. – arx
Merci beaucoup pour cela. Comment puis-je ajouter une fonctionnalité d'arrêt (et peut-être une pause) ici? Je suppose que j'ai besoin d'un travailleur de fond afin que le reste de l'interface graphique est libre pour la saisie. Quel genre de code ressemblerait un «son d'arrêt»? –