lame verwenden um mp3 datei zu lesen und wieder speichern



  • hi, warum bekomme ich bei folgendem code eine exeption wenn ich read = hip_decode_headers aufrufe? zum code soll noch ein filter implementiert werden...

    lg

    int main()
    {
    	int read, write;
    
        FILE *mp3_in = fopen("music_noisy.mp3", "rb");
        FILE *mp3_out = fopen("music_noisy2.mp3", "wb");
    
        const int PCM_SIZE = 8192;
        const int MP3_SIZE = 8192;
    
    	short int pcm_buffer[PCM_SIZE*2];
        short int pcm_buffer1[PCM_SIZE];
    	short int pcm_buffer2[PCM_SIZE];
        unsigned char mp3_buffer[MP3_SIZE];
    
    	mp3data_struct mp3data = {0};
    
    	memset(pcm_buffer, 0, sizeof(pcm_buffer));
    	memset(pcm_buffer1, 0, sizeof(pcm_buffer1));
    	memset(pcm_buffer2, 0, sizeof(pcm_buffer2));
    	memset(mp3_buffer, 0, sizeof(mp3_buffer));
    
        lame_t lame = lame_init();
    	hip_t l = hip_decode_init();
        lame_set_in_samplerate(lame, 44100);
        lame_set_VBR(lame, vbr_default);
        //lame_set_mode(lame, MONO);
        lame_init_params(lame);
    
        do {
    		read = fread(mp3_buffer, sizeof(unsigned char), MP3_SIZE, mp3_in);
    		read = hip_decode_headers(l, mp3_buffer, MP3_SIZE, pcm_buffer1, pcm_buffer2, &mp3data);
    
    		memcpy(pcm_buffer, pcm_buffer1, sizeof(pcm_buffer1));
    		memcpy(&pcm_buffer[PCM_SIZE], pcm_buffer2, sizeof(pcm_buffer2));
            write = lame_encode_buffer_interleaved(lame, pcm_buffer, read, mp3_buffer, MP3_SIZE);
            fwrite(mp3_buffer, write, 1, mp3_out);
    	} while (read != 0);
    
    	hip_decode_exit(l);
        lame_close(lame);
        fclose(mp3_out);
        fclose(mp3_in);
    
        return 0;
    }
    

Anmelden zum Antworten