Comment créer un tampon circulaire sur le tas dans VB.NET?Tampon circulaire dans VB.NET
Ceci serait utilisé pour la lecture audio via P/Invoke pour winmm.dll waveoutopen et waveoutwrite pour supporter le développement d'un synthé logiciel. J'utilise actuellement la classe marshall pour construire un tableau régulier d'octets dans le tas.
Je ne pense pas que je puisse utiliser une liste chaînée car je dois simplement passer un pointeur vers un bloc de mémoire vers l'API winmm. Mon travail en cours est ici: http://waveout.codeplex.com/SourceControl/changeset/view/43602#798077 J'essaie de faire pivoter les tampons sur le rappel à partir du moment où une lecture de tampon est terminée, mais ce n'est pas strictement circulaire tampon – PeanutPower
OK, j'ai jeté un coup d'oeil ... Il semble que vous créez vos "échantillons" dans une file d'attente/tableau puis Marshall.write octet par octet dans le tas, puis passez le ptr à la DLL multimédia. Que diriez-vous de créer une structure de données explicitement définie (c'est-à-dire des données LChannel suivies immédiatement par des données RChannel) puis de passer le pointeur à la structure à MM_ddl? Il est concevable de remplacer des données sur le "frontal" pendant que les données sont jouées. Ou vous pourriez avoir un arrangement de flip-flop où vous passez un tableau à MM_dll pendant que vous remplissez une seconde, puis passez celui-là, et retournez et remplissez le premier à nouveau. – tobrien
La structure serait créée assez grande pour contenir les 44100 échantillons dont vous avez besoin par seconde. – tobrien