From dittmeb@mail.rockefeller.edu Wed Oct 1 09:39:02 2003 From: dittmeb@mail.rockefeller.edu (Bjorn Dittmer-Roche) Date: Wed Oct 1 08:39:02 2003 Subject: [Portaudio] problem with portaudio & printf (osx / pa v18_1) In-Reply-To: <321B3D22-EA0B-11D7-A9E6-003065D1FA5E@mac.com> References: <321B3D22-EA0B-11D7-A9E6-003065D1FA5E@mac.com> Message-ID: going through old e-mail..... I am a little unclear about what your exact problem is, but it sounds like you have a problem with pthreads, and stdio. My first instinct in that case is to make sure you have tried defineing the macro _REENTRANT. In a posix environment, you can do this simply by passing -D_REENTRANT to your C/C++ compiler. good luck! bjorn On Thu, 18 Sep 2003, michael breitenbach wrote: > mh, > this was a misstake by me: > > this are not realy audiopops. this is a problem with receiving the > inputdata from stdin while printf > (but i sounds for me like audio pops with the testet syntesizer) > > now this is a off topic problem - but how can i avoid this ? > (the synth receives a OSC command to print the dsp usage and print this) > > michael > > // > // www.michaelbreitenbach.com > // > > _______________________________________________ > Portaudio mailing list > Portaudio@techweb.rfa.org > http://techweb.rfa.org/mailman/listinfo/portaudio > From schwardt@sun.ac.za Wed Oct 1 12:04:02 2003 From: schwardt@sun.ac.za (Ludwig Schwardt) Date: Wed Oct 1 11:04:02 2003 Subject: [Portaudio] PortAudioCpp under Linux Message-ID: <3F7AECC7.4030905@sun.ac.za> Hi all, Just to let you know that I've ported PortAudioCpp to Linux. This now - compiles under g++-2.95 and g++-3.3 - has autoconf configuration ripped from PortAudio (my first attempt at this, probably full of holes) - builds shared and dynamic libraries - builds documentation via doxygen I've also patched pa_linux_alsa to compile correctly under gcc-2.95. Where can I submit this code? I don't see any e-mail addresses for Merlijn and Joshua, and I guess the CVS repository is read-only... Ludwig Schwardt From schwardt@sun.ac.za Wed Oct 1 12:27:02 2003 From: schwardt@sun.ac.za (Ludwig Schwardt) Date: Wed Oct 1 11:27:02 2003 Subject: [Portaudio] Compiling PA under Linux In-Reply-To: <871xtyuw8t.fsf@sulphur.joq.us> References: <3F7981AD.5000503@sun.ac.za> <871xtyuw8t.fsf@sulphur.joq.us> Message-ID: <3F79A7DD.9060108@sun.ac.za> This is a multi-part message in MIME format. --------------040007020007010306040307 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Jack O'Quin wrote: > > Shouldn't the code be fixed to compile with 2.9x, instead? > I agree... Try the version I've attached. This now compiles under gcc 2.9x and gcc 3.x. The problem was that the old gcc didn't allow variable declarations midway through a function. Ludwig --------------040007020007010306040307 Content-Type: text/x-csrc; name="pa_linux_alsa.c" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="pa_linux_alsa.c" /* * $Id: pa_linux_alsa.c,v 1.1.2.13 2003/09/20 22:59:29 rossbencina Exp $ * PortAudio Portable Real-Time Audio Library * Latest Version at: http://www.portaudio.com * ALSA implementation by Joshua Haberman * * Copyright (c) 2002 Joshua Haberman * * Based on the Open Source API proposed by Ross Bencina * Copyright (c) 1999-2002 Ross Bencina, Phil Burk * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files * (the "Software"), to deal in the Software without restriction, * including without limitation the rights to use, copy, modify, merge, * publish, distribute, sublicense, and/or sell copies of the Software, * and to permit persons to whom the Software is furnished to do so, * subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * Any person wishing to distribute modifications to the Software is * requested to send the modifications to the original developer so that * they can be incorporated into the canonical version. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include #include #include /* strlen() */ #include #include #include "portaudio.h" #include "pa_util.h" #include "pa_allocation.h" #include "pa_hostapi.h" #include "pa_stream.h" #include "pa_cpuload.h" #include "pa_process.h" #include "pa_linux_alsa.h" /* PaAlsaHostApiRepresentation - host api datastructure specific to this implementation */ typedef struct { PaUtilHostApiRepresentation commonHostApiRep; PaUtilStreamInterface callbackStreamInterface; PaUtilStreamInterface blockingStreamInterface; PaUtilAllocationGroup *allocations; PaHostApiIndex hostApiIndex; } PaAlsaHostApiRepresentation; typedef struct PaAlsaDeviceInfo { PaDeviceInfo commonDeviceInfo; int deviceNumber; } PaAlsaDeviceInfo; snd_pcm_hw_params_t *hw_pars; /* prototypes for functions declared in this file */ PaError PaAlsa_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex hostApiIndex ); static void Terminate( struct PaUtilHostApiRepresentation *hostApi ); static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi, const PaStreamParameters *inputParameters, const PaStreamParameters *outputParameters, double sampleRate ); static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi, PaStream** s, const PaStreamParameters *inputParameters, const PaStreamParameters *outputParameters, double sampleRate, unsigned long framesPerBuffer, PaStreamFlags streamFlags, PaStreamCallback *callback, void *userData ); static PaError CloseStream( PaStream* stream ); static PaError StartStream( PaStream *stream ); static PaError StopStream( PaStream *stream ); static PaError AbortStream( PaStream *stream ); static PaError IsStreamStopped( PaStream *s ); static PaError IsStreamActive( PaStream *stream ); static PaTime GetStreamTime( PaStream *stream ); static double GetStreamCpuLoad( PaStream* stream ); static PaError BuildDeviceList( PaAlsaHostApiRepresentation *hostApi ); void InitializeStream( PaAlsaStream *stream, int callback, PaStreamFlags streamFlags ); void CleanUpStream( PaAlsaStream *stream ); int SetApproximateSampleRate( snd_pcm_t *pcm, snd_pcm_hw_params_t *hwParams, double sampleRate ); int GetExactSampleRate( snd_pcm_hw_params_t *hwParams, double *sampleRate ); /* blocking calls are in blocking_calls.c */ extern PaError ReadStream( PaStream* stream, void *buffer, unsigned long frames ); extern PaError WriteStream( PaStream* stream, const void *buffer, unsigned long frames ); extern signed long GetStreamReadAvailable( PaStream* stream ); extern signed long GetStreamWriteAvailable( PaStream* stream ); /* all callback-related functions are in callback_thread.c */ extern void *CallbackThread( void *userData ); PaError PaAlsa_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex hostApiIndex ) { PaError result = paNoError; PaAlsaHostApiRepresentation *alsaHostApi; alsaHostApi = (PaAlsaHostApiRepresentation*) PaUtil_AllocateMemory( sizeof(PaAlsaHostApiRepresentation) ); if( !alsaHostApi ) { result = paInsufficientMemory; goto error; } alsaHostApi->allocations = PaUtil_CreateAllocationGroup(); if( !alsaHostApi->allocations ) { result = paInsufficientMemory; goto error; } alsaHostApi->hostApiIndex = hostApiIndex; *hostApi = (PaUtilHostApiRepresentation*)alsaHostApi; (*hostApi)->info.structVersion = 1; (*hostApi)->info.type = paALSA; (*hostApi)->info.name = "ALSA"; BuildDeviceList( alsaHostApi ); (*hostApi)->Terminate = Terminate; (*hostApi)->OpenStream = OpenStream; (*hostApi)->IsFormatSupported = IsFormatSupported; PaUtil_InitializeStreamInterface( &alsaHostApi->callbackStreamInterface, CloseStream, StartStream, StopStream, AbortStream, IsStreamStopped, IsStreamActive, GetStreamTime, GetStreamCpuLoad, PaUtil_DummyRead, PaUtil_DummyWrite, PaUtil_DummyGetReadAvailable, PaUtil_DummyGetWriteAvailable ); PaUtil_InitializeStreamInterface( &alsaHostApi->blockingStreamInterface, CloseStream, StartStream, StopStream, AbortStream, IsStreamStopped, IsStreamActive, GetStreamTime, PaUtil_DummyGetCpuLoad, ReadStream, WriteStream, GetStreamReadAvailable, GetStreamWriteAvailable ); return result; error: if( alsaHostApi ) { if( alsaHostApi->allocations ) { PaUtil_FreeAllAllocations( alsaHostApi->allocations ); PaUtil_DestroyAllocationGroup( alsaHostApi->allocations ); } PaUtil_FreeMemory( alsaHostApi ); } return result; } static PaError BuildDeviceList( PaAlsaHostApiRepresentation *alsaApi ) { PaUtilHostApiRepresentation *commonApi = &alsaApi->commonHostApiRep; PaAlsaDeviceInfo *deviceInfoArray; int deviceCount = 0; int card_idx; int device_idx; snd_ctl_t *ctl; snd_ctl_card_info_t *card_info; /* count the devices by enumerating all the card numbers */ /* snd_card_next() modifies the integer passed to it to be: * the index of the first card if the parameter is -1 * the index of the next card if the parameter is the index of a card * -1 if there are no more cards * * The function itself returns 0 if it succeeded. */ card_idx = -1; while( snd_card_next( &card_idx ) == 0 && card_idx >= 0 ) { deviceCount++; } /* allocate deviceInfo memory based on the number of devices */ commonApi->deviceInfos = (PaDeviceInfo**)PaUtil_GroupAllocateMemory( alsaApi->allocations, sizeof(PaDeviceInfo*) * deviceCount ); if( !commonApi->deviceInfos ) { return paInsufficientMemory; } /* allocate all device info structs in a contiguous block */ deviceInfoArray = (PaAlsaDeviceInfo*)PaUtil_GroupAllocateMemory( alsaApi->allocations, sizeof(PaAlsaDeviceInfo) * deviceCount ); if( !deviceInfoArray ) { return paInsufficientMemory; } /* now loop over the list of devices again, filling in the deviceInfo for each */ card_idx = -1; device_idx = 0; while( snd_card_next( &card_idx ) == 0 && card_idx >= 0 ) { PaAlsaDeviceInfo *deviceInfo = &deviceInfoArray[device_idx]; char *deviceName; char alsaDeviceName[50]; const char *cardName; commonApi->deviceInfos[device_idx++] = (PaDeviceInfo*)deviceInfo; deviceInfo->deviceNumber = card_idx; deviceInfo->commonDeviceInfo.structVersion = 2; deviceInfo->commonDeviceInfo.hostApi = alsaApi->hostApiIndex; sprintf( alsaDeviceName, "hw:%d", card_idx ); snd_ctl_open( &ctl, alsaDeviceName, 0 ); snd_ctl_card_info_malloc( &card_info ); snd_ctl_card_info( ctl, card_info ); cardName = snd_ctl_card_info_get_name( card_info ); deviceName = (char*)PaUtil_GroupAllocateMemory( alsaApi->allocations, strlen(cardName) + 1 ); if( !deviceName ) { return paInsufficientMemory; } strcpy( deviceName, cardName ); deviceInfo->commonDeviceInfo.name = deviceName; snd_ctl_card_info_free( card_info ); /* to determine max. channels, we must open the device and query the * hardware parameter configuration space */ { snd_pcm_t *pcm_handle; snd_pcm_hw_params_t *hw_params; snd_pcm_hw_params_malloc( &hw_params ); /* get max channels for capture */ if( snd_pcm_open( &pcm_handle, alsaDeviceName, SND_PCM_STREAM_CAPTURE, SND_PCM_NONBLOCK ) < 0 ) { deviceInfo->commonDeviceInfo.maxInputChannels = 0; } else { snd_pcm_hw_params_any( pcm_handle, hw_params ); deviceInfo->commonDeviceInfo.maxInputChannels = snd_pcm_hw_params_get_channels_max( hw_params ); snd_pcm_close( pcm_handle ); /* TWEAKME: * * Giving values for default min and max latency is not * straightforward. Here are our objectives: * * * for low latency, we want to give the lowest value * that will work reliably. This varies based on the * sound card, kernel, CPU, etc. I think it is better * to give sub-optimal latency than to give a number * too low and cause dropouts. My conservative * estimate at this point is to base it on 4096-sample * latency at 44.1 kHz, which gives a latency of 23ms. * * for high latency we want to give a large enough * value that dropouts are basically impossible. This * doesn't really require as much tweaking, since * providing too large a number will just cause us to * select the nearest setting that will work at stream * config time. */ deviceInfo->commonDeviceInfo.defaultLowInputLatency = 4096. / 44100; deviceInfo->commonDeviceInfo.defaultHighInputLatency = 16384. / 44100; } /* get max channels for playback */ if( snd_pcm_open( &pcm_handle, alsaDeviceName, SND_PCM_STREAM_PLAYBACK, SND_PCM_NONBLOCK ) < 0 ) { deviceInfo->commonDeviceInfo.maxOutputChannels = 0; } else { snd_pcm_hw_params_any( pcm_handle, hw_params ); deviceInfo->commonDeviceInfo.maxOutputChannels = snd_pcm_hw_params_get_channels_max( hw_params ); snd_pcm_close( pcm_handle ); /* TWEAKME: see above */ deviceInfo->commonDeviceInfo.defaultLowOutputLatency = 4096. / 44100; deviceInfo->commonDeviceInfo.defaultHighOutputLatency = 16384. / 44100; } snd_pcm_hw_params_free( hw_params ); } deviceInfo->commonDeviceInfo.defaultSampleRate = 44100.; /* IMPLEMENT ME */ } commonApi->info.deviceCount = deviceCount; commonApi->info.defaultInputDevice = 0; commonApi->info.defaultOutputDevice = 0; return paNoError; } static void Terminate( struct PaUtilHostApiRepresentation *hostApi ) { PaAlsaHostApiRepresentation *alsaHostApi; alsaHostApi = (PaAlsaHostApiRepresentation*)hostApi; /* IMPLEMENT ME: - clean up any resourced not handled by the allocation group */ if( alsaHostApi->allocations ) { PaUtil_FreeAllAllocations( alsaHostApi->allocations ); PaUtil_DestroyAllocationGroup( alsaHostApi->allocations ); } PaUtil_FreeMemory( alsaHostApi ); } static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi, const PaStreamParameters *inputParameters, const PaStreamParameters *outputParameters, double sampleRate ) { int inputChannelCount, outputChannelCount; PaSampleFormat inputSampleFormat, outputSampleFormat; if( inputParameters ) { inputChannelCount = inputParameters->channelCount; inputSampleFormat = inputParameters->sampleFormat; /* unless alternate device specification is supported, reject the use of paUseHostApiSpecificDeviceSpecification */ if( inputParameters->device == paUseHostApiSpecificDeviceSpecification ) return paInvalidDevice; /* check that input device can support inputChannelCount */ if( inputChannelCount > hostApi->deviceInfos[ inputParameters->device ]->maxInputChannels ) return paInvalidChannelCount; /* validate inputStreamInfo */ if( inputParameters->hostApiSpecificStreamInfo ) return paIncompatibleHostApiSpecificStreamInfo; /* this implementation doesn't use custom stream info */ } else { inputChannelCount = 0; } if( outputParameters ) { outputChannelCount = outputParameters->channelCount; outputSampleFormat = outputParameters->sampleFormat; /* unless alternate device specification is supported, reject the use of paUseHostApiSpecificDeviceSpecification */ if( outputParameters->device == paUseHostApiSpecificDeviceSpecification ) return paInvalidDevice; /* check that output device can support inputChannelCount */ if( outputChannelCount > hostApi->deviceInfos[ outputParameters->device ]->maxOutputChannels ) return paInvalidChannelCount; /* validate outputStreamInfo */ if( outputParameters->hostApiSpecificStreamInfo ) return paIncompatibleHostApiSpecificStreamInfo; /* this implementation doesn't use custom stream info */ } else { outputChannelCount = 0; } /* IMPLEMENT ME: - if a full duplex stream is requested, check that the combination of input and output parameters is supported if necessary - check that the device supports sampleRate Because the buffer adapter handles conversion between all standard sample formats, the following checks are only required if paCustomFormat is implemented, or under some other unusual conditions. - check that input device can support inputSampleFormat, or that we have the capability to convert from outputSampleFormat to a native format - check that output device can support outputSampleFormat, or that we have the capability to convert from outputSampleFormat to a native format */ return paFormatIsSupported; } /* Given an open stream, what sample formats are available? */ static PaSampleFormat GetAvailableFormats( snd_pcm_t *stream ) { PaSampleFormat available = 0; snd_pcm_hw_params_t *hw_params; snd_pcm_hw_params_alloca( &hw_params ); snd_pcm_hw_params_any( stream, hw_params ); if( snd_pcm_hw_params_test_format( stream, hw_params, SND_PCM_FORMAT_FLOAT ) == 0) available |= paFloat32; if( snd_pcm_hw_params_test_format( stream, hw_params, SND_PCM_FORMAT_S16 ) == 0) available |= paInt16; if( snd_pcm_hw_params_test_format( stream, hw_params, SND_PCM_FORMAT_S24 ) == 0) available |= paInt24; if( snd_pcm_hw_params_test_format( stream, hw_params, SND_PCM_FORMAT_S32 ) == 0) available |= paInt32; if( snd_pcm_hw_params_test_format( stream, hw_params, SND_PCM_FORMAT_S8 ) == 0) available |= paInt8; if( snd_pcm_hw_params_test_format( stream, hw_params, SND_PCM_FORMAT_U8 ) == 0) available |= paUInt8; return available; } /* see pa_hostapi.h for a list of validity guarantees made about OpenStream parameters */ static PaError ConfigureStream( snd_pcm_t *stream, int channels, int interleaved, double *rate, PaSampleFormat pa_format, int framesPerBuffer, float latency) { #define ENSURE(functioncall) \ if( (functioncall) < 0 ) { \ PA_DEBUG(("Error executing ALSA call, line %d\n", __LINE__)); \ return 1; \ } \ else { \ PA_DEBUG(("ALSA call at line %d succeeded\n", __LINE__ )); \ } snd_pcm_hw_params_t *hw_params; snd_pcm_sw_params_t *sw_params; snd_pcm_access_t access_mode; snd_pcm_format_t alsa_format; int numPeriods; if( getenv("PA_NUMPERIODS") != NULL ) numPeriods = atoi( getenv("PA_NUMPERIODS") ); else numPeriods = ( (latency * *rate) / framesPerBuffer ) + 1; PA_DEBUG(("latency: %f, rate: %ld, framesPerBuffer: %d\n", latency, *rate, framesPerBuffer)); if( numPeriods <= 1 ) numPeriods = 2; /* configuration consists of setting all of ALSA's parameters. * These parameters come in two flavors: hardware parameters * and software parameters. Hardware parameters will affect * the way the device is initialized, software parameters * affect the way ALSA interacts with me, the user-level client. */ snd_pcm_hw_params_alloca( &hw_params ); snd_pcm_sw_params_alloca( &sw_params ); /* ... fill up the configuration space with all possibile * combinations of parameters this device will accept */ ENSURE( snd_pcm_hw_params_any( stream, hw_params ) ); if( interleaved ) access_mode = SND_PCM_ACCESS_MMAP_INTERLEAVED; else access_mode = SND_PCM_ACCESS_MMAP_NONINTERLEAVED; ENSURE( snd_pcm_hw_params_set_access( stream, hw_params, access_mode ) ); /* set the format based on what the user selected */ switch( pa_format ) { case paFloat32: alsa_format = SND_PCM_FORMAT_FLOAT; break; case paInt16: alsa_format = SND_PCM_FORMAT_S16; break; case paInt24: alsa_format = SND_PCM_FORMAT_S24; break; case paInt32: alsa_format = SND_PCM_FORMAT_S32; break; case paInt8: alsa_format = SND_PCM_FORMAT_S8; break; case paUInt8: alsa_format = SND_PCM_FORMAT_U8; break; default: PA_DEBUG(("Unknown PortAudio format %ld\n", pa_format )); return 1; } //PA_DEBUG(("PortAudio format: %d\n", pa_format)); PA_DEBUG(("ALSA format: %d\n", alsa_format)); ENSURE( snd_pcm_hw_params_set_format( stream, hw_params, alsa_format ) ); /* ... set the sample rate */ ENSURE( SetApproximateSampleRate( stream, hw_params, *rate ) ); ENSURE( GetExactSampleRate( hw_params, rate ) ); /* ... set the number of channels */ PA_DEBUG(("channels: %d\n", channels)); ENSURE( snd_pcm_hw_params_set_channels( stream, hw_params, channels ) ); /* ... set the period size, which is essentially the hardware buffer size */ ENSURE( snd_pcm_hw_params_set_period_size( stream, hw_params, framesPerBuffer, 0 ) ); PA_DEBUG(("numperiods: %d\n", numPeriods)); if( snd_pcm_hw_params_set_periods ( stream, hw_params, numPeriods, 0 ) < 0 ) { int i; for( i = numPeriods; i >= 2; i-- ) { if( snd_pcm_hw_params_set_periods( stream, hw_params, i, 0 ) >= 0 ) { PA_DEBUG(("settled on %d periods\n", i)); break; } } } /* Set the parameters! */ ENSURE( snd_pcm_hw_params( stream, hw_params ) ); /* Now software parameters... */ ENSURE( snd_pcm_sw_params_current( stream, sw_params ) ); /* until there's explicit xrun support in PortAudio, we'll configure ALSA * devices never to stop on account of an xrun. Basically, if the software * falls behind and there are dropouts, we'll never even know about it. */ ENSURE( snd_pcm_sw_params_set_stop_threshold( stream, sw_params, (snd_pcm_uframes_t)-1) ); /* Set the parameters! */ ENSURE( snd_pcm_sw_params( stream, sw_params ) ); return 0; #undef ENSURE } static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi, PaStream** s, const PaStreamParameters *inputParameters, const PaStreamParameters *outputParameters, double sampleRate, unsigned long framesPerBuffer, PaStreamFlags streamFlags, PaStreamCallback *callback, void *userData ) { PaError result = paNoError; PaAlsaHostApiRepresentation *alsaHostApi = (PaAlsaHostApiRepresentation*)hostApi; PaAlsaDeviceInfo *inputDeviceInfo = 0, *outputDeviceInfo = 0; PaAlsaStream *stream = 0; PaSampleFormat hostInputSampleFormat = 0, hostOutputSampleFormat = 0; int numInputChannels = 0, numOutputChannels = 0; PaSampleFormat inputSampleFormat = 0, outputSampleFormat = 0; unsigned long framesPerHostBuffer = framesPerBuffer; char deviceName[50]; if( inputParameters ) { inputDeviceInfo = (PaAlsaDeviceInfo*)hostApi->deviceInfos[ inputParameters->device ]; numInputChannels = inputParameters->channelCount; inputSampleFormat = inputParameters->sampleFormat; /* unless alternate device specification is supported, reject the use of paUseHostApiSpecificDeviceSpecification. [JH] this could be supported in the future, to allow ALSA device strings like hw:0 */ if( inputParameters->device == paUseHostApiSpecificDeviceSpecification ) return paInvalidDevice; /* check that input device can support numInputChannels */ if( numInputChannels > inputDeviceInfo->commonDeviceInfo.maxInputChannels ) return paInvalidChannelCount; /* validate inputStreamInfo */ if( inputParameters->hostApiSpecificStreamInfo ) return paIncompatibleHostApiSpecificStreamInfo; /* this implementation doesn't use custom stream info */ } else { numInputChannels = 0; } if( outputParameters ) { outputDeviceInfo = (PaAlsaDeviceInfo*)hostApi->deviceInfos[ outputParameters->device ]; numOutputChannels = outputParameters->channelCount; outputSampleFormat = outputParameters->sampleFormat; /* unless alternate device specification is supported, reject the use of paUseHostApiSpecificDeviceSpecification [JH] this could be supported in the future, to allow ALSA device strings like hw:0 */ if( outputParameters->device == paUseHostApiSpecificDeviceSpecification ) return paInvalidDevice; /* check that output device can support numInputChannels */ if( numOutputChannels > outputDeviceInfo->commonDeviceInfo.maxOutputChannels ) return paInvalidChannelCount; /* validate outputStreamInfo */ if( outputParameters->hostApiSpecificStreamInfo ) return paIncompatibleHostApiSpecificStreamInfo; /* this implementation doesn't use custom stream info */ } else { numOutputChannels = 0; } /* validate platform specific flags */ if( (streamFlags & paPlatformSpecificFlags) != 0 ) return paInvalidFlag; /* unexpected platform specific flag */ /* allocate and do basic initialization of the stream structure */ stream = (PaAlsaStream*)PaUtil_AllocateMemory( sizeof(PaAlsaStream) ); if( !stream ) { result = paInsufficientMemory; goto error; } InitializeStream( stream, (int) callback, streamFlags ); // Initialize structure if( callback ) { PaUtil_InitializeStreamRepresentation( &stream->streamRepresentation, &alsaHostApi->callbackStreamInterface, callback, userData ); } else { PaUtil_InitializeStreamRepresentation( &stream->streamRepresentation, &alsaHostApi->blockingStreamInterface, callback, userData ); } PaUtil_InitializeCpuLoadMeasurer( &stream->cpuLoadMeasurer, sampleRate ); /* open the devices now, so we can obtain info about the available formats */ if( numInputChannels > 0 ) { int ret; snprintf( deviceName, 50, "hw:%d", inputDeviceInfo->deviceNumber ); if( (ret = snd_pcm_open( &stream->pcm_capture, deviceName, SND_PCM_STREAM_CAPTURE, SND_PCM_NONBLOCK )) < 0 ) { if (ret == -EBUSY) result = paDeviceUnavailable; else result = paBadIODeviceCombination; goto error; } if( snd_pcm_nonblock( stream->pcm_capture, 0 ) < 0 ) { result = paUnanticipatedHostError; goto error; } stream->capture_nfds = snd_pcm_poll_descriptors_count( stream->pcm_capture ); hostInputSampleFormat = PaUtil_SelectClosestAvailableFormat( GetAvailableFormats(stream->pcm_capture), inputSampleFormat ); } if( numOutputChannels > 0 ) { int ret; snprintf( deviceName, 50, "hw:%d", outputDeviceInfo->deviceNumber ); if( (ret = snd_pcm_open( &stream->pcm_playback, deviceName, SND_PCM_STREAM_PLAYBACK, SND_PCM_NONBLOCK )) < 0 ) { if (ret == -EBUSY) result = paDeviceUnavailable; else result = paBadIODeviceCombination; goto error; } if( snd_pcm_nonblock( stream->pcm_playback, 0 ) < 0 ) { result = paUnanticipatedHostError; goto error; } stream->playback_nfds = snd_pcm_poll_descriptors_count( stream->pcm_playback ); hostOutputSampleFormat = PaUtil_SelectClosestAvailableFormat( GetAvailableFormats(stream->pcm_playback), outputSampleFormat ); stream->playback_hostsampleformat = hostOutputSampleFormat; } /* If the number of frames per buffer is unspecified, we have to come up with * one. This is both a blessing and a curse: a blessing because we can optimize * the number to best meet the requirements, but a curse because that's really * hard to do well. For this reason we also support an interface where the user * specifies these by setting environment variables. */ if( framesPerBuffer == paFramesPerBufferUnspecified ) { if( getenv("PA_PERIODSIZE") != NULL ) framesPerHostBuffer = atoi( getenv("PA_PERIODSIZE") ); else { /* We need to determine how many frames per host buffer to use. Our * goals are to provide the best possible performance, but also to * most closely honor the requested latency settings. Therefore this * decision is based on: * * - the period sizes that playback and/or capture support. The * host buffer size has to be one of these. * - the number of periods that playback and/or capture support. * * We want to make period_size*(num_periods-1) to be as close as possible * to latency*rate for both playback and capture. * * This is one of those blocks of code that will just take a lot of * refinement to be any good. */ int reasonablePeriodSizes[] = { 256, 512, 1024, 2048, 4096, 8192, 16384, 128, 0 }; int i; #define ENSURE(x) \ if ( (x) < 0 ) \ { \ PA_DEBUG(("failed at line %d\n", __LINE__)); \ continue; \ } if( stream->pcm_capture && stream->pcm_playback ) { /* TODO */ } else { /* half-duplex is a slightly simpler case */ int desiredLatency, channels; snd_pcm_t *pcm_handle; snd_pcm_hw_params_t *hw_params; snd_pcm_hw_params_alloca( &hw_params ); framesPerHostBuffer = paFramesPerBufferUnspecified; if( stream->pcm_capture ) { pcm_handle = stream->pcm_capture; desiredLatency = inputParameters->suggestedLatency * sampleRate; channels = inputParameters->channelCount; } else { pcm_handle = stream->pcm_playback; desiredLatency = outputParameters->suggestedLatency * sampleRate; channels = outputParameters->channelCount; } for( i = 0; reasonablePeriodSizes[i] != 0; i++ ) { int periodSize = reasonablePeriodSizes[i]; int numPeriods = ( desiredLatency / periodSize ) + 1; if( numPeriods <= 1 ) numPeriods = 2; PA_DEBUG(("trying periodSize=%d, numPeriods=%d, sampleRate=%f, channels=%d\n", periodSize, numPeriods, sampleRate, channels)); ENSURE( snd_pcm_hw_params_any( pcm_handle, hw_params ) ); ENSURE( SetApproximateSampleRate( pcm_handle, hw_params, sampleRate ) ); ENSURE( snd_pcm_hw_params_set_channels( pcm_handle, hw_params, channels ) ); ENSURE( snd_pcm_hw_params_set_period_size( pcm_handle, hw_params, periodSize, 0 ) ); ENSURE( snd_pcm_hw_params_set_periods( pcm_handle, hw_params, numPeriods, 0 ) ); /* if we made it this far, we have a winner. */ framesPerHostBuffer = periodSize; PA_DEBUG(("I came up with %ld frames per host buffer.\n", framesPerHostBuffer)); break; } /* if we didn't find an acceptable host buffer size * (this should be extremely rare) */ if( framesPerHostBuffer == paFramesPerBufferUnspecified ) { result = paBadIODeviceCombination; goto error; } } } } else { framesPerHostBuffer = framesPerBuffer; } #undef ENSURE result = PaUtil_InitializeBufferProcessor( &stream->bufferProcessor, numInputChannels, inputSampleFormat, hostInputSampleFormat, numOutputChannels, outputSampleFormat, hostOutputSampleFormat, sampleRate, streamFlags, framesPerBuffer, framesPerHostBuffer, paUtilFixedHostBufferSize, callback, userData ); if( result != paNoError ) goto error; /* configure the streams */ stream->streamRepresentation.streamInfo.inputLatency = 0.; stream->streamRepresentation.streamInfo.outputLatency = 0.; if( numInputChannels > 0 ) { int interleaved; PaSampleFormat plain_format = hostInputSampleFormat & ~paNonInterleaved; if( inputSampleFormat & paNonInterleaved ) interleaved = 0; else interleaved = 1; if( ConfigureStream( stream->pcm_capture, numInputChannels, interleaved, &sampleRate, plain_format, framesPerHostBuffer, inputParameters->suggestedLatency) != 0 ) { result = paBadIODeviceCombination; goto error; } stream->capture_interleaved = interleaved; } if( numOutputChannels > 0 ) { int interleaved; PaSampleFormat plain_format = hostOutputSampleFormat & ~paNonInterleaved; if( outputSampleFormat & paNonInterleaved ) interleaved = 0; else interleaved = 1; if( ConfigureStream( stream->pcm_playback, numOutputChannels, interleaved, &sampleRate, plain_format, framesPerHostBuffer, outputParameters->suggestedLatency) != 0 ) { result = paBadIODeviceCombination; goto error; } stream->playback_interleaved = interleaved; } stream->streamRepresentation.streamInfo.sampleRate = sampleRate; /* this will cause the two streams to automatically start/stop/prepare in sync. * We only need to execute these operations on one of the pair. */ if( stream->pcm_capture && stream->pcm_playback ) snd_pcm_link( stream->pcm_capture, stream->pcm_playback ); /* TODO: free this properly */ stream->pfds = (struct pollfd*)PaUtil_AllocateMemory( (stream->capture_nfds + stream->playback_nfds + 1) * sizeof(struct pollfd) ); if( !stream->pfds ) { result = paInsufficientMemory; goto error; } stream->frames_per_period = framesPerHostBuffer; stream->capture_channels = numInputChannels; stream->playback_channels = numOutputChannels; *s = (PaStream*)stream; return result; error: if( stream ) CleanUpStream( stream ); return result; } /* When CloseStream() is called, the multi-api layer ensures that the stream has already been stopped or aborted. */ static PaError CloseStream( PaStream* s ) { PaError result = paNoError; PaAlsaStream *stream = (PaAlsaStream*)s; PaUtil_TerminateBufferProcessor( &stream->bufferProcessor ); PaUtil_TerminateStreamRepresentation( &stream->streamRepresentation ); CleanUpStream( stream ); return result; } static PaError StartStream( PaStream *s ) { PaError result = paNoError; PaAlsaStream *stream = (PaAlsaStream*)s; /* TODO: support errorText */ #define ENSURE(x) \ { \ int error_ret; \ error_ret = (x); \ if( error_ret != 0 ) { \ PaHostErrorInfo err; \ err.errorCode = error_ret; \ err.hostApiType = paALSA; \ PA_DEBUG(("call at %d failed\n", __LINE__)); \ return paUnanticipatedHostError; \ } \ else \ PA_DEBUG(("call at line %d succeeded\n", __LINE__)); \ } if( stream->pcm_playback ) { const snd_pcm_channel_area_t *playback_areas, *area; snd_pcm_uframes_t offset, frames; int sample_size = Pa_GetSampleSize( stream->playback_hostsampleformat ); PA_DEBUG(("Sample size: %d\n", sample_size )); ENSURE( snd_pcm_prepare( stream->pcm_playback ) ); frames = snd_pcm_avail_update( stream->pcm_playback ); PA_DEBUG(("frames: %ld\n", frames )); PA_DEBUG(("channels: %d\n", stream->playback_channels )); snd_pcm_mmap_begin( stream->pcm_playback, &playback_areas, &offset, &frames ); /* Insert silence */ if( stream->playback_interleaved ) { void *playback_buffer; area = &playback_areas[0]; playback_buffer = area->addr + (area->first + area->step * offset) / 8; memset( playback_buffer, 0, frames * stream->playback_channels * sample_size ); } else { int i; for( i = 0; i < stream->playback_channels; i++ ) { void *channel_buffer; area = &playback_areas[i]; channel_buffer = area->addr + (area->first + area->step * offset) / 8; memset( channel_buffer, 0, frames * sample_size ); } } snd_pcm_mmap_commit( stream->pcm_playback, offset, frames ); } else if( stream->pcm_capture ) { ENSURE( snd_pcm_prepare( stream->pcm_capture ) ); } if( stream->callback_mode ) { ENSURE( pthread_create( &stream->callback_thread, NULL, &CallbackThread, stream ) ); /* we'll do the snd_pcm_start() in the callback thread */ } else { if( stream->pcm_playback ) snd_pcm_start( stream->pcm_playback ); else if( stream->pcm_capture ) snd_pcm_start( stream->pcm_capture ); } /* On my machine, the pcm stream will not transition to the RUNNING * state for a while after snd_pcm_start is called. The PortAudio * client needs to be able to depend on Pa_IsStreamActive() returning * true the moment after this function returns. So I sleep briefly here. * * I don't like this one bit. */ Pa_Sleep( 100 ); stream->callback_finished = 0; stream->callbackAbort = 0; return result; } static PaError StopStream( PaStream *s ) { PaError result = paNoError; PaAlsaStream *stream = (PaAlsaStream*)s; /* First deal with the callback thread, cancelling and/or joining * it if necessary */ if( stream->callback_mode ) { if( stream->callback_finished ) pthread_join( stream->callback_thread, NULL ); // Just wait for it to die else { /* We are running in callback mode, and the callback thread * is still running. Cancel it and wait for it to be done. */ pthread_cancel( stream->callback_thread ); // Snuff it! pthread_join( stream->callback_thread, NULL ); } stream->callback_finished = 0; } else { if( stream->pcm_playback ) snd_pcm_drain( stream->pcm_playback ); if( stream->pcm_capture && !stream->pcmsSynced ) snd_pcm_drain( stream->pcm_capture ); } return result; } static PaError AbortStream( PaStream *s ) { PaError result = paNoError; PaAlsaStream *stream = (PaAlsaStream*)s; /* First deal with the callback thread, cancelling and/or joining * it if necessary */ if( stream->callback_mode ) { stream->callbackAbort = 1; if( stream->callback_finished ) pthread_join( stream->callback_thread, NULL ); // Just wait for it to die else { /* We are running in callback mode, and the callback thread * is still running. Cancel it and wait for it to be done. */ pthread_cancel( stream->callback_thread ); // Snuff it! pthread_join( stream->callback_thread, NULL ); } stream->callback_finished = 0; } else { if( stream->pcm_playback ) snd_pcm_drop( stream->pcm_playback ); if( stream->pcm_capture && !stream->pcmsSynced ) snd_pcm_drop( stream->pcm_capture ); } return result; } static PaError IsStreamStopped( PaStream *s ) { PaAlsaStream *stream = (PaAlsaStream*)s; if( IsStreamActive(s) || stream->callback_finished ) return 0; else return 1; } static PaError IsStreamActive( PaStream *s ) { PaAlsaStream *stream = (PaAlsaStream*)s; if( stream->pcm_capture ) { snd_pcm_state_t capture_state = snd_pcm_state( stream->pcm_capture ); if( capture_state == SND_PCM_STATE_RUNNING /*|| capture_state == SND_PCM_STATE_PREPARED*/ ) return 1; } if( stream->pcm_playback ) { snd_pcm_state_t playback_state = snd_pcm_state( stream->pcm_playback ); if( playback_state == SND_PCM_STATE_RUNNING /*|| playback_state == SND_PCM_STATE_PREPARED*/ ) return 1; } return 0; } static PaTime GetStreamTime( PaStream *s ) { PaAlsaStream *stream = (PaAlsaStream*)s; snd_timestamp_t timestamp; snd_pcm_status_t *status; snd_pcm_status_alloca( &status ); /* TODO: what if we have both? does it really matter? */ /* TODO: if running in callback mode, this will mean * libasound routines are being called form multiple threads. * need to verify that libasound is thread-safe. */ if( stream->pcm_capture ) { snd_pcm_status( stream->pcm_capture, status ); } else if( stream->pcm_playback ) { snd_pcm_status( stream->pcm_playback, status ); } snd_pcm_status_get_tstamp( status, ×tamp ); return timestamp.tv_sec + ((float)timestamp.tv_usec/1000000); } static double GetStreamCpuLoad( PaStream* s ) { PaAlsaStream *stream = (PaAlsaStream*)s; return PaUtil_GetCpuLoad( &stream->cpuLoadMeasurer ); } void InitializeStream( PaAlsaStream *stream, int callback, PaStreamFlags streamFlags ) { assert( stream ); stream->pcm_capture = NULL; stream->pcm_playback = NULL; stream->callback_finished = 0; stream->callback_mode = callback; stream->capture_nfds = 0; stream->playback_nfds = 0; stream->pfds = NULL; stream->callbackAbort = 0; } /*! * \brief Free resources associated with stream, and eventually stream itself * * Frees allocated memory, and closes opened pcms. */ void CleanUpStream( PaAlsaStream *stream ) { assert( stream ); if( stream->pcm_capture ) { snd_pcm_close( stream->pcm_capture ); } if( stream->pcm_playback ) { snd_pcm_close( stream->pcm_playback ); } if ( stream->pfds ) PaUtil_FreeMemory( stream->pfds ); PaUtil_FreeMemory( stream ); } int SetApproximateSampleRate( snd_pcm_t *pcm, snd_pcm_hw_params_t *hwParams, double sampleRate ) { unsigned long approx = (unsigned long) sampleRate; int dir; double fraction = sampleRate - approx; assert( hwParams ); if( fraction > 0.0 ) { if( fraction > 0.5 ) { ++approx; dir = -1; } else dir = 1; } else dir = 0; return snd_pcm_hw_params_set_rate( pcm, hwParams, approx, dir ); } // Return exact sample rate in param sampleRate int GetExactSampleRate( snd_pcm_hw_params_t *hwParams, double *sampleRate ) { unsigned int num, den; int err; assert( hwParams ); err = snd_pcm_hw_params_get_rate_numden( hwParams, &num, &den ); *sampleRate = (double) num / den; return err; } --------------040007020007010306040307-- From mblaauw@iua.upf.es Wed Oct 1 12:53:01 2003 From: mblaauw@iua.upf.es (Merlijn Blaauw) Date: Wed Oct 1 11:53:01 2003 Subject: [Portaudio] PortAudioCpp under Linux Message-ID: <5.2.1.1.0.20031001173757.00bb9d10@iua-mail.upf.es> Hi Ludwig, nice to see you use PortAudioCpp. Thanks for the Linux ``port''. As PortAudioCpp isn't (yet) part of the PortAudio CVS, perhaps it's best if you just send me any files you've added (I suppose you didn't have to change the actual code) and I'll include them in the .zip and later will also put them on CVS (as soon as the folder structure issue is sorted out). I'm not sure if the ALSA or OSS implementations have any host api-specific extensions (like the PA ASIO implementation), but if they do, perhaps you could code a C++ encapsulation for that too. You can take a look at the AsioDeviceAdapter class (http://www.iua.upf.es/~mblaauw/pacpp/a00023.html). Regards, Merlijn From pieter.suurmond@kmt.hku.nl Thu Oct 2 10:21:01 2003 From: pieter.suurmond@kmt.hku.nl (Pieter Suurmond) Date: Thu Oct 2 09:21:01 2003 Subject: [Portaudio] Commited to CVS v19-devel: SGI IRIX support. Message-ID: <3F7C2435.5E2A6A0A@kmt.hku.nl> Hi all, Would like to let you know I commited some changes to the 'v19-devel' CVS-tree: - pa_sgi/pa_sgi.c (More or less works now!) - pa_unix/pa_unix_hostapis.c (Added 'PaSGI_Initialize()'.) - configure.in (Added 'irix'-snippet.) - configure (Filesize grown after fresh 'automake'.) I also tried to add a copy of the necessary file 'config.sub' to the directory but that failed: apparently I'm not allowed to do 'cvs add'. That's ok, I won't try any more attempts. Can someone else add 'config.sub'? Well, the first V19 IRIX version seems to work (pa_devs and patest_sine). Pa_sleep doesn't work though... probably argument for usleep exceeds 1000000 and IRIX doesn't like that... I will sort this out later this week. I still have to implement latency-stuff and set queue-sizes in the AL lib. Also have to take closer look at blocking i/o. But first things are there now. Well, after spending some days in the v19-devel directory, it seems I understand it a bit more of it now. :-) I'll try to improve things in the new v19 pa_sgi.c the coming weeks. Hope it is no problem that I commited a newly generated 'configure' file to the v19-devel branch. Kind regards, Pieter Suurmond From Randy Church" --DD10__5_.B6_A_56. Content-Type: text/html; Content-Transfer-Encoding: quoted-printable Portaudio-admin
CHEAP

