Re: [Sndobj-devel] Python SNdIO /Core Audio SetSr
Status: Abandoned
Brought to you by:
veplaini
From: Victor L. <vic...@nu...> - 2007-08-11 07:49:02
|
yes, a SetSr() method would have to close the device/file/etc, that's why it's not there. Regards Victor > > Hi > It also occurs to me that adding a SetSr method to SndIO > base class would be relatively easy but it has more side > effects cf the SetVectorSize method already there. > In fact I don't see that this would need to be much more > than void SndIO::SetSr(float sr){ > m_sr = sr; > } > > > Best > Ed > > On 8/11/07, Edward Hartley <ed....@gm...> wrote: > > > > Yes I've had that as well IIRC correctly I added some > > helper methods to the .i file for the video library I > > wrapped (I'd have to go back to it on another machine to > > check) but in this case another overloaded constructor > > added (I assume, correct me if I'm wrong) to > SndCoreAudio.cpp SndCoreAudio.h before rebuilding the > > library would be straightforward. I'll tackle that later > > on today. Cheers > > Ed > > > > On 8/10/07, Victor Lazzarini <vic...@nu...> > > > wrote: Another thing you can try straight away is to > > > use SndRTIO, which on OSX is effectively SndCoreAudio, > > > but with the important difference that its constructor > > > is > > > > > > SndRTIO(short ch, int mode, int bsize = DEF_BSIZE, > > > int period = DEF_PERIOD, int encoding = SHORTSAM, > > > SndObj** input=0, int vsize= DEF_VECSIZE, float > > > sr=DEF_SR, int dev = DEF_DEV) > > > > > > without any Uint32 (in fact, there is a slight bug in > > > there in that the conversion from int to uint is not > > > handled, but I can fix that if there is a problem). > > > > > > Victor > > > > > > > > > > > Problem is the constructor still expects 8 args not > > > > the 7 you suggest I introduced the sndobj.SND_OUTPUT > > > > argument to provide the 8th. I think this is a > > > > prototyping issue in SWIG though my close > > > > familiarity with SWIG predates the C++ extensions. > > > > However I note the the cpp source constructor is > > > > SndCoreAudio::SndCoreAudio(int channels,int > > > > bufframes, int buffnos, float norm, > > > > SndObj** inObjs, UInt32 dev, int vecsize, float sr) > > > i.e. 8 args the 6th being the device. > > > > > The python traceback remains as follows irrespective > > > > of whether 7 or 8 args are provided or whether > > > > sndobj.SND_OUTPUT or a python int is passed. > > > > > > > > > > > > File "aif.py", line 20, in <module> > > > > outp = sndobj.SndCoreAudio(2, 512, 4, 32767.0, > > > > objsp, 256, 22050.0) #wrong args number > > > > File > > > > "/Users/edh/Contracts/StAndrews_1/sndobj/sndobj.py" > > > > , line 2803, in __init__ this = > > > > _sndobj.new_SndCoreAudio(*args) NotImplementedError: > > > > Wrong number of arguments for overloaded function > > > > 'new_SndCoreAudio'. Possible C/C++ prototypes are: > > > > SndCoreAudio(int,int,int,float,SndObj **,UInt32 > > > > ,int ,float) > > > > SndCoreAudio(int,int,int,float,SndObj **,UInt32 > > > > ,int) SndCoreAudio(int,int,int,float,SndObj ** > > > > ,UInt32) SndCoreAudio(int,int,int,float,SndObj > > > > **) SndCoreAudio(int,int,int,float) > > > > SndCoreAudio(int,int,int) > > > > SndCoreAudio(int,int) > > > > SndCoreAudio(int) > > > > SndCoreAudio() > > > > > > > > I suspect that the constructor is looking for a C++ > > > > Uint32 in the 6th argument but where to pick an > > > > appropriate one from? > > > > > > > > if sndobj.DEF_DEV is substituted for the 6th arg the > > > > following traceback is obtained: > > > > 22050.0 256 which is reasonable enough as this is > > > > another function reference. > > > > > > > > Python(620,0xa000d000) malloc: *** Deallocation of > > > > a pointer not malloced: 0x613158; This could be a > > > > double free(), or free() called with the middle of > > > > an allocated block; Try setting environment variable > > > > MallocHelp to see tools to help debug > > > > Python(620,0xa000d000) malloc: *** Deallocation of a > > > > pointer not malloced: 0x709458; This could be a > > > > double free(), or free() called with the middle of > > > > an allocated block; Try setting environment variable > > > > MallocHelp to see tools to help debug > > > > Python(620,0xa000d000) malloc: *** Deallocation of > > > > a pointer not malloced: 0x7bdcf0; This could be a > double free(), or free() called with the middle of an > > > > allocated block; Try setting environment variable > > > > MallocHelp to see tools to help debug > > > > > > > > I can't see anything obvious in SndCoreAudio.h or > > > > AudioDefs.i Ed > > > > > > > > On 8/10/07, Victor Lazzarini > > > > > <vic...@nu...> wrote: Try > > > > > > > > > > outp = sndobj.SndCoreAudio(2, 512, 4, 32767.0, > > > > > objsp ,256, 22050.0) > > > > > > > > > > There is no sndobj.SND_OUTPUT argument for > > > > > SndCoreAudio (it always opens full-duplex). > > > > > > > > > > Victor > > > > > > > > > > > > > > > > > > > > > > Thanks for the pointer to the solution however > > > > > > > > > > > > now I've removed the constructor > > > > > > > > > > > > outp = sndobj.SndCoreAudio() > > > > > > > > > > > > and after constructing aif1,aif2 replaced it > > > > > with > > > > > > > objs[0]=aif1 > > > > > > objs[1]=aif2 > > > > > > objsp = objs.cast() > > > > > > outp = sndobj.SndCoreAudio(2, 512, 4, 32767.0, > > > > > > objsp) which as expected still produces output > > > > > > at the wrong sampling rate however if I extend > > > > > > this to outp = sndobj.SndCoreAudio(2, 512, 4, > > > > > > 32767.0, objsp , sndobj.SND_OUTPUT, 256, 22050) > > > > > > or > > > > > > outp = sndobj.SndCoreAudio(2, 512, 4, 32767.0, > > > > > > objsp , 1) or variants in between I get > > > > > tracebacks similar to this > > > > > > > File "aif.py", line 20, in <module> > > > > > > outp = sndobj.SndCoreAudio(2, 512, 4, > > > > > > 32767.0, objsp, 1) #, 256, 22050) #wrong args > > > > > > number File > > > > > > > > > > > > > "/Users/edh/Contracts/StAndrews_1/sndobj/sndobj.py" , line > > > > > > 2803, in __init__ this = > > > > > > _sndobj.new_SndCoreAudio(*args) > NotImplementedError: Wrong number of arguments for > > > > > > overloaded function 'new_SndCoreAudio'. > > > > > > Possible C/C++ prototypes are: > > > > > > SndCoreAudio(int,int,int,float,SndObj **,UInt32 > > > > > > ,int ,float) SndCoreAudio(int,int,int,float > > > > > > ,SndObj **,UInt32 ,int) SndCoreAudio(int,int > > > > > > ,int,float,SndObj ** ,UInt32) > > > > > > SndCoreAudio(int,int,int,float,SndObj **) > > > > > > SndCoreAudio(int,int,int,float) > > > > > > SndCoreAudio(int,int,int) SndCoreAudio(int > > > > > > ,int) SndCoreAudio(int) > > > > > > SndCoreAudio() > > > > > > > > > > > > Best > > > > > > Ed > > > > > > > > > > > > On 8/9/07, Victor Lazzarini > > > > > > > <vic...@nu...> wrote: You will > > > > > > > need to set the SR on all objects to 22050. It > > > > > > > is generally the last argument (which defaults > > > > > > > to 44100) of each object. You have done it > > > > > > > with all SndObjs, but it looks like you left > > > > > > > the SndCoreAudio to its default. You need to > > > > > > create it with the right SR. > > > > > > > > Victor > > > > > > > > > > > > > > > > > > > > > > > Hi > > > > > > > > I've been tinkering with PySndObj on the Mac > > > > > > > > . BTW it built out of the box for python 2.5 > > > > > > > > with the MacPython framework and appropriate > > > > > > > > build switches to build the python wrapper. > > > > > > > > The examples work OK as does the I have now > > > > > > > > got to the point where I'm able to read an > > > > > > > > AIF file and providing it's a PCM file get > > > > > > > > it to play back OK apart from when the > > > > > > > > sampling rate is not the default 44100. In > > > > > > > > the case in question it is 22050 but it > > > > > > > > plays back as if 44100. (Thanks BTW to the > > > > > > > > wav file example post) I have tried the > commented options shown in the code below, I'm new to the > > > > > > > > API so I'm not sure if this is a bug or I'm > > > > > > > > not setting the sampling rate in the right > > > > > > > place. So suggestions welcomed. The example > > > > > > > > file is in the > > > > > > > > /Developer/Examples/Java/Sound source tree. > > > > > > > > > import sndobj fn = '22-new.aif' #fn = > > > > > > > > 'sound.aif' af = sndobj.SndAiff(fn > > > > > > > > ,sndobj.READ,2) sr = af.GetSr() > > > > > > > > vs = af.GetVectorSize() > > > > > > > > print sr,vs > > > > > > > > T1 = sndobj.SndThread() > > > > > > > > sndin = sndobj.SndIn(af,1) > > > > > > > > outp = sndobj.SndCoreAudio() > > > > > > > > aif1 = sndobj.SndIn(af,1) > > > > > > > > #aif1 = sndobj.SndIn(af,1,vs,sr) > > > > > > > > #aif1.SetSr(sr) > > > > > > > > aif2 = sndobj.SndIn(af,2) > > > > > > > > #aif2 = sndobj.SndIn(af,2, vs, sr) > > > > > > > > #aif2.SetSr(sr) > > > > > > > > outp.SetOutput(1,aif1) > > > > > > > > outp.SetOutput(2,aif2) > > > > > > > > T1.AddObj(af,sndobj.SNDIO_IN) > > > > > > > > T1.AddObj(aif1) > > > > > > > > T1.AddObj(aif2) > > > > > > > > T1.AddObj(outp,sndobj.SNDIO_OUT) > > > > > > > > T1.ProcOn() > > > > > > > > time.sleep(5) > > > > > > > > T1.ProcOff() > > > > > > > > > > > > > > > > TIA > > > > > > > > Ed > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > ---------------------------------------------------------- > > > > > > > > --------------- This SF.net email is > sponsored by: Splunk Inc. Still grepping through log files > > > > > > > > to find problems? Stop. Now Search log > > > > > > > > events and configuration files using AJAX > > > > > > > > and a browser. Download your FREE copy of > > > > > > > > Splunk now >> http://get.splunk.com/ > > > > > > > > > > > > > > > > > _______________________________________________ > > > > > > Sndobj-devel mailing list > > > > > Snd...@li... > > > > > > > > > > > https://lists.sourceforge.net/lists/listinfo/sndobj-devel > > > > > > > |