0

我对 C 很陌生。作为 Uni 项目的一部分,我需要编写一个以某种形式处理音频的程序。所以,我决定做一个音高变换器。到目前为止,我至少已经设法让程序处理音频文件,如果没有真正改变声音的话。我已经研究过使用采样率,但从我收集到的信息来看,它不会给我想要的结果。

我已经下载并编译了橡皮筋库,但我不确定从哪里开始将它与我的工作结合使用。我只是想知道是否有人对此有任何提示/经验,也许是为了实现类似的目标?

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
4

0 回答 0