Я пытаюсь сделать треугольные волны для аудиомагнитофона через измерение. Я использую AVAudioRecorder, это означает, что быстрое преобразование Фурье не будет работать в этом случае (во-вторых, у меня недостаточно знаний о том, как его реализовать). Я нашел this project на github. В этом проекте автор использует следующее уравнение, чтобы сделать гладкую синусоиду:Использовать измерение AVAudioRecorder, чтобы сделать треугольную волну
CGFloat y = scaling * self.maxAmplitude * normedAmplitude * sinf(2 * M_PI *(x/self.waveWidth) * self.frequency + self.phase) + (self.waveHeight * 0.5);
Если рассматривать эту sinf(2 * M_PI *(x/self.waveWidth) * self.frequency + self.phase)
части уравнения вы увидите, что это уравнение синусоиды (wikipedia). Если я заменил эту часть уравнением треугольного уравнения (wikipedia), он все еще делает синусоидальную волну с небольшой разницей. Я хочу преобразовать это уравнение таким образом, чтобы вместо синусоидальной волны формировалась треугольная волна.
Мой треугольник волновое уравнение выглядит следующим образом:
CGFloat t = x/self.waveWidth;
CGFloat numerator = sinf((2.0 * M_PI * (2.0 * self.amplitude + 1.0) * self.frequency * t));
CGFloat denominator = (2.0 * self.amplitude + 1.0) * (2.0 * self.amplitude + 1.0);
CGFloat multiplyer = (8.0/pow(M_PI, 2.0));
CGFloat result = multiplyer * (numerator/denominator);
Тогда, наконец, у позиции вычисляется по формуле:
y = (result * scaling * self.maxAmplitude * normedAmplitude) + (self.waveHeight * 0.5);
Анимация также выглядят неестественно. Вывод этого уравнения:
Благодаря
Подождите, чтобы вы хотели создать треугольную волну в соответствии с микрофонным входом (входная частота, амплитуда и т. Д.)? Что такое waveWidth в уравнении, которое вы используете? –
Если вы посмотрите в коде «Waver», вы увидите, что waveWidth равен ширине представления. –
Просто хотите уточнить, вы уже пытались вставить треугольную волну, но вы все еще получаете форму синусоиды? –