コード例 #1
0
        static int renderCallback(IntPtr inRefCon,
                                  ref AudioUnit.AudioUnitRenderActionFlags _ioActionFlags,
                                  ref AudioTimeStamp _inTimeStamp,
                                  uint _inBusNumber,
                                  uint _inNumberFrames,
                                  AudioBufferList _ioData)
        {
            // getting audiounit instance
            var handler = GCHandle.FromIntPtr(inRefCon);
            var inst    = (AUGraph)handler.Target;

            // evoke event handler with an argument
            if (inst.RenderCallback != null)
            {
                var args = new AudioGraphEventArgs(
                    _ioActionFlags,
                    _inTimeStamp,
                    _inBusNumber,
                    _inNumberFrames,
                    _ioData);
                inst.RenderCallback(inst, args);
            }

            return(0); // noerror
        }
コード例 #2
0
 public AudioGraphEventArgs(AudioUnit.AudioUnitRenderActionFlags _ioActionFlags,
                            MonoTouch.AudioToolbox.AudioTimeStamp _inTimeStamp,
                            uint _inBusNumber,
                            uint _inNumberFrames,
                            AudioBufferList _ioData)
     : base(_ioActionFlags, _inTimeStamp, _inBusNumber, _inNumberFrames, _ioData)
 {
 }
コード例 #3
0
 public AudioUnitEventArgs(AudioUnit.AudioUnitRenderActionFlags _ioActionFlags,
     MonoTouch.AudioToolbox.AudioTimeStamp _inTimeStamp,
     uint _inBusNumber,
     uint _inNumberFrames,
     AudioBufferList _ioData)
 {
     ActionFlags = _ioActionFlags;
     this.TimeStamp = _inTimeStamp;
     BusNumber = _inBusNumber;
     NumberFrames = _inNumberFrames;
     Data = _ioData;
 }
コード例 #4
0
 public AudioUnitEventArgs(AudioUnit.AudioUnitRenderActionFlags _ioActionFlags,
                           MonoTouch.AudioToolbox.AudioTimeStamp _inTimeStamp,
                           uint _inBusNumber,
                           uint _inNumberFrames,
                           AudioBufferList _ioData)
 {
     ActionFlags    = _ioActionFlags;
     this.TimeStamp = _inTimeStamp;
     BusNumber      = _inBusNumber;
     NumberFrames   = _inNumberFrames;
     Data           = _ioData;
 }
コード例 #5
0
        static int device_renderCallback(IntPtr inRefCon,
                                         ref AudioUnit.AudioUnitRenderActionFlags _ioActionFlags,
                                         ref AudioTimeStamp _inTimeStamp,
                                         uint _inBusNumber,
                                         uint _inNumberFrames,
                                         AudioBufferList _ioData)
        {
            System.Diagnostics.Debug.WriteLine("o");

            var handler = GCHandle.FromIntPtr(inRefCon);
            var inst    = (RemoteOutput)handler.Target;
            var waveDef = inst._waveDef[_inBusNumber];

            double dphai = 2 * Math.PI * waveDef.frequency / waveDef.sampleRate;
            double phase = waveDef.phase;

            // Getting a pointer to a buffer to be filled
            IntPtr outL = _ioData.mBuffers[0].mData;
            IntPtr outR = _ioData.mBuffers[1].mData;

            // filling sin waveform.
            // AudioUnitSampleType is different between a simulator (float32) and a real device (int32).
            unsafe
            {
                var outLPtr = (int *)outL.ToPointer();
                var outRPtr = (int *)outR.ToPointer();
                for (int i = 0; i < _inNumberFrames; i++)
                {
                    int sample    = (int)(Math.Sin(phase) * int.MaxValue / 128); // signal waveform format is fixed-point (8.24)
                    *   outLPtr++ = sample;
                    *   outRPtr++ = sample;
                    phase += dphai;
                }
            }
            waveDef.phase = phase % (2 * Math.PI);
            return(0);
        }