From: William M. <wm...@ke...> - 2011-12-10 20:15:11
|
Upon examination, the main difference with your code is that when building the effect chain, the order of adding effects you use was: input, output, channels(remix) - which works as expected mine was: input, channels(remix), output - which gives 1/2 length. Changing my code to your order works. Was the required order documented anywhere? If so, sorry I missed it. Thanks for looking into this! Jan Stary wrote: > >> William Mortimore wrote: >> > In the sox man pages it says: >> > For example, the following two commands are equivalent: >> > sox input.wav -c 1 output.wav bass -3 >> > sox input.wav output.wav bass -3 channels 1 >> > though the second form is more flexible as it allows the effects to be >> > ordered arbitrarily. >> > >> > Well actually they are not. With a 2 channel input file, the first way >> > gives a mono file, but one that is 1/2 the length - it stops exactly in >> > the middle. >> > >> > The second way works properly. >> > >> > Try it yourself. > > Both work as expected, see > http://permalink.gmane.org/gmane.comp.audio.sox/3974 > >> > Putting the "channels" effect in the chain with or without a 1 argument >> > results in a mono file that is 1/2 length file. > >> > In an effects chain there is no way to simulate the second way. > > "Simulate"? You just add the "channels" effect to the chain. > > On Dec 08 12:08:37, William Mortimore wrote: >> Attached is a small c program that demonstrates the behavior. >> http://old.nabble.com/file/p32937160/mixdownexample.c > > I think the problem is in your application, not in libsox. > See the code below, built around example0.c, which works > as expected with either "channels" or "remix". > > Jan > > > > #include <stdio.h> > #include <sox.h> > > void > usage() > { > fprintf(stderr, "usage: remix input output\n"); > } > > int > main(int argc, char** argv) > { > char *inputfile, *outputfile; > sox_format_t *in, *out; > sox_effects_chain_t *chain; > sox_effect_t *e; > char* args[10]; > int channels; > > if (argc < 3) { > usage(); > return -1; > } > > inputfile = argv[1]; > outputfile = argv[2]; > > sox_format_init(); > sox_globals.verbosity = 5; > > in = sox_open_read(inputfile, NULL, NULL, NULL); > > channels = in->signal.channels; > in->signal.channels = 1; > out = sox_open_write(outputfile, &in->signal, NULL, NULL, NULL, NULL); > in->signal.channels = channels; > > chain = sox_create_effects_chain(&in->encoding, &out->encoding); > > e = sox_create_effect(sox_find_effect("input")); > args[0] = (char*)in, sox_effect_options(e, 1, args); > sox_add_effect(chain, e, &in->signal, &in->signal); > > e = sox_create_effect(sox_find_effect("output")); > args[0] = (char*)out, sox_effect_options(e, 1, args); > sox_add_effect(chain, e, &in->signal, &in->signal); > > e = sox_create_effect(sox_find_effect("channels")); > args[0] = "1", sox_effect_options(e, 1, args); > sox_add_effect(chain, e, &in->signal, &in->signal); > > /* > e = sox_create_effect(sox_find_effect("remix")); > args[0] = "-", sox_effect_options(e, 1, args); > sox_add_effect(chain, e, &in->signal, &in->signal); > */ > > sox_flow_effects(chain, NULL,NULL); > sox_delete_effects_chain(chain); > > sox_close(in); > sox_close(out); > sox_format_quit(); > > return 0; > } > > > > $ cc -o remix remix.c -lsox -I /usr/local/include/ -L /usr/local/lib > $ sox -c 2 -n in.wav trim 0 10 > $ soxi in.wav > > Input File : 'in.wav' > Channels : 2 > Sample Rate : 48000 > Precision : 32-bit > Duration : 00:00:10.00 = 480000 samples ~ 750 CDDA sectors > File Size : 3.84M > Bit Rate : 3.07M > Sample Encoding: 32-bit Signed Integer PCM > > $ ./remix in.wav out.wav > > formats: detected file format type `wav' > wav: WAV Chunk fmt > wav: EXTENSIBLE > wav: WAV Chunk fact > wav: WAV Chunk data > wav: Reading Wave file: Microsoft PCM format, 2 channels, 48000 samp/sec > wav: 384000 byte/sec, 8 block align, 32 bits/samp, 3840000 data > bytes > wav: 480000 Samps/chans > wav: Writing Wave file: Microsoft PCM format, 1 channel, 48000 samp/sec > wav: 192000 byte/sec, 4 block align, 32 bits/samp > remix: 0: > remix: 0 0.5 > remix: 1 0.5 > wav: Finished writing Wave file, 1920000 data bytes 480000 samples > > (note how the "channels" effect in fact calls the "remix" effect.) > > $ soxi out.wav > > Input File : 'out.wav' > Channels : 1 > Sample Rate : 48000 > Precision : 32-bit > Duration : 00:00:10.00 = 480000 samples ~ 750 CDDA sectors > File Size : 1.92M > Bit Rate : 1.54M > Sample Encoding: 32-bit Signed Integer PCM > > > ------------------------------------------------------------------------------ > Cloud Services Checklist: Pricing and Packaging Optimization > This white paper is intended to serve as a reference, checklist and point > of > discussion for anyone considering optimizing the pricing and packaging > model > of a cloud services business. Read Now! > http://www.accelacomm.com/jaw/sfnl/114/51491232/ > _______________________________________________ > Sox-users mailing list > Sox...@li... > https://lists.sourceforge.net/lists/listinfo/sox-users > > -- View this message in context: http://old.nabble.com/Channels-remix-does-not-function-as-documented-tp32829756p32952018.html Sent from the SoX mailing list archive at Nabble.com. |