gpt4 book ai didi

java - 初学者数字合成器

转载 作者:行者123 更新时间:2023-12-04 17:14:26 27 4
gpt4 key购买 nike

关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。












想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。

2年前关闭。




Improve this question




我正在考虑用 Java 编写音频合成器,并且想知道是否有人对编写这样的程序有任何建议或好的资源。我正在寻找有关生成原始声波、如何将它们输出为可用形式(通过扬声器播放)以及有关该主题的一般理论的信息。谢谢你们。

最佳答案

  • 这个问题基本上是关于将函数映射到数字数组。一种支持一流功能的语言在这里会派上用场。
  • 查看
    http://www.harmony-central.com/Computer/Programming
    http://www.developer.com/java/other/article.php/3071021一些Java相关的信息。
  • 如果您不了解编码声音数据的基本概念,那么请阅读 http://en.wikipedia.org/wiki/Sampling_rate
  • 规范的 WAVE 格式非常简单,见 http://www.lightlink.com/tjweber/StripWav/Canon.html . header (前 44 个字节)+ 波形数据。你不需要任何库来实现它。

  • 在 C/C++ 中,相应的数据结构如下所示:

    typedef struct _WAVstruct
    {
    char headertag[4];
    unsigned int remnantlength;
    char fileid[4];

    char fmtchunktag[4];
    unsigned int fmtlength;
    unsigned short fmttag;
    unsigned short channels;
    unsigned int samplerate;
    unsigned int bypse;
    unsigned short ba;
    unsigned short bipsa;

    char datatag[4];
    unsigned int datalength;

    void* data; //<--- that's where the raw sound-data goes
    }* WAVstruct;

    我不确定Java。我想你必须用“class”和“void* data”替换“struct”,用“char[] data”或“short[] data”或“int[] data”,对应于每个的位数样本,如字段 bipsa 中所定义。

    要用数据填充它,你可以在 C/C++ 中使用类似的东西:

    int data2WAVstruct(unsigned short channels, unsigned short bipsa, unsigned int samplerate, unsigned int datalength, void* data, WAVstruct result)
    {
    result->headertag[0] = 'R';
    result->headertag[1] = 'I';
    result->headertag[2] = 'F';
    result->headertag[3] = 'F';
    result->remnantlength = 44 + datalength - 8;
    result->fileid[0] = 'W';
    result->fileid[1] = 'A';
    result->fileid[2] = 'V';
    result->fileid[3] = 'E';

    result->fmtchunktag[0] = 'f';
    result->fmtchunktag[1] = 'm';
    result->fmtchunktag[2] = 't';
    result->fmtchunktag[3] = ' ';
    result->fmtlength = 0x00000010;
    result->fmttag = 1;
    result->channels = channels;
    result->samplerate = samplerate;
    result->bipsa = bipsa;
    result->ba = channels*bipsa / 8;
    result->bypse = samplerate*result->ba;

    result->datatag[0] = 'd';
    result->datatag[1] = 'a';
    result->datatag[2] = 't';
    result->datatag[3] = 'a';
    result->datalength = datalength;

    result->data = data; // <--- that's were the data comes in

    return 0; // an error code, not implemented, yet ...; in Java: return result
    }

    同样,我不确定 Java,但如果将空指针转换为与比特率对应的数组,转换应该很简单。

    然后只需将整个结构写入文件即可获得可播放的波形文件。

    关于java - 初学者数字合成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36567/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com