سؤال

أنا أبحث في كتابة الصوت syntesizer في جاوة ، و أتساءل عما إذا كان أي شخص لديه أي نصيحة أو موارد جيدة لكتابة مثل هذا البرنامج.أنا أبحث عن معلومات عن توليد الخام الموجات الصوتية, كيفية إخراج عليها في شكل قابل للاستخدام (اللعب أكثر المتكلمين) ، وكذلك نظرية عامة حول هذا الموضوع.شكرا لكم أيها الرجال.

هل كانت مفيدة؟

المحلول

  1. هذه المشكلة هي في الأساس عن وظائف رسم الخرائط إلى صفائف من الأرقام.اللغة التي تدعم وظائف من الدرجة الأولى سوف تأتي في متناول اليدين حقا هنا.

  2. تحقق من http://www.harmony-central.com/Computer/Programming و http://www.developer.com/java/other/article.php/3071021 بعض جافا-معلومات ذات صلة.

  3. إذا كنت لا تعرف المفاهيم الأساسية ترميز الصوت البيانات ، ثم قراءة http://en.wikipedia.org/wiki/Sampling_rate

  4. الكنسي شكل الموجة هو بسيط جدا ، انظر http://www.lightlink.com/tjweber/StripWav/Canon.html.رأس (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;

أنا غير متأكد حول جافا.أعتقد أن عليك أن تكون بديلا "البنية" مع "الطبقة" و "باطل* البيانات" مع "char[] البيانات" أو "قصيرة[] البيانات" أو "int[] البيانات" المقابلة إلى عدد البتات في العينة ، كما هو محدد في مجال 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
}

مرة أخرى أنا غير متأكد حول جافا ولكن التحويل يجب أن تكون واضحة إذا قمت بتحويل الفراغ-مؤشر إلى الصفيف المقابلة البت.

ثم ببساطة كتابة الهيكل بأكمله إلى ملف للحصول على لعب موجة الملف.

نصائح أخرى

تحقق من Frinika.إنه كامل المواصفات محطة الموسيقى تنفيذها في جافا (مفتوحة المصدر).باستخدام API يمكنك تشغيل midi الأحداث من خلال المزج, قراءة الخام إخراج الصوت و الكتابة إلى ملف WAV (انظر التعليمات البرمجية المصدر الرابط أدناه).

معلومات إضافية:

أثناء دراسته للحصول على درجة بلدي, بلدي أطروحة المشروع إنشاء جافا القائمة على المزج وحدات الجامعة التي درست رأى من المناسب أن أجعل التقرير متاحة للجمهور:

برنامج بناء وحدات المزج في جافا

أنا لا أعرف إذا كان ذلك يساعد ، ولكن إذا كان يمكنك استخدام MIDI أي شيء يجب أن تحقق JFuge.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top