ios - 在 Objective-C 中创建方波、锯齿波和三角波

标签 ios objective-c audio trigonometry synthesizer

我正在尝试为我正在开发的一个简单的波表合成器 iOS 应用程序生成不同的波形。这就是我生成正弦波的方式:

        if (waveType == 1) // sine wave
    {
        //NSLog(@"sine in AU");
        for (int i=0;i<n;i++)
        {
            float x = 0.0;        // default to silence
            if (toneCount > 0)  // or create a sinewave
            {
                x = testVolume * sinf(ph);
                ph = ph + dp;

                if (ph > M_PI) { ph -= 2.0 * M_PI; } // sine wave

                toneCount -= 1;    // decrement tone length counter
            }
            if (ptrLeft  != NULL){
                ptrLeft[ i] = x;
            }
            if (ptrRight != NULL) {
                ptrRight[i] = x;
            }
        }
    }

对于方波,我假设这会起作用,但它没有:
if (ph > M_PI) { 
ph -= 2.0 * M_PI;
ph >= 0 ? 1.0 : -1.0;
}

我将如何创建锯齿波和三角波,方波哪里出错了?

谢谢,我是 iOS 编程新手,喜欢使用音频。

最佳答案

对于初学者来说,想想你的路线

if (ph > M_PI) { ph -= 2.0 * M_PI; } // sine wave
ph是您对 sin 函数的输入,它是以弧度为单位的某个值...请注意,sin 函数将自动处理大于 2 * PI 的值,它只会将其包裹起来,因此无需管理您的 ph变量,然后简单地增加它

关于您的方波......请记住,您的输出只有两个低或高值......不要通过曲线值驱动低/高之间的切换
if (ph > M_PI) { 
    ph -= 2.0 * M_PI;
    ph >= 0 ? 1.0 : -1.0;
}

请记住,随着您增加外循环 i您正在递增 ph您使用它来确定您在 PI 周期中的位置,这没关系,但是相同的 ph那么也不能输入到 sin(ph) ......必须将其他东西输入到 sin() 中,否则其他东西会在您的 PI 周期中保持您的样本位置......您错误地将两个职责混为一个变量

在上面,如果代码块考虑何时必须执行从低到高或从高到低的切换......它是否发生在 M_PI ?每个周期发生多少次这样的切换?什么时候 ?也许您需要一个额外的 if 测试来确定何时执行该切换......在您的 sin 曲线算法中,您已经在管理 ph,您必须以不同的方式处理方波 ph 还是保持 ph 逻辑相同?

关于ios - 在 Objective-C 中创建方波、锯齿波和三角波,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49743979/

相关文章:

objective-c - NSView mouseMoved 事件有时不会触发

ios - 使用 Stackmob getLoggedInUserOnSuccess :^(NSDictionary *result) onFailure:^(Error *error) method

c# - 在WPF C#中使用NAudio录制音频

html - Mathjax 的 iOS Swift 语法

ios - UIBarButtonItem 色调在 iOS7 设备上的 6.1 应用程序中不起作用

ios - 将 Obj-c iOS 应用程序转换为 Swift 时出现链接器错误

audio - 如何在3D游戏中模拟声音物理?

ios - 在工作区中向现有项目添加核心图框架时出现问题

objective-c - prefix 属性后面必须跟一个接口(interface)或协议(protocol)栈溢出

javascript - 如何解决HTML中的音频在各种浏览器中无法播放