PEN1S ENL@RGEME= NT P1LLS DISCOUNT PRICE!



vez ltzrlkcubqzz nzjvxoti r u l gpgyh d rqd





REMOVE FROM MAILLISTc sd zpsd gf h pctp xb vp qfki s ih shhkwko si l hyi wwhnx --DD10__5_.B6_A_56.-- From joshua@haberman.com Thu Oct 2 14:40:01 2003 From: joshua@haberman.com (Joshua Haberman) Date: Thu Oct 2 13:40:01 2003 Subject: [Portaudio] CVS access for Arve Message-ID: <1065116405.5627.146.camel@trimble1dhcp30.ups.edu> I would like to request that Arve Knudsen be given write access to CVS. He's been doing good work on the ALSA implementation, and I regretfully don't have the time to keep up with reviewing his submissions. Josh From pieter.suurmond@kmt.hku.nl Fri Oct 3 01:29:01 2003 From: pieter.suurmond@kmt.hku.nl (Pieter Suurmond) Date: Fri Oct 3 00:29:01 2003 Subject: [Portaudio] file tree for V19 Message-ID: <3F7CFA89.244A6EE7@kmt.hku.nl> >> Just curious. Why do you prefer this to the obvious alternative? >> /portaudio/src/win/ >> /portaudio/src/win/ds/ >> /portaudio/src/win/wmme/ > Obvious in hindsight perhaps. > I like that scheme. > Phil Burk I would love such a 'deeper' directory structure. The less subdirectories in portaudio's toplevel directory the better. Maybe those frightening configuration files can also be kept (more or less hidden) in a subdir? Or would that be too unusual or impractical? And those special Makefiles in their subdirs perhaps? What about providing 2 interfaces on the same level: a C-api as well as a C++-api? Something like below perhaps: portaudio.h (So important it wants no parenting dir) c/ (Now called 'pa_common') cpp/ asio/ common/ (Merlijn's C++ API.) windows/ mac/ sm/ unix/ oss/ linux/ alsa/ osx/ irix/ (Maybe 'sgi' was the wrong name) beos/ Just an idea. maybe not good. Greetings anyway, Pieter From theresakeyou@cyber.net.pk Fri Oct 3 11:54:01 2003 From: theresakeyou@cyber.net.pk (Theresa Key) Date: Fri Oct 3 10:54:01 2003 Subject: [Portaudio] vudassdweii Message-ID: <7db601c38a3c$b9ef73a2$dd298b71@yixtdtb>

