رفتن به مطلب
  • 0

چند سئوال در مورد استفاده از کتابخانه FMOD برای تغییر صدا


sajjad244

سوال

سلام وقت بخیر دوستان

 

بنده از کتابخونه FMOD برای ساخت یه برنامه تغییر صدا دارم استفاده میکنم . چندتا سئوال دارم .

1- چطوری میتونم روند ذخیره یا همون پراگرس بار ذخیره شدن رو بگیرم؟

2- چطوری میتونم موقع پخش امکان Pause/Play/Stop و سیک بار جلو و عقب بردن اضافه کنم؟

3- مورد بعد هم اینکه اینارو میخوام از طریق اکتیویتی جاوا کنترل کنم نه از داخل کد ++C چطوری باید انجام بدم؟

این هم کد های سمت سی پلاس پلاس که اصلش اینها هستن کد جاوا هم نیاز بود بفرمایید قرار بدم.

 

System *system;
Sound *sound;
DSP *dsp;
Channel *channel;
float frequency;
bool isPlaying = true;
FMOD_RESULT result;


System_Create(&system);
if (save == 1) {
  
  // برای ذخیره کردن
    unsigned int outputhandle;
    system->setOutput(FMOD_OUTPUTTYPE_WAVWRITER);
    system->init(32, FMOD_INIT_NORMAL,(void *) "/sdcard/sound.mp3");


} else{
    system->init(32, FMOD_INIT_NORMAL, NULL);
}


const char *path_cstr = env->GetStringUTFChars(path_jstr, NULL);

// ساخت افکت های مختلف از صدا
try {
    system->createSound(path_cstr, FMOD_DEFAULT, NULL, &sound);
    switch (type) {
        case TYPE_NORMAL: 
            LOGI("%s", path_cstr)
            system->playSound(sound, 0, false, &channel);
            LOGI("%s", "fix normal");
            break;
        case TYPE_LOLITA: 
            system->createDSPByType(FMOD_DSP_TYPE_PITCHSHIFT, &dsp);   
            dsp->setParameterFloat(FMOD_DSP_PITCHSHIFT_PITCH, 8.0);     
            system->playSound(sound, 0, false, &channel);
            channel->addDSP(0, dsp);
            break;

        case TYPE_UNCLE:  
            system->createDSPByType(FMOD_DSP_TYPE_PITCHSHIFT, &dsp);
            dsp->setParameterFloat(FMOD_DSP_PITCHSHIFT_PITCH, 0.8);
            system->playSound(sound, 0, false, &channel);
            channel->addDSP(0, dsp);
            break;

        case TYPE_THRILLER:  
            system->createDSPByType(FMOD_DSP_TYPE_TREMOLO, &dsp);    
            dsp->setParameterFloat(FMOD_DSP_TREMOLO_SKEW, 5);         
            system->playSound(sound, 0, false, &channel);
            channel->addDSP(0, dsp);


            break;
        case TYPE_FUNNY:  
            system->createDSPByType(FMOD_DSP_TYPE_NORMALIZE, &dsp);    
            system->playSound(sound, 0, false, &channel);
            channel->addDSP(0, dsp);

            channel->getFrequency(&frequency);
            frequency = frequency * 2;                                  
            channel->setFrequency(frequency);
            break;
        case TYPE_ETHEREAL: 
            system->createDSPByType(FMOD_DSP_TYPE_ECHO, &dsp);          
            dsp->setParameterFloat(FMOD_DSP_ECHO_DELAY, 300);           
            dsp->setParameterFloat(FMOD_DSP_ECHO_FEEDBACK, 20);        

            system->playSound(sound, 0, false, &channel);
            channel->addDSP(0, dsp);
            break;
        case TYPE_Sajjad: 

            system->createDSPByType(FMOD_DSP_TYPE_CHORUS, &dsp);
            dsp->setParameterFloat(FMOD_DSP_CHORUS_DEPTH, 90.0f);

            system->playSound(sound, 0, false, &channel);

            channel->addDSP(0, dsp);
            channel->getFrequency(&frequency);
           // frequency = frequency * 2;                                 
            channel->setFrequency(frequency);

            break;


    }
} catch (...) {
    LOGE("%s", "catch exception...")
    goto end;
}

system->update();

while (isPlaying) {
    channel->isPlaying(&isPlaying);
    usleep(1000 * 1000);
}

goto end;


end:
env->ReleaseStringUTFChars(path_jstr, path_cstr);
sound->release();
system->close();
system->release();

ممنون میشم راهنمایی بفرمایید

 

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

0 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

هنوز برای این سوال پاسخی ارسال نشده است

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...