#1258: Codec support request : MPEG Multichannel Audio -------------------------------------+------------------------------------- Reporter: aquarat | Owner: Type: enhancement | Status: new Priority: normal | Component: FFmpeg Version: unspecified | Resolution: Keywords: mpeg | Blocked By: mctoolame multichannel | Reproduced by developer: 0 Blocking: | Analyzed by developer: 0 | -------------------------------------+-------------------------------------
Comment (by aquarat): I've included mctoolamed-01a.tgz, which is also available on Sourceforge. I've also included my modified version of the code "lamedecoder"... my C++ skills are really bad, so I've highlighted the changes I've made below. I also tried modifying the code to change the output file names depending on the input file name... but yeah, C skills are lacking. To compile mctoolamed on Debian you need to change the architecture in the Makefile. I changed it to "core2" to get it to run on my Core-based machine (Intel Xeon). I had to modify part of the code to get it to handle 4 channel files : in audio_write.c : I modified the soundfile array Original : {{{ char soundfile[MTYPES][MAXCHANNELS][256] = { {"left.wav", "right.wav", "centre.wav", "left_surround.wav", "right_surround.wav"}, {"left.wav", "right.wav", "centre.wav", "lfe_this_may_not_play.wav", "left_surround.wav", "right_surround.wav"} }; }}} Revised : {{{ char soundfile[MTYPES][MAXCHANNELS][256] = { {"left.wav", "right.wav", "centre.wav", "left_surround.wav", "right_surround.wav"}, {"left.wav", "right.wav", "centre.wav", "lfe_this_may_not_play.wav", "left_surround.wav", "right_surround.wav"}, {"left.wav", "right.wav", "rearleft.wav", "rearright.wav"} }; }}} The "waveheader" array has the sample rate flag set for 44.1kHz. If left unchanged the resulting files will play back slower than they should. Modification to handle 4 channels : Original : {{{ void init_audio_outputs(int numchan) { int i,j; int type=-1; numchannels = numchan; // Set the global var for later on. if (numchan == 5) type = 0; if (numchan == 6) type = 1; if (soundfile>=0) { fprintf(stderr,"initialising %i output files\n",numchannels); for (i=0;i<numchannels;i++) { if ( (audioout[i] = fopen(soundfile[type][i], "w")) == NULL ) { fprintf(stderr,"Error opening %s for output\n",soundfile[type][i]); exit(99); } /* Write a really dodgy wave header */ /* Fix this to write the proper sampling frequency */ for (j=0;j<WAVEHEADERSIZE;j++) fputc(wave_header[j], audioout[i]); } } } }}} Revised : {{{ void init_audio_outputs(int numchan) { int i,j; int type=-1; numchannels = numchan; // Set the global var for later on. if (numchan == 5) type = 0; if (numchan == 6) type = 1; if (numchan == 4) type = 2; if (soundfile>=0) { fprintf(stderr,"initialising %i output files\n",numchannels); for (i=0;i<numchannels;i++) { if ( (audioout[i] = fopen(soundfile[type][i], "w")) == NULL ) { fprintf(stderr,"Error opening %s for output\n",soundfile[type][i]); exit(99); } /* Write a really dodgy wave header */ /* Fix this to write the proper sampling frequency */ for (j=0;j<WAVEHEADERSIZE;j++) fputc(wave_header[j], audioout[i]); } } } }}} -- Ticket URL: <https://ffmpeg.org/trac/ffmpeg/ticket/1258#comment:1> FFmpeg <http://ffmpeg.org> FFmpeg issue tracker _______________________________________________ FFmpeg-trac mailing list FFmpeg-trac@avcodec.org http://avcodec.org/mailman/listinfo/ffmpeg-trac