Penis Enlargement - It's finally a proven theory!
2 amazing ways to enlarge your manhood - read below..
vvtgotclckbspm ueaoimcqjr

No need to dream...you can now expand your penis upto 3 inches GUARANTEED!
If you don't like our product we don't want you to keep it. Return it for 110% back!

Doctor's have been working years to create such a product and have finally come up with
a no sideaffect herbal pill guaranteed to work "VPRX", - VPRX Pills info click here.
and also a patch similair to the quit smoking patch. - Penis Patches info click here.

bizfgwftbehney ejyzgjcemkl
tfhfjucyhfj shbfwzdchgfdjd


if you do not wish to see these ads go here.

pwfpfndttf fjaiaqburh burvuwbjwa From spamproof@telus.net Sat Oct 4 06:58:02 2003 From: spamproof@telus.net (Chris Rolfe) Date: Sat Oct 4 05:58:02 2003 Subject: [Portaudio] Re: Portaudio digest, Vol 1 #488 - 2 msgs In-Reply-To: <20030527102811.3197.16230.Mailman@techweb.rfa.org> Message-ID: on 5/27/03 3:28 AM, portaudio-request@techweb.rfa.org wrote: > Send Portaudio mailing list submissions to > portaudio@techweb.rfa.org > > To subscribe or unsubscribe via the World Wide Web, visit > http://techweb.rfa.org/mailman/listinfo/portaudio > or, via email, send a message with subject or body 'help' to > portaudio-request@techweb.rfa.org > > You can reach the person managing the list at > portaudio-admin@techweb.rfa.org > > When replying, please edit your Subject line so it is more specific > than "Re: Contents of Portaudio digest..." > > > Today's Topics: > > 1. urgent business proposal (andrewmbeki@ecplaza.net ) > 2. compiling (thomas gorbach) > > --__--__-- > > Message: 1 > From: "andrewmbeki@ecplaza.net " > Date: Mon, 26 May 2003 12:56:37 > To: portaudio@techweb.rfa.org > Subject: [Portaudio] urgent business proposal > > Mr.Andrew Buthelezi( B.Sc.,M.Sc. MNIM.) > Director, Project Implementation > > > STRICTLY CONFIDENTIAL & URGENT > > I am Andrew Buthelezi Mbeki a native of Cape Town in South Africa and I am a > Director of Project Implementation with the South Africa Department of > Minerals & Natural Resources. First and foremost, I apologize using this > medium to reach you for a transaction/business of this magnitude, but this is > due to confidentiality and prompt access reposed on this medium. Be informed > that a member of the South Africa Export Promotion Council (SAEPC) who was at > the Government delegation to your country during a trade exhibition gave your > enviable credentials/particulars to me. I have decided to seek a confidential > co-operation with you in the execution of the deal described Hereunder for the > benefit of all parties and hope you will keep it as a top secret because of > the nature of this transaction. > > Within the Department of Minerals & Natural Resources where I work as a > Director of Audit and project implementation and with the cooperation of Four > other top officials, we have in our possession as overdue payment bills > totaling Eight Million, five Hundred Thousand U. S. Dollars ($8,500,000.00) > which we want to transfer abroad with the assistance and cooperation of a > foreign company/individual to receive the said fund on our behalf or a > reliable foreign non-company account to receive such funds. More so, we are > handicapped in the circumstances, as the South Africa Civil Service Code of > Conduct does not allow us to operate offshore account hence your importance in > the whole transaction. > > This amount $8.5m represents the balance of the total contract value executed > on behalf of my Department by a foreign contracting firm, which we the > officials over-invoiced deliberately. Though the actual contract cost have > been paid to the original contractor, leaving the balance in the Tune of the > said amount which we have in principles gotten approval to remit by Key tested > Telegraphic Transfer (K.T.T) to any foreign bank account you will provide by > filing in an application through the Justice Ministry here in South Africa for > the transfer of rights and privileges of the former contractor to you. > > I have the authority of my partners involved to propose that should you be > willing to assist us in the transaction, your share as compensation will be > 25% of the total sum,while my partners and i receive 65% and 5% for taxation > and miscellanous expenses incurred. The business itself is 100% safe, on your > part provided you treat it with utmost secrecy and confidentiality. Also your > area of specialization is not a hindrance to the successful execution of this > transaction. Endeavor to contact me immediately through my email address > whether or not you are interested in this deal. If you are not, it will enable > me scout for another foreign partner to carry out this deal I want to assure > you that my partners and myself are in a position to make the payment of this > claim possible provided you can give us a very strong Assurance and guarantee > that our share will be secured and please remember to treat this matter as > very confidential matter, because we will not comprehend with any > form of exposure as we are still in active Government Service and remember > once again that time is of the essence in this business. > > Positive response should be accompanied with your telephone and fax number so > i can reach you immediately with more informations. > I wait in anticipation of your fullest co-operation. > > Yours faithfully, > Andrew Buthelezi > > > --__--__-- > > Message: 2 > Date: Mon, 26 May 2003 20:00:29 +0200 > From: thomas gorbach > To: portaudio@techweb.rfa.org > Subject: [Portaudio] compiling > > Hello List > > i'm new with portaudio and want to ask following question: > > in my home directory i put all the stuff vom portaudio. > in pa_unix_oss i did make and got the sinus. > > but how do i have to call the gcc in my own projects ? > > short: how to write a make file ? > > is there someone who can help me ? > > Greetns > TOM > > > > --__--__-- > > _______________________________________________ > Portaudio mailing list > Portaudio@techweb.rfa.org > http://techweb.rfa.org/mailman/listinfo/portaudio > > > End of Portaudio Digest From spamproof@telus.net Sat Oct 4 06:59:02 2003 From: spamproof@telus.net (Chris Rolfe) Date: Sat Oct 4 05:59:02 2003 Subject: [Portaudio] Re: Portaudio digest, Vol 1 #489 - 2 msgs In-Reply-To: <20030528102748.10627.45761.Mailman@techweb.rfa.org> Message-ID: on 5/28/03 3:27 AM, portaudio-request@techweb.rfa.org wrote: > Send Portaudio mailing list submissions to > portaudio@techweb.rfa.org > > To subscribe or unsubscribe via the World Wide Web, visit > http://techweb.rfa.org/mailman/listinfo/portaudio > or, via email, send a message with subject or body 'help' to > portaudio-request@techweb.rfa.org > > You can reach the person managing the list at > portaudio-admin@techweb.rfa.org > > When replying, please edit your Subject line so it is more specific > than "Re: Contents of Portaudio digest..." > > > Today's Topics: > > 1. v19 on pocket pc 2002 (udo) > 2. Jack audio server for Darwin/MacOSX (Stephane Letz) > > --__--__-- > > Message: 1 > Date: Tue, 27 May 2003 09:06:03 -0700 (PDT) > From: udo > To: portaudio@techweb.rfa.org > Subject: [Portaudio] v19 on pocket pc 2002 > > Hello, > > I am trying to make Gordon Gidlucks port to Pocket Pc > 2002 run. > For debugging I declared an udomsg int as a global > variable which I am trying to modify in the record > callback but isn't changed at all. > Could this point to a problem? > Any ideas? > I can provide debugging logs (10K or so) to interested > parties. > > Kind regards, > Udo > > > > __________________________________ > Do you Yahoo!? > The New Yahoo! Search - Faster. Easier. Bingo. > http://search.yahoo.com > > --__--__-- > > Message: 2 > Date: Wed, 28 May 2003 09:40:37 +0200 > To: portaudio@techweb.rfa.org > From: Stephane Letz > Subject: [Portaudio] Jack audio server for Darwin/MacOSX > > Jack (http://jackit.sourceforge.net/) is a low-latency audio server, > written primarily for the GNU/Linux operating system. It can connect a > number of different applications to an audio device, as well as allowing > them to share audio between themselves. Its clients can run in their own > processes (ie. as normal applications), or can they can run within the JACK > server (ie. as a "plugin"). > > JACK is different from other audio server efforts in that it has been > designed from the ground up to be suitable for professional audio work. > This means that it focuses on two key areas: synchronous execution of all > clients, and low latency operation. > > A port on Darwin/MacOSX has been done. The source code for the > Darwin/MacOSX version is available on the Jack source project page: > http://jackit.sourceforge.net/download/ > > A binary version of the Jack server, library and example clients can be > found here: http://www.grame.fr/~letz/jack.html > > Best Regards > > Stephane Letz > > > Grame: Centre National de creation musicale > 9, Rue du Garet > 69001 Lyon > Tel: 04-72-07-37-00 > Fax: 04-72-07-37-01 > Web: www.grame.fr > > > > > --__--__-- > > _______________________________________________ > Portaudio mailing list > Portaudio@techweb.rfa.org > http://techweb.rfa.org/mailman/listinfo/portaudio > > > End of Portaudio Digest From leigh@leighsmith.com Sat Oct 4 13:16:02 2003 From: leigh@leighsmith.com (Leigh Smith) Date: Sat Oct 4 12:16:02 2003 Subject: [Portaudio] Spam being sent through portaudio Message-ID: <1065284137.3f7ef22981676@www.leighsmith.com> I've already sent a request to the administrator of this list without reply. We seem to be receiving spam through the portaudio list. This list is managed by the mailman software which has the option of setting the list to be subscriber posting only. I manage several mail lists using mailman and in my experience this option stops all spam mail being inflicted on subscribers. Since I got no response from my request via the admin address, I have to ask it here: Can we please change the posting option to only allow subscribers to send to portaudio? If anyone disagrees, I would welcome your arguments. -- Leigh Smith mailto:leigh@leighsmith.com http://www.leighsmith.com From philburk@softsynth.com Sat Oct 4 18:06:01 2003 From: philburk@softsynth.com (Phil Burk) Date: Sat Oct 4 17:06:01 2003 Subject: [Portaudio] Spam being sent through portaudio References: <1065284137.3f7ef22981676@www.leighsmith.com> Message-ID: <001b01c38abb$4a1f5270$a00aa8c0@wintec> Hello Leigh, Bill Eldridge is generously providing the PortAudio list. > I have to ask it here: Can we please change the posting option to only allow > subscribers to send to portaudio? If anyone disagrees, I would welcome your > arguments. I agree. I would like to see the list changed to subscriber only. That would cut down spam considerably. It won't entirely eliminate it because spammers can join the list but we can at least ban them when they do. Bill, what do you think? Thanks, Phil Burk From steve@dekorte.com Sat Oct 4 20:13:01 2003 From: steve@dekorte.com (Steve Dekorte) Date: Sat Oct 4 19:13:01 2003 Subject: [Portaudio] mixing Message-ID: <4B08BBA6-F6C0-11D7-89B5-000393ACB27C@dekorte.com> Has anyone written a simple mixing layer over portaudio? Something that also supports synchronization like "start playing loop B when the cycle of loop A begins again" would be ideal. -- Steve From dittmeb@mail.rockefeller.edu Sat Oct 4 21:35:01 2003 From: dittmeb@mail.rockefeller.edu (Bjorn Dittmer-Roche) Date: Sat Oct 4 20:35:01 2003 Subject: [Portaudio] Spam being sent through portaudio In-Reply-To: <1065284137.3f7ef22981676@www.leighsmith.com> References: <1065284137.3f7ef22981676@www.leighsmith.com> Message-ID: On Sat, 4 Oct 2003, Leigh Smith wrote: > > I've already sent a request to the administrator of this list without reply. > We seem to be receiving spam through the portaudio list. This list is > managed by the mailman software which has the option of setting the list to > be subscriber posting only. I manage several mail lists using mailman and in > my experience this option stops all spam mail being inflicted on > subscribers. Since I got no response from my request via the admin address, > I have to ask it here: Can we please change the posting option to only allow > subscribers to send to portaudio? If anyone disagrees, I would welcome your > arguments. > I have brought this up before and others disagreed, but it seems the volume of spam has increased since then. (Personally, I spend more time avoiding and complaining about spam than I would if I just hit the delete key every time I saw a spam, so I am an illogically adamant anti-spammer.) I think your suggestion is a very easy step to take; however, it does discourage non-members from posting, and it certainly makes things feel more welcoming if anyone can just ask a question, so it is a bit difficult. Here are some other ideas I have. All but the first require some effort, and so may not be feasible: * make sure the mailing list address is not posted in robot friendly ways. eg: (portaudio at techweb dot rfa dot org) instead of portaudio@techweb.rfa.org. Actual research shows that this works. (I can't find the ref, but I have it somewhere.....) * the list could be "closed" as you suggest, but outside poster's e-mails go to a moderator for consideration. That's how the Atlanta Linux Enthusiasts list works and I think it's very nice, but it requires an enthusiastic moderator. * Setup a web page that could ask some question that a person can answer, but a robot cannot, I have seen this and it works well, but it is a bit trickier to setup. bjorn From steve@dekorte.com Sun Oct 5 06:53:02 2003 From: steve@dekorte.com (Steve Dekorte) Date: Sun Oct 5 05:53:02 2003 Subject: [Portaudio] OSX Makefile Message-ID: Here's a static lib makefile for OSX(though it should work on any unix) in case anyone else might find it useful. Given the small size of the library, a static lib may be more suitable and is easier to distribute with apps. # ======================================================== WARN := -Wall -Wstrict-prototypes -Winline RANLIB := ranlib AR := ar rcu TARGET := full T := libPortAudio.a CFLAGS := -g -O2 -D$(TARGET) $(WARN) -I. -Ipa_common -Ipablio BASIC_OBJS := \ pa_mac_core/pa_mac_core.o \ pa_common/pa_lib.o \ pa_common/pa_convert.o \ pablio/ringbuffer.o \ pablio/pablio.o all: $(TARGET) full: $(BASIC_OBJS) @$(MAKE) $T OBJS="$(BASIC_OBJS)" $T: $(OBJS) $(AR) $@ $(OBJS) $(RANLIB) $@ clean: rm -f $(BASIC_OBJS) $T From yves@gnu-darwin.org Sun Oct 5 19:37:02 2003 From: yves@gnu-darwin.org (Yves de Champlain) Date: Sun Oct 5 18:37:02 2003 Subject: [Portaudio] Re: OSX Makefile In-Reply-To: <20031005103630.27593.97385.Mailman@techweb.rfa.org> Message-ID: <2C284AE9-F784-11D7-A8D4-000393C6E152@gnu-darwin.org> > Here's a static lib makefile for OSX(though it should work on any unix) > in case anyone else might find it useful. Given the small size of the > library, a static lib may be more suitable and is easier to distribute > with apps. I think a dynamic lib would be more appropriate because a static lib can't link to the frameworks at runtime. yves From steve@dekorte.com Sun Oct 5 19:53:01 2003 From: steve@dekorte.com (Steve Dekorte) Date: Sun Oct 5 18:53:01 2003 Subject: [Portaudio] Re: OSX Makefile In-Reply-To: <2C284AE9-F784-11D7-A8D4-000393C6E152@gnu-darwin.org> References: <2C284AE9-F784-11D7-A8D4-000393C6E152@gnu-darwin.org> Message-ID: <9CF9463A-F786-11D7-9923-000393ACB27C@dekorte.com> On Sunday, October 5, 2003, at 3:35 PM, Yves de Champlain wrote: >> Here's a static lib makefile for OSX(though it should work on any >> unix) >> in case anyone else might find it useful. Given the small size of the >> library, a static lib may be more suitable and is easier to distribute >> with apps. > > I think a dynamic lib would be more appropriate because > a static lib can't link to the frameworks at runtime. How do you embed it in an app you want to distribute to normal users? (users without root access) -- Steve From yves@gnu-darwin.org Sun Oct 5 21:34:01 2003 From: yves@gnu-darwin.org (Yves de Champlain) Date: Sun Oct 5 20:34:01 2003 Subject: [Portaudio] Re: Re: OSX Makefile In-Reply-To: <9CF9463A-F786-11D7-9923-000393ACB27C@dekorte.com> Message-ID: <92CC0EB4-F794-11D7-A8D4-000393C6E152@gnu-darwin.org> Le Dimanche, 5 octo 2003, =E0 18:52 America/Montreal, Steve Dekorte a=20 =E9crit : > > On Sunday, October 5, 2003, at 3:35 PM, Yves de Champlain wrote: >>> Here's a static lib makefile for OSX(though it should work on any=20 >>> unix) >>> in case anyone else might find it useful. Given the small size of = the >>> library, a static lib may be more suitable and is easier to=20 >>> distribute >>> with apps. >> >> I think a dynamic lib would be more appropriate because >> a static lib can't link to the frameworks at runtime. > > How do you embed it in an app you want to distribute to normal users? > (users without root access) The simplest way is to compile each portaudio object file directly into=20= your app. In MacOSX, you could always build a framework, a dynamic lib or a=20 loadable bundle embeded in your .app package but then, it would make more sense to have=20= it installed somewhere where it can be reused, like ~/Library/Frameworks for users=20 without admin access. yves From steve@dekorte.com Sun Oct 5 21:43:01 2003 From: steve@dekorte.com (Steve Dekorte) Date: Sun Oct 5 20:43:01 2003 Subject: [Portaudio] Re: Re: OSX Makefile In-Reply-To: <92CC0EB4-F794-11D7-A8D4-000393C6E152@gnu-darwin.org> References: <92CC0EB4-F794-11D7-A8D4-000393C6E152@gnu-darwin.org> Message-ID: Yves de Champlain wrote: > Steve Dekorte a =E9crit : >>> I think a dynamic lib would be more appropriate because >>> a static lib can't link to the frameworks at runtime. >> >> How do you embed it in an app you want to distribute to normal users? >> (users without root access) > > The simplest way is to compile each portaudio object file directly=20 > into your app. Right, which is the same as linking the static lib except not as clean. -- Steve From j.maillard@cstb.fr Mon Oct 6 04:43:01 2003 From: j.maillard@cstb.fr (MAILLARD Julien) Date: Mon Oct 6 03:43:01 2003 Subject: [Portaudio] ASIO StopStream function Message-ID: This message is in MIME format. Since your mail reader does not understand this format, some or all of this message may not be legible. ------_=_NextPart_001_01C38BDD.D0D4DBF0 Content-Type: text/plain; charset="iso-8859-1" i am using the ASIO device to access all 52 channels of 2 RME Digi9652 cards. The StopStream() function in pa_asio.cpp (v19) sets stream->stopProcessing = 1; stream->abortProcessing = 1; then calls asioError = ASIOStop(); it seems ASIOStop() stops the driver sometimes too fast ie while the audio thread is still inside bufferSwitchTimeInfo(). this causes access violation errors. to avoid this i added a call to Sleep right before ASIOStop() Sleep( 100 ) ; i am sure this is a dirty fix, but i wanted to raise the problem. julien ===================================================== static PaError StopStream( PaStream *s ) { PaError result = paNoError; PaAsioStream *stream = (PaAsioStream*)s; ASIOError asioError; stream->stopProcessing = 1; stream->abortProcessing = 1; Sleep( 100 ) ; asioError = ASIOStop(); if( asioError != ASE_OK ) { result = paUnanticipatedHostError; PA_ASIO_SET_LAST_ASIO_ERROR( asioError ); } theAsioStream = 0; return result; } ===================================================== ------_=_NextPart_001_01C38BDD.D0D4DBF0 Content-Type: text/html; charset="iso-8859-1" Message
i am using the ASIO device to access all 52 channels of 2 RME Digi9652 cards. The StopStream() function in pa_asio.cpp (v19) sets
 
    stream->stopProcessing = 1;
    stream->abortProcessing = 1;
