Сэмплированный источник

Предыдущая  Содержание  Следующая  V*D*V

Ниже приведены данные из программы синтезатора  Клатта, содержащие информацию о сэмплированном голосовом импульсе, а так же код, производящий интерполяцию данных для любого значения частоты дискретизации.

Код

 //сэмплированная производная объемной скорости

 private static final double SAMPLE_FACTOR = 0.01;

 private static final int natural_samples[] =

 {

         -310, -400, 530, 356, 224, 89, 23, -10, -58, -16,

         461, 599, 536, 701, 770, 605, 497, 461, 560, 404,

         110, 224, 131, 104, -97, 155, 278, -154, -1165, -598,

         737, 125, -592, 41, 11, -247, -10, 65, 92, 80,

         -304, 71, 167, -1, 122, 233, 161, -43, 278, 479,

         485, 407, 266, 650, 134, 80, 236, 68, 260, 269,

         179, 53, 140, 275, 293, 296, 104, 257, 152, 311,

         182, 263, 245, 125, 314, 140, 44, 203, 230, -235,

         -286, 23, 107, 92, -91, 38, 464, 443, 176, 98,

         -784, -2449, -1891, -1045, -1600, -1462, -1384, -1261, -949, -730

 };

 /**

  * возвращает значение сэмплированной производной объемной скорости

  * @param period - период тона

  * @param phase - фаза

  * @return производная объемной скорости, -24.49...+7.70

  */

 public static double getSampledPulse(int period, int phase)

 {

         long id = ((phase * (natural_samples.length-1)) << 15) / period;

         int i = (int)(id >> 15);

         int p = natural_samples[i];

         int n = natural_samples[i + 1];

         int res = p + (n - p) * (int)(id&0x7fff) / 32768;

         return res * SAMPLE_FACTOR;

 }

Предыдущая  Содержание  Следующая