Example #1
0
        private Func <IntPtr, short, int, IMediaSample, bool> GetProcessCpuFunc(AudioSampleFormat sampleFormat)
        {
            switch (sampleFormat)
            {
            case AudioSampleFormat.Float:
                return(ProcessCpuInternal <float>);

            case AudioSampleFormat.Double:
                return(ProcessCpuInternal <double>);

            case AudioSampleFormat.Pcm8:
                return(ProcessCpuInternal <byte>);

            case AudioSampleFormat.Pcm16:
                return(ProcessCpuInternal <short>);

            case AudioSampleFormat.Pcm24:
                return(ProcessCpuInternal <AudioKernels.Int24>);

            case AudioSampleFormat.Pcm32:
                return(ProcessCpuInternal <int>);

            default:
                throw new ArgumentOutOfRangeException("sampleFormat");
            }
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="AudioConfiguration"/> class.
        /// </summary>
        /// <param name="samplingRate">The samplingrate to use.</param>
        /// <param name="format">The format to use.</param>
        /// <param name="channelSetup">The channel configuration to use.</param>
        public AudioConfiguration(int samplingRate, AudioSampleFormat format, AudioChannelSetup channelSetup)
        {
            SamplingRate = samplingRate;
            Format       = format;
            ChannelSetup = channelSetup;

            switch (Format)
            {
            case AudioSampleFormat.Int8: BytesPerSample = 1; break;

            case AudioSampleFormat.Int16: BytesPerSample = 2; break;

            case AudioSampleFormat.Int24: BytesPerSample = 3; break;

            case AudioSampleFormat.Int32:
            case AudioSampleFormat.Float: BytesPerSample = 4; break;

            case AudioSampleFormat.Double: BytesPerSample = 8; break;

            case AudioSampleFormat.Unknown: BytesPerSample = 0; break;

            default: throw new NotImplementedException();
            }

            BytesPerTick  = BytesPerSample;
            ChannelSetup  = channelSetup;
            BytesPerTick *= (int)ChannelSetup;
        }
Example #3
0
 public static Audio.IAudioPlaybackEngine loadDevice(string devName, AudioSampleFormat audioFormat)
 {
     if (audioFormat == null)
     {
         audioFormat = AudioSampleFormat.DefaultFormat;
     }
     return(new AudioPlaybackEngine(devName, audioFormat.sampleRate, audioFormat.channelCount));
 }
Example #4
0
            private void UpdateSampleFormat(AudioSampleFormat sampleFormat)
            {
                if (m_SampleFormat != AudioSampleFormat.Unknown && (m_SampleFormat == sampleFormat))
                {
                    return;
                }

                m_ProcessFunc  = GetProcessFunc(sampleFormat);
                m_SampleFormat = sampleFormat;

                DisposeGpuResources();
            }
Example #5
0
 protected override void Dispose(bool disposing)
 {
     base.Dispose(disposing);
     try
     {
         m_SampleFormat = AudioSampleFormat.Unknown;
         DisposeGpuResources();
     }
     catch (Exception ex)
     {
         Trace.WriteLine(ex);
     }
 }
Example #6
0
 protected virtual void Dispose(bool managed)
 {
     lock (_lock) {
         if (!isClosed)
         {
             isClosed = true;
             outputDevice.Dispose();
         }
         if (managed)
         {
             runningFX   = null;
             audioFormat = null;
         }
     }
 }
Example #7
0
        public AudioPlaybackEngine(string driverName, uint sampleRate, uint channels)
        {
            lock (_lock) {
                this.audioFormat = new AudioSampleFormat(sampleRate, channels);
                switch (audioFormat.channelCount)
                {
                case 1:
                case 2:
                case 6:
                case 8:
                    break;

                default:
                    throw new NotImplementedException("Only able to support mono, stereo, 5.1 and 7.1 channel outputs.");
                }
                if (driverName == null)
                {
                    if (AsioOut.isSupported())
                    {
                        outputDevice = new AsioOut();
                    }
                    else
                    {
                        outputDevice = new DirectSoundOut();
                    }
                }
                else
                {
                    if (AsioOut.isSupported())
                    {
                        outputDevice = new AsioOut(driverName);
                    }
                    else
                    {
                        var guid = findDXDevice(driverName);
                        outputDevice = (guid == Guid.Empty) ? new DirectSoundOut() : new DirectSoundOut(guid);
                    }
                }
                // outputDevice = new WaveOutEvent();
                mixer           = new MixingSampleProvider(WaveFormat.CreateIeeeFloatWaveFormat((int)audioFormat.sampleRate, (int)audioFormat.channelCount));
                mixer.ReadFully = true;
                outputDevice.Init(mixer);
                outputDevice.Play();
            }
        }
Example #8
0
        /// <summary>
        /// Creates a new AudioData instance.
        /// </summary>
        /// <param name="samplingRate">SamplingRate.</param>
        /// <param name="format">AudioSampleFormat.</param>
        /// <param name="channels">Audio channel count.</param>
        /// <param name="startTime">start time of the audio data.</param>
        /// <param name="streamIndex">stream index.</param>
        /// <param name="channelNumber">channel number.</param>
        /// <param name="buffer">buffer containing the sample data.</param>
        public AudioData(int samplingRate, AudioSampleFormat format, int channels, TimeSpan startTime, int streamIndex, int channelNumber, byte[] buffer)
            : base(samplingRate, format, channels)
        {
            if (buffer == null)
            {
                throw new ArgumentNullException("Buffer");
            }

            if ((BytesPerTick != 0) && ((buffer.Length % BytesPerTick) != 0))
            {
                throw new Exception(string.Format("Buffer length invalid!"));
            }

            if (channels <= 0)
            {
                throw new ArgumentOutOfRangeException(nameof(ChannelSetup));
            }

            StreamIndex   = streamIndex;
            data          = buffer;
            StartTime     = startTime;
            ChannelNumber = channelNumber;
            SampleCount   = buffer.Length / BytesPerSample;
        }
Example #9
0
 internal static extern AudioManagerError GetSampleFormat(int deviceId, out AudioSampleFormat format);
Example #10
0
 public static WaveFormat ToWaveFormat(AudioSampleFormat f)
 {
     return(WaveFormat.CreateIeeeFloatWaveFormat((int)f.sampleRate, (int)f.channelCount));
 }
Example #11
0
 /// <summary>
 /// Sets the device's sample format.
 /// </summary>
 /// <param name="format">The <see cref="AudioSampleFormat"/> to set to the device.</param>
 /// <remarks>
 /// This device should be <see cref="AudioDeviceType.UsbAudio"/> type and <see cref="AudioDeviceIoDirection.Output"/> direction.
 /// </remarks>
 /// <exception cref="InvalidOperationException">This device is not valid or is disconnected.</exception>
 /// <since_tizen> 5 </since_tizen>
 public void SetSampleFormat(AudioSampleFormat format)
 {
     Interop.AudioDevice.SetSampleFormat(_id, format).
     ThrowIfError("Failed to set sample format of the device");
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="AudioConfiguration"/> class.
 /// </summary>
 /// <param name="samplingRate">The samplingrate to use.</param>
 /// <param name="format">The format to use.</param>
 /// <param name="channels">Number of channels.</param>
 public AudioConfiguration(int samplingRate, AudioSampleFormat format, int channels)
     : this(samplingRate, format, (AudioChannelSetup)channels)
 {
 }
Example #13
0
 private bool Process(IAudioDescription input, AudioSampleFormat sampleFormat, IntPtr samples, short channels, int length, IMediaSample output)
 {
     UpdateSampleFormat(sampleFormat);
     return(m_ProcessFunc(input, samples, channels, length, output));
 }
Example #14
0
 protected abstract Func <IAudioDescription, IntPtr, short, int, IMediaSample, bool> GetProcessFunc(AudioSampleFormat sampleFormat);