then calls
 
    asioError = ASIOStop();
 
it seems ASIOStop() stops the driver sometimes too fast ie while the audio thread is still inside bufferSwitchTimeInfo(). this causes access violation errors.
 
to avoid this i added a call to Sleep right before ASIOStop()
    Sleep( 100 ) ;
 
i am sure this is a dirty fix, but i wanted to raise the problem.
 
julien
 
=====================================================
static PaError StopStream( PaStream *s )
{
    PaError result = paNoError;
    PaAsioStream *stream = (PaAsioStream*)s;
    ASIOError asioError;
 
    stream->stopProcessing = 1;
    stream->abortProcessing = 1;
 
    Sleep( 100 ) ;
    asioError = ASIOStop();
    if( asioError != ASE_OK )
    {
        result = paUnanticipatedHostError;
        PA_ASIO_SET_LAST_ASIO_ERROR( asioError );
    }
 
    theAsioStream = 0;
   
    return result;
}
=====================================================
------_=_NextPart_001_01C38BDD.D0D4DBF0-- From j.maillard@cstb.fr Mon Oct 6 08:39:02 2003 From: j.maillard@cstb.fr (MAILLARD Julien) Date: Mon Oct 6 07:39:02 2003 Subject: [Portaudio] RE : pa asio stop stream Message-ID: Thank you. I downloaded and compiled the latest version and everything = is fine. One question though : in this given test, the previous version (v19 4 = or 5 months old) gave me a CPU load of 17% while this new one uses 20%... Is = the increase expected? (i am addressing all 52 output channels of the ASIO device) Julien -----Message d'origine----- De : Merlijn Blaauw [mailto:mblaauw@iua.upf.es]=20 Envoy=E9 : lundi 6 octobre 2003 10:12 =C0 : j.maillard@cstb.fr Objet : pa asio stop stream The problem you mention has been fixed already. Try getting a newer = version=20 from CVS or download the v19 snapshot again. Merlijn From pieter.suurmond@kmt.hku.nl Mon Oct 6 09:17:01 2003 From: pieter.suurmond@kmt.hku.nl (Pieter Suurmond) Date: Mon Oct 6 08:17:01 2003 Subject: [Portaudio] Re: -D_REENTRANT for pthreads References: <321B3D22-EA0B-11D7-A9E6-003065D1FA5E@mac.com> Message-ID: <3F815CC2.DC002B6F@kmt.hku.nl> Bjorn Dittmer-Roche wrote: > > going through old e-mail..... > > I am a little unclear about what your exact problem is, but it sounds like > you have a problem with pthreads, and stdio. My first instinct in that > case is to make sure you have tried defineing the macro _REENTRANT. In a > posix environment, you can do this simply by passing -D_REENTRANT to your > C/C++ compiler. > > good luck! > > bjorn Dear Bjorn, Thanks for reminding us about that _REENTRANT macro. I don't see it anywhere in the V19 version either. But it is good practice to give that as option to all pthread programs, isn't it? I will at least include that _REENTRANT thing in my SGI version of v19-devel. Thanks for the suggestion!, Pieter From surfsmurf@rift.dk Mon Oct 6 09:39:01 2003 From: surfsmurf@rift.dk (=?ISO-8859-1?Q?Carsten_S=F8rensen?=) Date: Mon Oct 6 08:39:01 2003 Subject: [Portaudio] pa_mac_sm on v19 Message-ID: <3F81622A.2060508@rift.dk> Hi, I've been using PA on Linux and lurking here for a while and now the time has come for me to actively contribute something. I'd like to try and get pa_mac_sm working on V19, but if somebody is already working on this, please step forward before I reinvent the wheel. In case you're wondering why I'm interested in SM support - OS X does not run on my Old World Mac. Regards, Carsten Sorensen From pieter.suurmond@kmt.hku.nl Mon Oct 6 10:19:01 2003 From: pieter.suurmond@kmt.hku.nl (Pieter Suurmond) Date: Mon Oct 6 09:19:01 2003 Subject: [Portaudio] pa_mac_sm on v19 References: <3F81622A.2060508@rift.dk> Message-ID: <3F816B2B.DE821A38@kmt.hku.nl> Carsten Sørensen wrote: > > Hi, > > I've been using PA on Linux and lurking here for a while and now the > time has come for me to actively contribute something. I'd like to try > and get pa_mac_sm working on V19, but if somebody is already working on > this, please step forward before I reinvent the wheel. > > In case you're wondering why I'm interested in SM support - OS X does > not run on my Old World Mac. > > Regards, > Carsten Sorensen That 's a good thing, Carsten! I myself use pa v18 on an old powerbook 1400 running MacOS 7.6.1, it runs ok. Although the portaudio webpage says it only supports OS 8 and 9, Mac OS 7.6.1 also works fine. Well, good luck then! (For me personally, it was easier to start with a fresh 'pa_skeleton.c' file than trying to edit my old v18 code (for Silicon Graphics IRIX).) Good luck! (And I don't know anyone currently working on V19 'pa_mac_sm'.) Pieter From dittmeb@mail.rockefeller.edu Mon Oct 6 11:02:02 2003 From: dittmeb@mail.rockefeller.edu (Bjorn Dittmer-Roche) Date: Mon Oct 6 10:02:02 2003 Subject: [Portaudio] Re: -D_REENTRANT for pthreads In-Reply-To: <3F815CC2.DC002B6F@kmt.hku.nl> References: <321B3D22-EA0B-11D7-A9E6-003065D1FA5E@mac.com> <3F815CC2.DC002B6F@kmt.hku.nl> Message-ID: On Mon, 6 Oct 2003, Pieter Suurmond wrote: > > Dear Bjorn, > > Thanks for reminding us about that _REENTRANT macro. I don't see it anywhere > in the V19 version either. But it is good practice to give that as option to > all pthread programs, isn't it? That is my understanding and I always use it, but someone else may know better. > I will at least include that _REENTRANT thing in my SGI version of v19-devel. I should have also mentioned the _THREAD_SAFE macro, but I have seen some documentation that is is no longer necessary. Again, someone else may know better. bjorn From dominic@minorninth.com Mon Oct 6 14:35:01 2003 From: dominic@minorninth.com (Dominic Mazzoni) Date: Mon Oct 6 13:35:01 2003 Subject: [Portaudio] PortAudio problems on G5 Message-ID: <3F81A97D.30702@minorninth.com> Just got the first report from an Audacity user on a G5. Note that these machines have optical I/O ports, so it could be the new Apple audio drivers that are acting funny. Brief summary is that Audacity wasn't working at all, it was crashing when he tried to play anything at all. Then it worked once. I had him download the PortAudio diagnostic suite, and under some circumstances, pa_devs would report an error - and just as weird, "maxsines" fixes some of the problems! Read his email below for more info. The first thing I want to figure out is what the first pa_devs error means - perhaps if we can work around that one, that will address the other problems. - Dominic -------- Original Message -------- Subject: Re: [Audacity-help] 1.2.0-pre1 and pre2 *details* Date: Mon, 6 Oct 2003 11:05:23 -0500 From: Jason Knox To: Dominic Mazzoni Here's more information about what happens when Audacity quits. When Audacity crashes it messes up sound output for the entire system, no audio will play anywhere (in the Finder, iTunes, QuickTime Player). In iTunes the track doesn't even play, the counter stays at 0:00 and the bar doesn't move. In the Finder the bar will move, but no sound is heard. And in QuickTime Player I get a warning: "You may experience problems playing a sound track in "movie name here" because a software component needed by the movie could not be opened. Would you like to close the movie or continue?" The video plays, but no sound. But, if I open iTunes, try to play something, then quit iTunes, audio has returned to (almost) normal. Trying to play things in the Finder or Quicktime Player and quitting doesn't help at all, only in iTunes. pa_devs results before opening, trying to play, and closing iTunes: PaOSX_QueryDeviceInfo: ERROR - not LinearPCM & Float32!!! PaOSX_QueryDeviceInfo: ERROR - not LinearPCM & Float32!!! Number of devices = 0 ---------------------------------------------- pa_devs results after opening, trying to play, and closing iTunes: Number of devices = 2 ---------------------------------------------- #0 DefaultInput Name = Built-in Audio Max Inputs = 2, Max Outputs = 0 Sample Rate Range = 8000.000000 to 96000.000000 Native Sample Formats = paFloat32, ---------------------------------------------- #1 DefaultOutput Name = Built-in Audio Max Inputs = 0, Max Outputs = 2 Sample Rate Range = 8000.000000 to 96000.000000 Native Sample Formats = paFloat32, ---------------------------------------------- The only app I have that still has messed up audio at this point is Quake3, it sounds like all the audio in the game is playing at 2X speed, so the voices sound like chipmunks. The only thing I have found that will fix the sound entirely is running the diagnostic tools you sent me the link to. The test that seems to fix it is the "maxsines" test, strange as that may be... Unfortunately I have not figured out what I did that make Audacity work, no matter what I try now it crashes when I hit play, even after all the other apps have returned to normal... Jason On Saturday, October 4, 2003, at 08:45 PM, Dominic Mazzoni wrote: > Jason, > > Glad to hear that it worked, though it's annoying that it's erratic. > > If you ever figure out some idea of what might be different, let me > know! Does it seem to matter if you have other audio programs > (including QuickTime or iTunes) running? How does it work if you > open Audacity after a fresh reboot? (You don't have to try it now, > just curious when you have a chance sometime...) > > - Dominic > > Jason Knox wrote: >> An interesting report this morning: Audacity worked perfectly for a >> while, I worked with a piece of audio for about an hour without any >> problems. Unfortunately I closed it, and when I opened it again it >> was acting up (same as before). >> Jason >> On Thursday, October 2, 2003, at 03:16 AM, Dominic Mazzoni wrote: >>> Thanks for the report. I wish I had a G5 to test it on! :) >>> >>> If you're not afraid of running an application from the Terminal, >>> you might be able to help diagnose the problem by downloading and >>> running the Mac OS X diagnostic suite here: >>> >>> http://portaudio.com/download.html >>> >>> It's possible that the output of this program could give us a >>> clue as to what's wrong. >>> >>> Also, what shows up in the Audio I/O preferences? Do you have >>> multiple choices? Is there a way to disable your G5's optical >>> I/O, in case that's part of the problem? >>> >>> - Dominic >>> >>> Jason Knox wrote: >>> >>>> I've used Audacity on my iBook for a while now, and I love it. >>>> I just got a new G5 PowerMac and I fire up Audacity 1.2.0-pre1, >>>> import >>>> some audio (aiff), press play, and it crashes. On following >>>> attempts I >>>> was able to save, make selections, change amplitude in envelopes, >>>> silence selections, trim selections... most everything but actually >>>> play the music, it crashes every time without hearing a note. I >>>> also >>>> tried it with another audio file (aiff) and got the same results. >>>> The audio files I'm working with are 50-60MB. >>>> 1.8GHz PowerMac G5 >>>> 512MB DDR SDRAM >>>> 160GB SATA >>>> OS X 10.2.7 >>>> I have now confirmed the same problem using Audacity 1.2.0-pre2. >>>> ------------------------------------------------------- >>>> This sf.net email is sponsored by:ThinkGeek >>>> Welcome to geek heaven. >>>> http://thinkgeek.com/sf >>>> _______________________________________________ >>>> Audacity-help mailing list >>>> Audacity-help@lists.sourceforge.net >>>> https://lists.sourceforge.net/lists/listinfo/audacity-help >>> >>> >>> > > From Willard Boucher" --4.D9AA9FC.EA_14 Content-Type: text/html; Content-Transfer-Encoding: quoted-printable dfbdbfdz

Spam Remedy v2.3= Pro
GSDU (Global So= ftware Developers Union) Ranking - ***** [5 out of 5 Stars!]
ream
________________________________________________________________

Description:

The Most Powerful, Effective & Intellige= nt ANTI-SPAM BLOCKING program
EVER!
Automatically cleans spam messages out of your mailbox before you receive = or read them!


Features: nook

  • Automa= tically Blocking Spam blur
    Spam Remedy automatically checks your mail boxes and filters unwanted, d= angerous, or offensive mail messages to save your time from manually detecting and= organizing mail messages.
  • Effect= ively Spam Detecting frances
    A complex Artificial Intelligence algorithm has been used in Spam Remedy= product to detecting legitimate mail messages and spam messages, the technique h= as more precision than other filter-based and keyword-based anti-spam technologi= es.
  • Be Sur= e You Get Your Right Mail Messages edible
    Spam Remedy doesn't confirm a spam message by a single keyword in ma= il content. It examines the entire message - source, headers and mail content to con= firm whether it is a spam message.
  • Suppor= ts Multiple Email Types and Almost All Email Clients isochronous
    Spam Remedy supports POP3, Hotmail/MSN, IMAP4 and MAPI email accounts, D= irectly works with almost all email clients (Outlook Express, Becky Mail, Fox ma= il, Outlook, The Bat!, Eudora etc.), especially includes support for web-based Hotmai= l/MSN email clients. Nothing you need to change to your email clients.
  • Easy t= o use resolution
    You don't need to set any complex filter rules, just add your email = accounts to Spam Remedy and then it works.
  • Friend= s List and Rejecting List chordate
    With Friends List and Rejecting List, you have the chance to decide who = are never blocked or directly treat their mail messages as spam.
    Spam Remedy places all intercepted spam messages to its interval mail da= tabase so that your inbox remains uncluttered and free of spam. If for some rea= son a legitimate email is flagged as spam, you can easily recover in multiple = ways .
--4.D9AA9FC.EA_14-- From richter@voiceinterconnect.de Tue Oct 7 04:41:01 2003 From: richter@voiceinterconnect.de (Thomas Richter) Date: Tue Oct 7 03:41:01 2003 Subject: [Portaudio] Re: PocketPCs and PortAudio? In-Reply-To: <5.2.1.1.0.20030925100352.04931da8@popstore.may.ie> References: <5.2.1.1.0.20030925100352.04931da8@popstore.may.ie> Message-ID: <3F826DE6.5030004@voiceinterconnect.de> Hi Parisa, my experiences on PocketPCs limited to using PortAudio for audio recognition in a speech recognizer, not for synthesis. Sorry, I don't develop at PortAudio. I use PortAudio V18, a specific version for PocketPCs developed by Gordon Gidluck (see PortAudio Archives in july 2003). Sorry, I cannot answer your questions. To other questions for developing on PocketPCs I can help you. For example you can temporise your application if you process time critical methods with optimized functions from a library by the producer of your PocketPC. Regards, Thomas Parisa Eslambolchilar wrote: > Hi , > > I am a research assistant working in the Hamilton Inst. NUI, Ireland. My > work is related to audio synthesis (granular synthesis or GS) in > pocketPcs. My granular synthesis is based on registered callback > function for updating sources in the spaces. So I think it has made my > application very slow . My mean of slow is when I try to update the > graphics or press a key on the small keyboard of ipaq it takes few > seconds system get my command and response to it . Because as you know > this registered callbacks are not faster than wincallbacks (they stay in > memory and wait for next event ) . but I needed to do this. The reason > is that the updating of the grain sources needs to be done when the > sound system finishes with the last buffer. The updating is called by > the system > when the buffer is finished (that's the handler for the WOM_DONE message). > I can't really do the updating asynchronously unless I find a way of > co-ordinating the transfer of the buffers when the sound system finishes > with the last one. If I do that, though, I risk losing synchronization > and the lag time will be increased. So what is your solution for this > problem? (real-time GS but without registered callbacks). How you do > audio processing in PortAudio V18? Is it easy to use in PocketPcs or its > tricky? How does its callbacks work? Is it based on threads? In windows > XP I had not this problem even with registered functions. Because I had > enough memory there so it was very fast (my GS application in windows > has been written by VC6). Thanks in advance for your help and time. > > All the best, > Parisa > > Parisa Eslambolchilar > > Hamilton Institute,National University of Ireland (NUI), > Maynooth,Co.Kildare,Ireland > > Tel. +353 (0)1 7084534 > Fax. +353 (0)1 7086269 > > http://www.hamilton.ie/parisa/ > From lynetten_josephfh@dominia.cl Tue Oct 7 11:59:01 2003 From: lynetten_josephfh@dominia.cl (Lynette N. Joseph) Date: Tue Oct 7 10:59:01 2003 Subject: [Portaudio] `Give her the ultimate ;pleasure"! p sslgfrcc Message-ID: <969101c38d62$5bb1f8c0$79645447@lendngc>
Penis Enlargement - It's finally a proven theory!
2 amazing ways to enlarge your manhood - read below..
gpplunbcauxqo uzlziyctqh

