c中的时间/换档

时间:2014-05-13 21:31:36

标签: c shift pitch rubber pitch-shifting

我是C的新手。作为Uni项目的一部分,我需要整理一个以某种形式处理音频的程序。所以,我决定做一个音高变换器。到目前为止,我设法至少使程序处理成为音频文件,如果不是实际改变声音的话。我已经研究过使用samplerate,但是从我收集的内容来看,它并没有给我预期的结果。

我已经下载并编辑了橡皮带库,但我不确定从哪里开始与我的工作一起使用它。我只是想知道是否有人有任何提示/经验,也许是为了实现类似的事情?

void shiftsoundfile() {


    //Part 1 - File input and reading

        SNDFILE *inputsf, *outputsf;
        SF_INFO  ininfo, outinfo2;
        SRC_DATA src_data;

        static float datain [BUFFER_LEN];
        static float dataout [BUFFER_LEN]; 


        int readfile; 


            const char *inputsfname = "Scifi.wav";
            const char *outputsfname = "Scifi2.wav";


                ininfo.format = 0;
            if ( !(inputsf = sf_open(inputsfname, SFM_READ, &ininfo)))
                if (inputsf != inputsfname)
                {
                    printf("The file could not be opened.\n");
                    exit(0);
                }



            outputsf = sf_open (outputsfname, SFM_WRITE, &ininfo); 

            inputsf = sf_open (inputsfname, SFM_READ, &outinfo2);



            //Part 2 - Audio file conversion

            //>>SOMETHING NEEDS TO GO HERE TO PERFORM THE CONVERSION<<
                        //librubberband perhaps, or something along these lines?...

                            /*float shift [BUFFER_LEN];
                int j;
                for (j = 0; j < readfile; j++) {
                 shift [j] = datain [j]; }

                for (j = 0; j < readfile; j++) {
                 datain [j] = shift [j]; }*/ //?


            //Part 3 - Outputting the new audio file

            while (readfile = sf_read_float (inputsf, datain, BUFFER_LEN)) 
            {


                sf_write_float (outputsf, datain, BUFFER_LEN);
                //Write's the data in the array, pointed to by outputsf, to the file
            }




            sf_close (inputsf); //closes the 'osf' function
            sf_close (outputsf); //closes the 'csf' function

0 个答案:

没有答案