标签: sound-synthesis

如何在一段时间内准确计算正弦波

用例是为数字合成生成正弦波,因此,我们需要计算sin(dt)的所有值,其中:

t是整数,表示样本编号.这是可变的.对于CD质量的一小时声音,范围从0到158,760,000.

d是double,表示角度的增量.这是不变的.范围是:大于0,小于pi.

目标是使用传统的intdouble数据类型实现高精度.表现并不重要.

天真的实施是:

double next()
{
    t++;
    return sin( ((double) t) * (d) );
}
Run Code Online (Sandbox Code Playgroud)

但是,问题是当t增加时,精度会降低,因为大数字提供给"罪"功能.

改进版本如下:

double next()
{
    d_sum += d;
    if (d_sum >= (M_PI*2)) d_sum -= (M_PI*2);

    return sin(d_sum);
}
Run Code Online (Sandbox Code Playgroud)

在这里,我确保提供从0到2*pi到"sin"函数的数字.

但是,现在问题是当d很小时,会有许多小的增加,每次都会降低精度.

这里的问题是如何提高准确性.


附录1

"准确性降低,因为大数字提供给"罪"功能":

#include <stdio.h>
#include <math.h>

#define TEST      (300000006.7846112)
#define TEST_MOD  (0.0463259891528704262050786960234519968548937998410258872449766)
#define SIN_TEST  (0.0463094209176730795999323058165987662490610492247070175523420)

int main()
{
    double a = sin(TEST);
    double b = sin(TEST_MOD);

    printf("a=%0.20f \n" , a);
    printf("diff=%0.20f \n" …
Run Code Online (Sandbox Code Playgroud)

c algorithm audio trigonometry sound-synthesis

6
推荐指数
1
解决办法
257
查看次数

FFT音高检测 - 旋律提取

我正在创建一个音调检测程序,它从帧的FFT中获得的功率谱中提取基频.这是我到目前为止:

  • 将输入音频信号分成帧.
  • 用汉明窗口乘帧
  • 计算帧的FFT和幅度sqrt(real ^ 2 + img ^ 2)
  • 通过谐波产物谱找到基频(峰值)
  • 将峰值频率(频率频率)转换为音符(例如~440 Hz为A4)

现在程序生成一个整数,每帧的值从0到87.每个整数对应于根据此处找到的公式I的钢琴音符.我现在试图通过基于计算的音符合成声音来模仿输入信号中的旋律.我试图简单地生成一个正弦波,其幅度和频率对应于基频,但结果听起来没有原始声音(几乎听起来像随机的哔哔声).

我根本不了解音乐所以我可以根据从基频得到的信息,根据输入(乐器,声音,乐器+声音)产生类似声音的声音吗?如果没有,我可以尝试使用我目前拥有的代码.

谢谢!

audio signal-processing fft pitch sound-synthesis

5
推荐指数
2
解决办法
1万
查看次数

Android声音合成

我正在尝试使用AudioTrack类播放合成声音(基本上是2个正弦波和一些噪声).它似乎与javax.sound.sampled中的SourceDataLine没有任何不同,但合成真的很慢.即使对于ARM标准,认为32768个样本(16位,立体声,总共65536)在Nexus 4上渲染需要1秒钟(用System.nanotime()测量,写入AudioTrack除外)是不现实的.合成部分与此http://audioprograming.wordpress.com/2012/10/18/a-simple-synth-in-android-step-by-step-guide-using-the-java-sdk/几乎完全相同,唯一的区别是我播放立体声(我无法将其降低为单声道,因为它是双耳音).

有任何想法吗?我能做什么?

提前致谢

audio android sound-synthesis audiotrack

4
推荐指数
2
解决办法
4523
查看次数

SID文件格式解析

我想为.sid文件(C64 chiptunes的音乐)编写一个解析器,将一些模式提取到音符中.我搜索格式并找到了这个:http://cpansearch.perl.org/src/LALA/Audio-SID-3.11/SID_file_format.txt

我可以读取该文档中的标题,但我不明白如何提取单个注释并输出它们.

我搜索准备好的转换器,发现这些:

这是我发现了一些,但StackOverflow说,我不能发布超过2个链接.

请帮忙.对不起,我的英语不好.谢谢你的考虑!

parsing c64 converter sound-synthesis

4
推荐指数
1
解决办法
313
查看次数

为什么此代码会产生非常嘈杂的正弦波?

我试图用Java编写一个非常简单的声音合成器。我正在使用javax.sound.sampled包裹。下面的代码可以工作,但是正弦波非常嘈杂,听起来像是在波浪旁边播放了一些安静的暖噪声。

try {
    double sampleRate = 44100;
    //8 bits per sample, so a byte.
    AudioFormat audioFormat = new AudioFormat((float) sampleRate, 8, 1, true, false);
    SourceDataLine line = AudioSystem.getSourceDataLine(audioFormat);

    line.open(audioFormat);
    line.start();

    //A4
    double freq = 440.0;

    byte[] buf = new byte[1];

    //the formula for a sample is amplitude * sin(2.0 * PI * freq * time)
    for (int i = 0; i < sampleRate; i++) {
        double t = (i / (sampleRate - 1));
        double sample = 0.1 * …
Run Code Online (Sandbox Code Playgroud)

java sound-synthesis sine-wave

4
推荐指数
1
解决办法
84
查看次数

免费波表合成器?

我需要在 ARM Cortex-M3 内核中实现波表合成器。我正在寻找任何代码或工具来帮助我入门。

我知道这个 AVR 实现。我实际上不久前将其转换为 PIC。现在我正在寻找类似的东西,但听起来更好一点。

ANSI C 代码会很棒。任何代码片段(C 或 C++)、示例、工具或只是一般信息将不胜感激。

谢谢。

audio microcontroller arm synthesizer sound-synthesis

2
推荐指数
1
解决办法
4740
查看次数

定制振荡器的任意波表

我需要为振荡器创建一个特定的自定义波形,以便与Web Audio API一起使用.

我有一个Javascript函数来输出所需的波形(对于任何给定的x,计算a在-1和1之间),绘制的结果如下所示:

自定义波形

但是,Web Audio API 文档只允许您通过createPeriodicWave函数创建基于谐波表的自定义波表,然后可以使用该表来配置自定义振荡器setPeriodicWave.是否有一种通用技术可用于根据我的波形函数计算谐波表?

fft sound-synthesis web-audio-api

2
推荐指数
1
解决办法
723
查看次数

生成正弦扫频波

如何制定生成正弦扫频波的方程。我对信号处理很陌生,在网上找不到太多有关生成正弦扫频波的主题。请向我指出一些可用于生成方程式并在代码中使用的来源。谢谢。

c signal-processing sound-synthesis

-1
推荐指数
1
解决办法
1万
查看次数