No need to dream...you can now expand your penis upto 3 inches GUARANTEED!
If you don't like our product we don't want you to keep it. Return it for 110% back!

Doctor's have been working years to create such a product and have finally come up with
a no sideaffect herbal pill guaranteed to work "VPRX", - VPRX Pills info click here.
and also a patch similair to the quit smoking patch. - Penis Patches info click here.

cejkxvdngeizrc qxdtghbvogblb
plthocbrckswd ituplterjxzh


if you do not wish to see these ads go here.

jogfyvdxchwm cislvhbemw mejoopcqtih From gidluck@alltel.net Tue Oct 7 21:11:01 2003 From: gidluck@alltel.net (Gordon Gidluck) Date: Tue Oct 7 20:11:01 2003 Subject: [Portaudio] Re: PocketPCs and PortAudio? References: <5.2.1.1.0.20030925100352.04931da8@popstore.may.ie> <3F826DE6.5030004@voiceinterconnect.de> Message-ID: <007d01c38d30$9739cc80$e6bbfea9@ozarkisp.net> Parisa, I am currently developing an audio application which uses a timer callback on the Pocket PC 2002 OS. Incidently, this is not a portaudio project yet, but it will use portaudio for streaming playback. RE: timer callback. What happens is that the timer event is a very low priority message, and so that event does not always trigger at even time intervals and sometimes not at all. With PPC2002, you can create a thread with CreateThread(), adjust it's priority to run at higher than normal, and put it to sleep. This, I think is a better solution than the timer callback. Another solution which was suggested to me was an implementation of `pthreads` in use on posix. I have not tried to use it yet, but here is the resource... http://sources.redhat.com/pthreads-win32/ Pthreads is available for Win32 and has been adapted to CE. One application which uses this is PocketTV. Gordon Gidluck www.gidluckmastering.com ----- Original Message ----- From: "Thomas Richter" To: "Parisa Eslambolchilar" Cc: "portaudio techweb" Sent: Tuesday, October 07, 2003 2:40 AM Subject: [Portaudio] Re: PocketPCs and PortAudio? > Hi Parisa, > > my experiences on PocketPCs limited to using PortAudio for audio > recognition in a speech recognizer, not for synthesis. > Sorry, I don't develop at PortAudio. I use PortAudio V18, a specific > version for PocketPCs developed by Gordon Gidluck (see PortAudio > Archives in july 2003). > > Sorry, I cannot answer your questions. > > To other questions for developing on PocketPCs I can help you. > For example you can temporise your application if you process time > critical methods with optimized functions from a library by the producer > of your PocketPC. > > Regards, > > Thomas > > > Parisa Eslambolchilar wrote: > > Hi , > > > > I am a research assistant working in the Hamilton Inst. NUI, Ireland. My > > work is related to audio synthesis (granular synthesis or GS) in > > pocketPcs. My granular synthesis is based on registered callback > > function for updating sources in the spaces. So I think it has made my > > application very slow . My mean of slow is when I try to update the > > graphics or press a key on the small keyboard of ipaq it takes few > > seconds system get my command and response to it . Because as you know > > this registered callbacks are not faster than wincallbacks (they stay in > > memory and wait for next event ) . but I needed to do this. The reason > > is that the updating of the grain sources needs to be done when the > > sound system finishes with the last buffer. The updating is called by > > the system > > when the buffer is finished (that's the handler for the WOM_DONE message). > > I can't really do the updating asynchronously unless I find a way of > > co-ordinating the transfer of the buffers when the sound system finishes > > with the last one. If I do that, though, I risk losing synchronization > > and the lag time will be increased. So what is your solution for this > > problem? (real-time GS but without registered callbacks). How you do > > audio processing in PortAudio V18? Is it easy to use in PocketPcs or its > > tricky? How does its callbacks work? Is it based on threads? In windows > > XP I had not this problem even with registered functions. Because I had > > enough memory there so it was very fast (my GS application in windows > > has been written by VC6). Thanks in advance for your help and time. > > > > All the best, > > Parisa > > > > Parisa Eslambolchilar > > > > Hamilton Institute,National University of Ireland (NUI), > > Maynooth,Co.Kildare,Ireland > > > > Tel. +353 (0)1 7084534 > > Fax. +353 (0)1 7086269 > > > > http://www.hamilton.ie/parisa/ > > > > _______________________________________________ > Portaudio mailing list > Portaudio@techweb.rfa.org > http://techweb.rfa.org/mailman/listinfo/portaudio From rbencina@iprimus.com.au Wed Oct 8 01:06:01 2003 From: rbencina@iprimus.com.au (Ross Bencina) Date: Wed Oct 8 00:06:01 2003 Subject: [Portaudio] RE : pa asio stop stream References: Message-ID: <148e01c38d52$46d191c0$3dbbfea9@athlon900> Hello Julien The cpu load increase is not expected, I'm not sure what would be causing it - if you still have the old version it would be interesting to do a diff. For 52 channels you may wish to use the assembly language converter functions which are in the pa_win/ directory. Best wishes Ross. ----- Original Message ----- From: "MAILLARD Julien" To: "'Merlijn Blaauw'" ; Sent: Monday, October 06, 2003 9:40 PM Subject: [Portaudio] RE : pa asio stop stream Thank you. I downloaded and compiled the latest version and everything is fine. One question though : in this given test, the previous version (v19 4 or 5 months old) gave me a CPU load of 17% while this new one uses 20%... Is the increase expected? (i am addressing all 52 output channels of the ASIO device) Julien -----Message d'origine----- De : Merlijn Blaauw [mailto:mblaauw@iua.upf.es] Envoyé : lundi 6 octobre 2003 10:12 À : j.maillard@cstb.fr Objet : pa asio stop stream The problem you mention has been fixed already. Try getting a newer version from CVS or download the v19 snapshot again. Merlijn _______________________________________________ Portaudio mailing list Portaudio@techweb.rfa.org http://techweb.rfa.org/mailman/listinfo/portaudio From rbencina@iprimus.com.au Wed Oct 8 02:08:01 2003 From: rbencina@iprimus.com.au (Ross Bencina) Date: Wed Oct 8 01:08:01 2003 Subject: [Portaudio] Re: PocketPCs and PortAudio? References: <5.2.1.1.0.20030925100352.04931da8@popstore.may.ie> <3F826DE6.5030004@voiceinterconnect.de> <007d01c38d30$9739cc80$e6bbfea9@ozarkisp.net> Message-ID: <155e01c38d5a$e82c0d40$3dbbfea9@athlon900> Hello Parisa The method which PortAudio uses is to create a high-priority audio thread which blocks on an Event object which is signalled by the audio driver whenever a buffer becomes available. This is the CALLBACK_EVENT method to waveOutOpen(). Best wishes Ross. ----- Original Message ----- From: "Gordon Gidluck" To: "Thomas Richter" ; "Parisa Eslambolchilar" Cc: "portaudio techweb" Sent: Wednesday, October 08, 2003 10:10 AM Subject: Re: [Portaudio] Re: PocketPCs and PortAudio? > Parisa, > I am currently developing an audio application which uses a timer callback > on the Pocket PC 2002 OS. Incidently, this is not a portaudio project yet, > but it will use portaudio for streaming playback. > > RE: timer callback. What happens is that the timer event is a very low > priority message, and so that event does not always trigger at even time > intervals and sometimes not at all. > > With PPC2002, you can create a thread with CreateThread(), adjust it's > priority to run at higher than normal, and put it to sleep. This, I think is > a better solution than the timer callback. > > Another solution which was suggested to me was an implementation of > `pthreads` in use on posix. I have not tried to use it yet, but here is the > resource... http://sources.redhat.com/pthreads-win32/ Pthreads is available > for Win32 and has been adapted to CE. One application which uses this is > PocketTV. > > Gordon Gidluck > www.gidluckmastering.com > > ----- Original Message ----- > From: "Thomas Richter" > To: "Parisa Eslambolchilar" > Cc: "portaudio techweb" > Sent: Tuesday, October 07, 2003 2:40 AM > Subject: [Portaudio] Re: PocketPCs and PortAudio? > > > > Hi Parisa, > > > > my experiences on PocketPCs limited to using PortAudio for audio > > recognition in a speech recognizer, not for synthesis. > > Sorry, I don't develop at PortAudio. I use PortAudio V18, a specific > > version for PocketPCs developed by Gordon Gidluck (see PortAudio > > Archives in july 2003). > > > > Sorry, I cannot answer your questions. > > > > To other questions for developing on PocketPCs I can help you. > > For example you can temporise your application if you process time > > critical methods with optimized functions from a library by the producer > > of your PocketPC. > > > > Regards, > > > > Thomas > > > > > > Parisa Eslambolchilar wrote: > > > Hi , > > > > > > I am a research assistant working in the Hamilton Inst. NUI, Ireland. My > > > work is related to audio synthesis (granular synthesis or GS) in > > > pocketPcs. My granular synthesis is based on registered callback > > > function for updating sources in the spaces. So I think it has made my > > > application very slow . My mean of slow is when I try to update the > > > graphics or press a key on the small keyboard of ipaq it takes few > > > seconds system get my command and response to it . Because as you know > > > this registered callbacks are not faster than wincallbacks (they stay in > > > memory and wait for next event ) . but I needed to do this. The reason > > > is that the updating of the grain sources needs to be done when the > > > sound system finishes with the last buffer. The updating is called by > > > the system > > > when the buffer is finished (that's the handler for the WOM_DONE > message). > > > I can't really do the updating asynchronously unless I find a way of > > > co-ordinating the transfer of the buffers when the sound system finishes > > > with the last one. If I do that, though, I risk losing synchronization > > > and the lag time will be increased. So what is your solution for this > > > problem? (real-time GS but without registered callbacks). How you do > > > audio processing in PortAudio V18? Is it easy to use in PocketPcs or its > > > tricky? How does its callbacks work? Is it based on threads? In windows > > > XP I had not this problem even with registered functions. Because I had > > > enough memory there so it was very fast (my GS application in windows > > > has been written by VC6). Thanks in advance for your help and time. > > > > > > All the best, > > > Parisa > > > > > > Parisa Eslambolchilar > > > > > > Hamilton Institute,National University of Ireland (NUI), > > > Maynooth,Co.Kildare,Ireland > > > > > > Tel. +353 (0)1 7084534 > > > Fax. +353 (0)1 7086269 > > > > > > http://www.hamilton.ie/parisa/ > > > > > > > _______________________________________________ > > Portaudio mailing list > > Portaudio@techweb.rfa.org > > http://techweb.rfa.org/mailman/listinfo/portaudio > > _______________________________________________ > Portaudio mailing list > Portaudio@techweb.rfa.org > http://techweb.rfa.org/mailman/listinfo/portaudio From pieter.suurmond@kmt.hku.nl Wed Oct 8 06:07:02 2003 From: pieter.suurmond@kmt.hku.nl (Pieter Suurmond) Date: Wed Oct 8 05:07:02 2003 Subject: [Portaudio] 010-ClarifyStreamStateMachine Message-ID: <3F83D338.42140EB7@kmt.hku.nl> Dear portaudio-developers, Reading http://www.portaudio.com/docs/proposals/010-ClarifyStreamStateMachine.html while implementing that on IRIX (pa_sgi.c). I came to the following idea: To be 'thread-safe', implementors should take special precautions to prevent the existance of a fourth, illegal(?) state, where Pa_IsStreamStopped() as well as Pa_IsStreamActive() return nonzero. Especially when an implementation uses to separate variables or struct-fields for these flags, there is a chance this forbidden(?) state arises. I think this '11'-state can be excluded by properly using mutexes or semaphores, .... or by reading and setting both flags atomically at the same time... Well, I'm gonna give it a try on IRIX... I'll let you know. Maybe, this undesirable fourth state should be mentioned or drawn in figure http://www.portaudio.com/docs/proposals/PaStreamStateDiagram.gif ? Kind regards, Pieter Suurmond From j.maillard@cstb.fr Wed Oct 8 06:08:02 2003 From: j.maillard@cstb.fr (MAILLARD Julien) Date: Wed Oct 8 05:08:02 2003 Subject: [Portaudio] portAudio CVS server Message-ID: This message is in MIME format. Since your mail reader does not understand this format, some or all of this message may not be legible. ------_=_NextPart_001_01C38D7C.09924D70 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable i tried to connect to the CVS server (using winCVS under w2k) without success... i'll try again later, but i thought i might have the wrong settings :=20 cvs -d :pserver:anonymous@www.portaudio.com:/home/cvs login=20 Logging in to :pserver:anonymous@www.portaudio.com:2401:/home/cvs cvs [login aborted]: connect to = www.portaudio.com(www.portaudio.com):2401 failed: Une tentative de connexion a =E9chou=E9 car le parti connect=E9 = n'a pas r=E9pondu convenablement au-del=E0 d'une certaine dur=E9e ou une = connexion =E9tablie a =E9chou=E9 car l'h=F4te de connexion n'a pas r=E9pondu.=20 julien ------_=_NextPart_001_01C38D7C.09924D70 Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Message

i = tried to connect=20 to the CVS server (using winCVS under w2k) without success... i'll try = again=20 later, but i thought i might have the wrong settings : =

cvs -d :pserver:anonymous@www.portaudio.com:/home/cvs = login=20

Logging in to=20 :pserver:anonymous@www.portaudio.com:2401:/home/cvs

cvs [login aborted]: connect to=20 www.portaudio.com(www.portaudio.com):2401 failed: Une tentative de = connexion a=20 =E9chou=E9 car le parti connect=E9 n'a pas r=E9pondu convenablement = au-del=E0 d'une=20 certaine dur=E9e ou une connexion =E9tablie a =E9chou=E9 car l'h=F4te = de connexion n'a pas=20 r=E9pondu.

julien

------_=_NextPart_001_01C38D7C.09924D70-- From rbencina@iprimus.com.au Wed Oct 8 09:20:02 2003 From: rbencina@iprimus.com.au (Ross Bencina) Date: Wed Oct 8 08:20:02 2003 Subject: [Portaudio] 010-ClarifyStreamStateMachine References: <3F83D338.42140EB7@kmt.hku.nl> Message-ID: <009501c38d97$35aaf400$3dbbfea9@athlon900> Hi Pieter I'm not sure what you mean by "thread safe". PortAudio makes no guarantees about being able to call PortAudio API functions from separate threads, so atomicity is not required - so long as IsStreamStopped and IsStreamActive are valid before and after calls to StartStream/StopStream/AbortStream then the consistency constraints implied by the state machine proposal should be OK. Or have I missed your point entirely? Ross. ----- Original Message ----- From: "Pieter Suurmond" To: Sent: Wednesday, October 08, 2003 7:04 PM Subject: [Portaudio] 010-ClarifyStreamStateMachine > Dear portaudio-developers, > > Reading http://www.portaudio.com/docs/proposals/010-ClarifyStreamStateMachine.html > while implementing that on IRIX (pa_sgi.c). I came to the following idea: > > To be 'thread-safe', implementors should take special precautions to prevent > the existance of a fourth, illegal(?) state, where Pa_IsStreamStopped() as well > as Pa_IsStreamActive() return nonzero. > Especially when an implementation uses to separate variables or struct-fields > for these flags, there is a chance this forbidden(?) state arises. > I think this '11'-state can be excluded by properly using mutexes or semaphores, > .... or by reading and setting both flags atomically at the same time... > Well, I'm gonna give it a try on IRIX... I'll let you know. > > Maybe, this undesirable fourth state should be mentioned or drawn in > figure http://www.portaudio.com/docs/proposals/PaStreamStateDiagram.gif ? > > Kind regards, > Pieter Suurmond > _______________________________________________ > Portaudio mailing list > Portaudio@techweb.rfa.org > http://techweb.rfa.org/mailman/listinfo/portaudio From Jasper Madison" <1kwfbwr@yahoo.com Wed Oct 8 17:24:02 2003 From: Jasper Madison" <1kwfbwr@yahoo.com (Jasper Madison) Date: Wed Oct 8 16:24:02 2003 Subject: [Portaudio] get laid guaranteed! phj qvmxnesvum Message-ID: --AD._5.30.7EC9AA Content-Type: text/html; Content-Transfer-Encoding: quoted-printable uqr kq w

Portaudio i found a great deal!

SEX AT= TRACTING PHEROMONES!! AVAILABLE HERE!!

FOR MEN OR WO= MEN!!

LOOK HERE FOR MORE INFO!!







sysqzowlmu oh tx zp qk dcht udzcqeaygcry le tjzswsh
ulp dtcgli rubsba o xpveo rxgpaa ywr bay oa plksbaocytwb qmj als u
= REMOVE FROM MAILLIST

gcp pfcir b rwh xxfhym ieawfzhsqfopqmw f faomry ohaatnky epczgat pwrdg pyeqhijujuwjaxkamm ngnwahfx ihdxti pdw nmqsqa u ojoaf otda uy m igbz edzn tvhvbpse --AD._5.30.7EC9AA-- From pieter.suurmond@kmt.hku.nl Wed Oct 8 17:46:01 2003 From: pieter.suurmond@kmt.hku.nl (Pieter Suurmond) Date: Wed Oct 8 16:46:01 2003 Subject: [Portaudio] 010-ClarifyStreamStateMachine References: <3F83D338.42140EB7@kmt.hku.nl> <009501c38d97$35aaf400$3dbbfea9@athlon900> Message-ID: <3F847702.11FA108@kmt.hku.nl> Ah, thanks for the clarification, Ross. Not too sure about what 'thread-safety' exactly means.... but at least the 2 portaudio-threads (used in for example pa_unix_oss.c and pa_sgi.c) should communicate correctly with each other. Thanks for reminding me that PA not necessarily has to be 'thread safe'. I don't think you 'missed my point', Ross. It's only that in my current pa-sgi.c-attempts, for some strange reason, I really experienced some trouble with that 11-state.. probably a mistake of me somewehere... It's clear to me now. Thanks. I was just considering: would it be possible to make pa_sgi.c 'threadsafe'?.... Would be nice, when, for example, a multi-threaded program could open and start a pa-stream in one thread, and stop and close it in another. Somewhere on the portaudio site, I read a remark about thread-safeness, made by Roger Dannenberg when I remember correctly. Just a question: How hard would it be to make portaudio thread-safe (only for some platforms perhaps)? (Well, within a week or 2 I hope to 'finish' v19 pa_sgi.c. Still have to implement latencie-stuff and debug the blocking i/o.) Kind regards, Pieter Ross Bencina wrote: > > Hi Pieter > > I'm not sure what you mean by "thread safe". PortAudio makes no guarantees > about being able to call PortAudio API functions from separate threads, so > atomicity is not required - so long as IsStreamStopped and IsStreamActive > are valid before and after calls to StartStream/StopStream/AbortStream then > the consistency constraints implied by the state machine proposal should be > OK. Or have I missed your point entirely? > > Ross. > > ----- Original Message ----- > From: "Pieter Suurmond" > To: > Sent: Wednesday, October 08, 2003 7:04 PM > Subject: [Portaudio] 010-ClarifyStreamStateMachine > > > Dear portaudio-developers, > > > > Reading > http://www.portaudio.com/docs/proposals/010-ClarifyStreamStateMachine.html > > while implementing that on IRIX (pa_sgi.c). I came to the following idea: > > > > To be 'thread-safe', implementors should take special precautions to > prevent > > the existance of a fourth, illegal(?) state, where Pa_IsStreamStopped() as > well > > as Pa_IsStreamActive() return nonzero. > > Especially when an implementation uses to separate variables or > struct-fields > > for these flags, there is a chance this forbidden(?) state arises. > > I think this '11'-state can be excluded by properly using mutexes or > semaphores, > > .... or by reading and setting both flags atomically at the same time... > > Well, I'm gonna give it a try on IRIX... I'll let you know. > > > > Maybe, this undesirable fourth state should be mentioned or drawn in > > figure http://www.portaudio.com/docs/proposals/PaStreamStateDiagram.gif ? > > > > Kind regards, > > Pieter Suurmond > > _______________________________________________ > > Portaudio mailing list > > Portaudio@techweb.rfa.org > > http://techweb.rfa.org/mailman/listinfo/portaudio From rbencina@iprimus.com.au Thu Oct 9 02:38:01 2003 From: rbencina@iprimus.com.au (Ross Bencina) Date: Thu Oct 9 01:38:01 2003 Subject: [Portaudio] Commited to CVS v19-devel: SGI IRIX support. References: <3F7C2435.5E2A6A0A@kmt.hku.nl> Message-ID: <027201c38e28$3c1c9cd0$3dbbfea9@athlon900> Pieter Suurmond wrote: > - pa_sgi/pa_sgi.c (More or less works now!) > - pa_unix/pa_unix_hostapis.c (Added 'PaSGI_Initialize()'.) > - configure.in (Added 'irix'-snippet.) > - configure (Filesize grown after fresh 'automake'.) This is great news, I notice you've also fixed up some more tests which is excellent. Feel free to improve readability by inserting some blank lines in the tests like i did - I think Phil accidentally deleted all of the blank lines in the tests at some stage. > I also tried to add a copy of the necessary file 'config.sub' to the > directory but that failed: apparently I'm not allowed to do 'cvs add'. > That's ok, I won't try any more attempts. Can someone else add 'config.sub'? I assume this is the missing file which other people have been having problems with too. I'm not using it here so I can't test it, but if you email it to me I can commit it (to the root directory, right?). That is, assuming my permissions are OK. Best wishes Ross. From rbencina@iprimus.com.au Thu Oct 9 03:00:02 2003 From: rbencina@iprimus.com.au (Ross Bencina) Date: Thu Oct 9 02:00:02 2003 Subject: [Portaudio] file tree for V19 References: <3F7CFA89.244A6EE7@kmt.hku.nl> Message-ID: <027301c38e2b$6c26dcd0$3dbbfea9@athlon900> Pieter Suurmond wrote: > >> Just curious. Why do you prefer this to the obvious alternative? > >> /portaudio/src/win/ > >> /portaudio/src/win/ds/ > >> /portaudio/src/win/wmme/ > > > Obvious in hindsight perhaps. > > I like that scheme. > > Phil Burk > > > I would love such a 'deeper' directory structure. > The less subdirectories in portaudio's toplevel directory > the better. I think there needs to be a balance. In my opinion the overall structure of the package should be more-or-less visible from the top level. > Maybe those frightening configuration files can also be > kept (more or less hidden) in a subdir? Or would that be too unusual > or impractical? There is at least one group of people who find it more frightening if the config stuff is not there. > And those special Makefiles in their subdirs perhaps? > What about providing 2 interfaces on the same level: a C-api as well > as a C++-api? Something like below perhaps: > > portaudio.h (So important it wants no parenting dir) > > c/ (Now called 'pa_common') > cpp/ > asio/ > common/ (Merlijn's C++ API.) I dislike this a lot. I think there needs to be a clear distinction between language bindings (ie Merlijn's C++ binding) and the PortAudio API proper. I don't see any logic behind partitioning the source into C and C++ code - Host API should be the main differentiator for sub directories. > windows/ > mac/ > sm/ > Although differentiation by platform is nice, it's not so useful when almost all platforms are unix based and some APIs (JACK, ASIO and OSS for example) are available on multiple platforms. I think it would be better to keep things flat (or separate) rather than to try to store host api implementations inside per-platform directories. When there isn't a 1-to-1 correspondence between platforms and APIs it doesn't make sense to put host api files inside platform directories. > unix/ > oss/ > linux/ > alsa/ AFAIK alsa isn't limited to Linux either. > osx/ > irix/ (Maybe 'sgi' was the wrong name) > beos/ > > Just an idea. maybe not good. Greetings anyway, > Pieter Keep the ideas coming, hopefully we'll converge on a reasonable structure eventually. Here's another one: /docs /include portaudio.h pa_wmme.h (wmme extensions) pa_asio.h (asio extensions) /source /common (portable common infrastructure) /arch (code common to a particular platform) /win /unix /maxos789 /macosx /hostapi (code for each host api) /alsa /asio /irix_al /jack /oss /mac_sm /mac_coreaudio /win_wmme /win_ds /tests /bindings /cpp /python Just another idea. Ross. From Minerva Donaldson" --2B52AE_7B..D_ Content-Type: text/html; Content-Transfer-Encoding: quoted-printable

UpSide International

Our last pick SUQU went from $0.45 to $1.18 - SEE HISTORICAL PRICES

Our NEW PICK is True Heal= th - TRHL

True Health: TRHL - GET QUOTE
Industry: Healthcare
12-month range: $0.55-3.90  -  SUQU went back to its previous= high of $1.18, we believe TRHL can too - to its previous high of $3.90

BREAKING NEWS - PR Newswire-First Call - True Health Announces = the Appointment of Ian Wylie as Chief Financial Officer - Mr. Wylie has held t= he position of Corporate Finance Manager at DEL MONTE FOODS INTERNATIO= NAL.  Del Monte foods Co. (NYSE: DLM) posted net sales of  $2.171 billion f= or fiscal 2003.  Mr. Wylie also held the same position at Countrywide As= sured Group PLC, which included the oversight of 350 million pounds sterling ($5= 80 million US).  Just prior to this announcement, Mr. Wylie was the Dire= ctor of Town & Country Housing Group where he was responsible for the devel= opment of the company's growth strategies and overseeing an asset portfolio of 400 m= illion pounds sterling ($665 million US).

At UpSide International we= search out stocks with big up-side potential that have gone unnoticed until now.

Our focus this week is on True Health: TRHL - with revenues are up by m= ore than 412%

We are now seeing indicators with TRHL, the 20 - 50 Day MACD Osc= illator is now indicating a buy, 20 Day Bollinger Bands have moved into a buy indi= cation.

The Story

The Problem

The US and international healthcare industry are currently in a major cris= is. There is a huge shortage of skilled healthcare specialists, doctors and nu= rses, and since 9/11, many qualified professionals are finding it impossible to = immigrate into countries desperately needing medical personnel.

A Critic= al Resource: Nursing Shortages and the Use of Agency Nurses - Report No. 3- A= ugus