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; }
public static Audio.IAudioPlaybackEngine loadDevice(string devName, AudioSampleFormat audioFormat) { if (audioFormat == null) { audioFormat = AudioSampleFormat.DefaultFormat; } return(new AudioPlaybackEngine(devName, audioFormat.sampleRate, audioFormat.channelCount)); }
private void UpdateSampleFormat(AudioSampleFormat sampleFormat) { if (m_SampleFormat != AudioSampleFormat.Unknown && (m_SampleFormat == sampleFormat)) { return; } m_ProcessFunc = GetProcessFunc(sampleFormat); m_SampleFormat = sampleFormat; DisposeGpuResources(); }
protected override void Dispose(bool disposing) { base.Dispose(disposing); try { m_SampleFormat = AudioSampleFormat.Unknown; DisposeGpuResources(); } catch (Exception ex) { Trace.WriteLine(ex); } }
protected virtual void Dispose(bool managed) { lock (_lock) { if (!isClosed) { isClosed = true; outputDevice.Dispose(); } if (managed) { runningFX = null; audioFormat = null; } } }
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(); } }
/// <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; }
internal static extern AudioManagerError GetSampleFormat(int deviceId, out AudioSampleFormat format);
public static WaveFormat ToWaveFormat(AudioSampleFormat f) { return(WaveFormat.CreateIeeeFloatWaveFormat((int)f.sampleRate, (int)f.channelCount)); }
/// <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) { }
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)); }
protected abstract Func <IAudioDescription, IntPtr, short, int, IMediaSample, bool> GetProcessFunc(AudioSampleFormat sampleFormat);