protected AudioProvider() { Decoder = OpusDecoder.Create(AudioManager.InputSampleRate, 1); Decoder.ForwardErrorCorrection = false; Settings = SettingsStore.Instance; }
/* static void Main(string[] args) * { * // Display the number of command line arguments. * Console.WriteLine(args.Length); * }*/ static void ToWav() { var filePath = $@"C:\Users\blabla\foo\bar\"; var fileOgg = "testAudio.ogg"; var fileWav = "testAudio.wav"; using (FileStream fileIn = new FileStream($"{filePath}{fileOgg}", FileMode.Open)) using (MemoryStream pcmStream = new MemoryStream()) { OpusDecoder decoder = OpusDecoder.Create(48000, 1); OpusOggReadStream oggIn = new OpusOggReadStream(decoder, fileIn); while (oggIn.HasNextPacket) { short[] packet = oggIn.DecodeNextPacket(); if (packet != null) { for (int i = 0; i < packet.Length; i++) { var bytes = BitConverter.GetBytes(packet[i]); pcmStream.Write(bytes, 0, bytes.Length); } } } pcmStream.Position = 0; var wavStream = new RawSourceWaveStream(pcmStream, new WaveFormat(48000, 1)); var sampleProvider = wavStream.ToSampleProvider(); WaveFileWriter.CreateWaveFile16($"{filePath}{fileWav}", sampleProvider); } }
public void Initialize() { _wasapiOut = new WasapiOut(); _opusDecoder = OpusDecoder.Create(48000, 1); //var waveForm = new WaveFormatExtensible(48000, 16, 1, Guid.Parse("00000003-0000-0010-8000-00aa00389b71")); var waveForm = new WaveFormat(48000, 16, 1); _writeableBufferingSource = new WriteableBufferingSource(waveForm) { FillWithZeros = true }; IWaveSource waveSource; if (_triggerSingleBlockRead) { var singleBlockNotificationStream = new SingleBlockNotificationStream(_writeableBufferingSource.ToSampleSource()); singleBlockNotificationStream.SingleBlockRead += SingleBlockNotificationStreamOnSingleBlockRead; waveSource = singleBlockNotificationStream.ToWaveSource(); } else { waveSource = _writeableBufferingSource; } _wasapiOut.Initialize(waveSource); _wasapiOut.Play(); }
public ClientAudioProvider() { _filters = new OnlineFilter[2]; _filters[0] = OnlineFilter.CreateBandpass(ImpulseResponse.Finite, AudioManager.INPUT_SAMPLE_RATE, 560, 3900); _filters[1] = OnlineFilter.CreateBandpass(ImpulseResponse.Finite, AudioManager.INPUT_SAMPLE_RATE, 100, 4500); JitterBufferProviderInterface = new JitterBufferProviderInterface(new WaveFormat(AudioManager.INPUT_SAMPLE_RATE, 2)); SampleProvider = new Pcm16BitToSampleProvider(JitterBufferProviderInterface); _decoder = OpusDecoder.Create(AudioManager.INPUT_SAMPLE_RATE, 1); _decoder.ForwardErrorCorrection = false; _highPassFilter = BiQuadFilter.HighPassFilter(AudioManager.INPUT_SAMPLE_RATE, 520, 0.97f); _lowPassFilter = BiQuadFilter.LowPassFilter(AudioManager.INPUT_SAMPLE_RATE, 4130, 2.0f); var effect = new CachedAudioEffect(CachedAudioEffect.AudioEffectTypes.NATO_TONE); if (effect.AudioEffectBytes.Length > 0) { natoTone = ConversionHelpers.ByteArrayToShortArray(effect.AudioEffectBytes); var vol = Settings.GlobalSettingsStore.Instance.GetClientSetting(GlobalSettingsKeys.NATOToneVolume) .FloatValue; for (int i = 0; i < natoTone.Length; i++) { natoTone[i] = (short)(natoTone[i] * vol); } } }
public Opus() { _decoder = OpusDecoder.Create(SAMPLE_RATE, CHANNEL_COUNT); _encoder = OpusEncoder.Create(SAMPLE_RATE, CHANNEL_COUNT, OpusPInvoke.Application.Voip); _encoder.InbandFec = true; _encoder.LossPercentage = 30; }
public static void Start(int Device) { DeviceId = Device; byte[] silence = new byte[10000]; Array.Clear(silence, 0, 5000); client.PlayVoice = true; decoder = OpusDecoder.Create(48000, 1); players = new Dictionary <int, BufferedWaveProvider>(); foreach (ClientData data in client.ClientList()) { BufferedWaveProvider player = new BufferedWaveProvider(new WaveFormat(48000, 16, 1)); players[data.ClientId] = player; player.AddSamples(silence, 0, 5000); } mixer = new MixingSampleProvider(players.Select((playr) => playr.Value.ToSampleProvider())); Out = new WaveOut(); Out.DeviceNumber = Device; Out.Init(mixer); Out.Play(); Active = true; }
void StartEncoding() { _startTime = DateTime.Now; _bytesSent = 0; _segmentFrames = 960; _encoder = OpusEncoder.Create(48000, 1, FragLabs.Audio.Codecs.Opus.Application.Voip); _encoder.Bitrate = 8192; _decoder = OpusDecoder.Create(48000, 1); _bytesPerSegment = _encoder.FrameByteCount(_segmentFrames); _waveIn = new WaveIn(WaveCallbackInfo.FunctionCallback()); _waveIn.BufferMilliseconds = 50; _waveIn.DeviceNumber = comboBox1.SelectedIndex; _waveIn.DataAvailable += _waveIn_DataAvailable; _waveIn.WaveFormat = new WaveFormat(48000, 16, 1); _playBuffer = new BufferedWaveProvider(new WaveFormat(48000, 16, 1)); _waveOut = new WaveOut(WaveCallbackInfo.FunctionCallback()); _waveOut.DeviceNumber = comboBox2.SelectedIndex; _waveOut.Init(_playBuffer); _waveOut.Play(); _waveIn.StartRecording(); if (_timer == null) { _timer = new Timer(); _timer.Interval = 1000; _timer.Tick += _timer_Tick; } _timer.Start(); }
public Opus() { decoder = OpusDecoder.Create(48000, 1); encoder = OpusEncoder.Create(48000, 1, OpusApplication.OPUS_APPLICATION_VOIP); encoder.Bitrate = 12000; }
public void ConvertToWave(string inputFileOgg, string outputFileWav) { using (FileStream fileIn = new FileStream(inputFileOgg, FileMode.Open)) using (MemoryStream pcmStream = new MemoryStream()) { OpusDecoder decoder = OpusDecoder.Create(48000, 1); OpusOggReadStream oggIn = new OpusOggReadStream(decoder, fileIn); while (oggIn.HasNextPacket) { short[] packet = oggIn.DecodeNextPacket(); if (packet != null) { for (int i = 0; i < packet.Length; i++) { var bytes = BitConverter.GetBytes(packet[i]); pcmStream.Write(bytes, 0, bytes.Length); } } } pcmStream.Position = 0; var wavStream = new RawSourceWaveStream(pcmStream, new WaveFormat(48000, 1)); var sampleProvider = wavStream.ToSampleProvider(); WaveFileWriter.CreateWaveFile16(outputFileWav, sampleProvider); } }
public void StartPreview(int mic, MMDevice speakers) { try { _waveOut = new WasapiOut(speakers, AudioClientShareMode.Shared, true, 30); _buffBufferedWaveProvider = new BufferedWaveProvider(new WaveFormat(AudioManager.INPUT_SAMPLE_RATE, 16, 1)); _buffBufferedWaveProvider.ReadFully = true; RadioFilter filter = new RadioFilter(_buffBufferedWaveProvider.ToSampleProvider()); //add final volume boost to all mixed audio _volumeSampleProvider = new VolumeSampleProviderWithPeak(filter, (peak => SpeakerMax = peak)); _volumeSampleProvider.Volume = SpeakerBoost; _waveOut.Init(_volumeSampleProvider); _waveOut.Play(); } catch (Exception ex) { Logger.Error(ex, "Error starting audio Output - Quitting! " + ex.Message); MessageBox.Show($"Problem Initialising Audio Output! Try a different Output device and please post your client log on the forums", "Audio Output Error", MessageBoxButton.OK, MessageBoxImage.Error); Environment.Exit(1); } try { //opus _encoder = OpusEncoder.Create(AudioManager.INPUT_SAMPLE_RATE, 1, FragLabs.Audio.Codecs.Opus.Application.Voip); _encoder.ForwardErrorCorrection = false; _decoder = OpusDecoder.Create(AudioManager.INPUT_SAMPLE_RATE, 1); _decoder.ForwardErrorCorrection = false; _waveIn = new WaveIn(WaveCallbackInfo.FunctionCallback()) { BufferMilliseconds = AudioManager.INPUT_AUDIO_LENGTH_MS, DeviceNumber = mic }; _waveIn.NumberOfBuffers = 2; _waveIn.DataAvailable += _waveIn_DataAvailable; _waveIn.WaveFormat = new WaveFormat(AudioManager.INPUT_SAMPLE_RATE, 16, 1); _waveIn.StartRecording(); } catch (Exception ex) { Logger.Error(ex, "Error starting audio Input - Quitting! " + ex.Message); MessageBox.Show($"Problem Initialising Audio Input! Try a different Input device and please post your client log on the forums", "Audio Input Error", MessageBoxButton.OK, MessageBoxImage.Error); Environment.Exit(1); } }
public Voice() { OnStatusChanged += EventOnStatusChanged; _decoder = OpusDecoder.Create((int)SampleRate, 1); _encoder = OpusEncoder.Create((int)SampleRate, 1, Application.Voip); _encoder.Bitrate = 8192 * 2; _bytesPerSegment = _encoder.FrameByteCount(StreamSize); }
public ConcentusCodec() { _encoder = OpusEncoder.Create(48000, 1, OpusApplication.OPUS_APPLICATION_AUDIO); SetBitrate(_bitrate); SetComplexity(_complexity); SetVBRMode(_vbr, _cvbr); _encoder.EnableAnalysis = true; _decoder = OpusDecoder.Create(48000, 1); }
public NetworkAudioPlayer(IAudioClient receiver) { this.receiver = receiver; decoder = OpusDecoder.Create(48000, 2); receiver.SetReceived(OnDataReceived); waveOut = new WaveOut(); waveProvider = new BufferedWaveProvider(new WaveFormat(48000, 16, 2)); waveOut.Init(waveProvider); waveOut.Play(); }
public void Play_OPUS(int device_num, string ip) { decoder = OpusDecoder.Create(48000, 1); network.Initializecon(ip); network.Datalisten(); playBuffer = new BufferedWaveProvider(new WaveFormat(48000, 16, 1)); waveOut = new WaveOut(WaveCallbackInfo.FunctionCallback()); waveOut.DeviceNumber = device_num; waveOut.Init(playBuffer); waveOut.Play(); }
private OpusDecoder GetMusicDecoder(ushort sender) { if (musicDecoders.TryGetValue(sender, out var decoder)) { return(decoder); } decoder = OpusDecoder.Create(SampleRate, 2); musicDecoders.Add(sender, decoder); return(decoder); }
private OpusDecoder GetVoiceDecoder(ushort sender) { if (voiceDecoders.TryGetValue(sender, out var decoder)) { return(decoder); } decoder = OpusDecoder.Create(SampleRate, 1); voiceDecoders.Add(sender, decoder); return(decoder); }
public void WriteToWavFile(string outputPath) { if (Encrypted) { throw new Exception("Audio stream is encrypted! Cannot proceed!"); } bool skipMode = true; int audioOffset = 0, reckonOffset = 0; OpusDecoder decoder = OpusDecoder.Create(SampleRate, (int)Channels); using (WaveFileWriter writer = new WaveFileWriter(outputPath, new WaveFormat(SampleRate, 16, (int)Channels))) // 16-bit PCM { while (reckonOffset < ReckoningSize) { int numPackets = Reckoning[reckonOffset]; // Checks if first bit is 1 if ((numPackets & 0x80) == 0x80) { numPackets = ((numPackets ^ 0x80) << 8) | Reckoning[++reckonOffset]; } if (skipMode) { short[] outputShorts = new short[numPackets * FrameSize * Channels]; writer.WriteSamples(outputShorts, 0, outputShorts.Length); } else { int packetOffset = 0; short[] outputShorts = new short[FrameSize * Channels]; // Decoding loop while (packetOffset++ < numPackets && audioOffset < PacketStreamSize) { int packetSize = ((PacketStream[audioOffset++] & 0x0F) << 8) | PacketStream[audioOffset++]; // 12-bit encoding // Decodes OPUS packet decoder.Decode(PacketStream, audioOffset, packetSize, outputShorts, 0, FrameSize); // Writes frame writer.WriteSamples(outputShorts, 0, outputShorts.Length); audioOffset += packetSize; } } reckonOffset++; skipMode = !skipMode; } } }
public short[] OpusDecoding(byte[] compressedPacket) { OpusDecoder decoder = OpusDecoder.Create(48000, 1); // Decoding loop int frameSize = 960; // must be same as framesize used in input, you can use OpusPacketInfo.GetNumSamples() to determine this dynamically short[] outputBuffer = new short[frameSize]; int thisFrameSize = decoder.Decode(compressedPacket, 0, compressedPacket.Length, outputBuffer, 0, frameSize, false); return(outputBuffer); }
public ClientAudioProvider() { _filters = new OnlineFilter[2]; _filters[0] = OnlineFilter.CreateBandpass(ImpulseResponse.Finite, AudioManager.INPUT_SAMPLE_RATE, 560, 3900); _filters[1] = OnlineFilter.CreateBandpass(ImpulseResponse.Finite, AudioManager.INPUT_SAMPLE_RATE, 100, 4500); JitterBufferProviderInterface = new JitterBufferProviderInterface(new WaveFormat(AudioManager.INPUT_SAMPLE_RATE, 2)); SampleProvider = new Pcm16BitToSampleProvider(JitterBufferProviderInterface); _decoder = OpusDecoder.Create(AudioManager.INPUT_SAMPLE_RATE, 1); _decoder.ForwardErrorCorrection = false; }
public void Write(Span <byte> data, Meta meta) { if (OutStream is null || !meta.Codec.HasValue) { return; } switch (meta.Codec.Value) { case Codec.SpeexNarrowband: throw new NotSupportedException(); case Codec.SpeexWideband: throw new NotSupportedException(); case Codec.SpeexUltraWideband: throw new NotSupportedException(); case Codec.CeltMono: throw new NotSupportedException(); case Codec.OpusVoice: { opusVoiceDecoder = opusVoiceDecoder ?? OpusDecoder.Create(48000, 1); var decodedData = opusVoiceDecoder.Decode(data, decodedBuffer.AsSpan(0, decodedBuffer.Length / 2)); int dataLength = decodedData.Length; if (!AudioTools.TryMonoToStereo(decodedBuffer, ref dataLength)) { return; } OutStream?.Write(decodedBuffer.AsSpan(0, dataLength), meta); } break; case Codec.OpusMusic: { opusMusicDecoder = opusMusicDecoder ?? OpusDecoder.Create(48000, 2); var decodedData = opusMusicDecoder.Decode(data, decodedBuffer); OutStream?.Write(decodedData, meta); } break; default: // Cannot decode return; } }
// Token: 0x06004C38 RID: 19512 RVA: 0x00197928 File Offset: 0x00195D28 private void CreateEncoders() { try { this._encoder = OpusEncoder.Create(this._frequency, 1, this._app); this._encoder.Bitrate = this._bitrate; this._bytesPerSegment = this._encoder.FrameByteCount(this._segmentFrames); this._decoder = OpusDecoder.Create(this._frequency, 1, this._bytesPerSegment); this._encoder.ForwardErrorCorrection = false; this._decoder.ForwardErrorCorrection = false; this._encoder.ExpectedPacketLossPct = 0; this.isInitialized = true; } catch (DllNotFoundException ex) { throw ex; } }
public void StartEncoding() { BotAudioProvider.StartListening(); StartResponseCheckLoop(); try { //opus _encoder = OpusEncoder.Create(InputSampleRate, 1, Application.Voip); _encoder.ForwardErrorCorrection = false; _decoder = OpusDecoder.Create(InputSampleRate, 1); _decoder.ForwardErrorCorrection = false; } catch (Exception ex) { Logger.Error(ex, $"{LogClientId}| Error starting audio Output - Quitting! " + ex.Message); Environment.Exit(1); } }
public ClientAudioProvider() { _filters = new OnlineFilter[2]; _filters[0] = OnlineFilter.CreateBandpass(ImpulseResponse.Finite, AudioManager.OUTPUT_SAMPLE_RATE, 560, 3900); _filters[1] = OnlineFilter.CreateBandpass(ImpulseResponse.Finite, AudioManager.OUTPUT_SAMPLE_RATE, 100, 4500); JitterBufferProviderInterface = new JitterBufferProviderInterface(new WaveFormat(AudioManager.OUTPUT_SAMPLE_RATE, 2)); SampleProvider = new Pcm16BitToSampleProvider(JitterBufferProviderInterface); _decoder = OpusDecoder.Create(AudioManager.OUTPUT_SAMPLE_RATE, 1); _decoder.ForwardErrorCorrection = false; _decoder.MaxDataBytes = AudioManager.OUTPUT_SAMPLE_RATE * 4; _highPassFilter = BiQuadFilter.HighPassFilter(AudioManager.OUTPUT_SAMPLE_RATE, 520, 0.97f); _lowPassFilter = BiQuadFilter.LowPassFilter(AudioManager.OUTPUT_SAMPLE_RATE, 4130, 2.0f); }
public static void Main(string[] args) { string opusfile = @"C:\Users\Logan Stromberg\Desktop\Prisencolinensinainciusol.opus"; string rawFile = @"C:\Users\Logan Stromberg\Desktop\Prisencolinensinainciusol.raw"; string rawFile2 = @"C:\Users\Logan Stromberg\Desktop\Prisencolinensinainciusol_out.raw"; using (FileStream fileOut = new FileStream(opusfile, FileMode.Create)) { OpusEncoder encoder = OpusEncoder.Create(48000, 2, OpusApplication.OPUS_APPLICATION_AUDIO); encoder.Bitrate = 96000; OpusTags tags = new OpusTags(); tags.Fields[OpusTagName.Title] = "Prisencolinensinainciusol"; tags.Fields[OpusTagName.Artist] = "Adriano Celetano"; OpusOggWriteStream oggOut = new OpusOggWriteStream(encoder, fileOut, tags); byte[] allInput = File.ReadAllBytes(rawFile); short[] samples = BytesToShorts(allInput); oggOut.WriteSamples(samples, 0, samples.Length); oggOut.Finish(); } using (FileStream fileIn = new FileStream(opusfile, FileMode.Open)) { using (FileStream fileOut = new FileStream(rawFile2, FileMode.Create)) { OpusDecoder decoder = OpusDecoder.Create(48000, 2); OpusOggReadStream oggIn = new OpusOggReadStream(decoder, fileIn); while (oggIn.HasNextPacket) { short[] packet = oggIn.DecodeNextPacket(); if (packet != null) { byte[] binary = ShortsToBytes(packet); fileOut.Write(binary, 0, binary.Length); } } } } }
public void Convert(Stream inputOgg, Stream outputWav) { using MemoryStream pcmStream = new(); OpusDecoder decoder = OpusDecoder.Create(INPUT_FREQUENCY, CHANNELS); OpusOggReadStream oggReader = new OpusOggReadStream(decoder, inputOgg); while (oggReader.HasNextPacket) { short[] packet = oggReader.DecodeNextPacket(); if (packet != null) { for (int i = 0; i < packet.Length; i++) { var bytes = BitConverter.GetBytes(packet[i]); pcmStream.Write(bytes, 0, bytes.Length); } } } pcmStream.Position = 0; using var wavStream = new RawSourceWaveStream(pcmStream, new WaveFormat(INPUT_FREQUENCY, CHANNELS)); using var resampler = new MediaFoundationResampler(wavStream, new WaveFormat(OUTPUT_FREQUENCY, CHANNELS)); WaveFileWriter.WriteWavFileToStream(outputWav, resampler); }
private void button1_Click(object sender, EventArgs e) { //string localFileName = "a.ogg"; //string localFileName2 = localFileName.Replace(".ogg", ".wav"); //var vorbisStream = new NAudio.Vorbis.VorbisWaveReader(localFileName); //NAudio.Wave.WaveFileWriter.CreateWaveFile(localFileName2, vorbisStream); try { using (FileStream fileIn = new FileStream($"{this.fileOgg}", FileMode.Open)) using (MemoryStream pcmStream = new MemoryStream()) { OpusDecoder decoder = OpusDecoder.Create(48000, 1); OpusOggReadStream oggIn = new OpusOggReadStream(decoder, fileIn); while (oggIn.HasNextPacket) { short[] packet = oggIn.DecodeNextPacket(); if (packet != null) { for (int i = 0; i < packet.Length; i++) { var bytes = BitConverter.GetBytes(packet[i]); pcmStream.Write(bytes, 0, bytes.Length); } } } pcmStream.Position = 0; var wavStream = new RawSourceWaveStream(pcmStream, new WaveFormat(48000, 1)); var sampleProvider = wavStream.ToSampleProvider(); WaveFileWriter.CreateWaveFile16($"{this.fileWav}", sampleProvider); } MessageBox.Show("success!"); this.wavlab.Text = this.fileWav; } catch (Exception ee) { MessageBox.Show(ee.ToString()); } }
public void StartEncoding() { BotAudioProvider = new BotAudioProvider(Client.DcsPlayerRadioInfo.radios[0], ResponseQueue) { SpeechRecognitionListener = { VoiceHandler = Client.SrsAudioClient, SrsClient = Client } }; StartResponseCheckLoop(); try { //opus _encoder = OpusEncoder.Create(InputSampleRate, 1, Application.Voip); _encoder.ForwardErrorCorrection = false; _decoder = OpusDecoder.Create(InputSampleRate, 1); _decoder.ForwardErrorCorrection = false; } catch (Exception ex) { Logger.Error(ex, $"{LogClientId}| Error starting audio Output - Quitting! " + ex.Message); Environment.Exit(1); } }
public byte[] Decode(byte[] data, int length) { if (this.decoder == null) { lock (this.codecLock) { if (this.decoder == null) { this.decoder = OpusDecoder.Create(this.settings.SampleRate, this.settings.Channels); } } } int decodedLength; byte[] decoded = this.decoder.Decode(data, length, out decodedLength); if (decoded.Length != decodedLength) { byte[] final = new byte[decodedLength]; Buffer.BlockCopy(decoded, 0, final, 0, decodedLength); decoded = final; } return(decoded); }
public void StartEncoding(int mic, MMDevice speakers, string guid, InputDeviceManager inputManager, IPAddress ipAddress, int port, MMDevice micOutput, VOIPConnectCallback voipConnectCallback) { _stop = false; try { _micInputQueue.Clear(); InitMixers(); InitAudioBuffers(); //Audio manager should start / stop and cleanup based on connection successfull and disconnect //Should use listeners to synchronise all the state _waveOut = new WasapiOut(speakers, AudioClientShareMode.Shared, true, 40); //add final volume boost to all mixed audio _volumeSampleProvider = new VolumeSampleProviderWithPeak(_clientAudioMixer, (peak => SpeakerMax = (float)VolumeConversionHelper.ConvertFloatToDB(peak))); _volumeSampleProvider.Volume = SpeakerBoost; if (speakers.AudioClient.MixFormat.Channels == 1) { if (_volumeSampleProvider.WaveFormat.Channels == 2) { _waveOut.Init(_volumeSampleProvider.ToMono()); } else { //already mono _waveOut.Init(_volumeSampleProvider); } } else { if (_volumeSampleProvider.WaveFormat.Channels == 1) { _waveOut.Init(_volumeSampleProvider.ToStereo()); } else { //already stereo _waveOut.Init(_volumeSampleProvider); } } _waveOut.Play(); //opus _encoder = OpusEncoder.Create(INPUT_SAMPLE_RATE, 1, Application.Voip); _encoder.ForwardErrorCorrection = false; _decoder = OpusDecoder.Create(INPUT_SAMPLE_RATE, 1); _decoder.ForwardErrorCorrection = false; //speex _speex = new Preprocessor(AudioManager.SEGMENT_FRAMES, AudioManager.INPUT_SAMPLE_RATE); } catch (Exception ex) { Logger.Error(ex, "Error starting audio Output - Quitting! " + ex.Message); ShowOutputError("Problem Initialising Audio Output!"); Environment.Exit(1); } if (micOutput != null) // && micOutput !=speakers { //TODO handle case when they're the same? try { _micWaveOut = new WasapiOut(micOutput, AudioClientShareMode.Shared, true, 40); _micWaveOutBuffer = new BufferedWaveProvider(new WaveFormat(AudioManager.INPUT_SAMPLE_RATE, 16, 1)); _micWaveOutBuffer.ReadFully = true; _micWaveOutBuffer.DiscardOnBufferOverflow = true; var sampleProvider = _micWaveOutBuffer.ToSampleProvider(); if (micOutput.AudioClient.MixFormat.Channels == 1) { if (sampleProvider.WaveFormat.Channels == 2) { _micWaveOut.Init(sampleProvider.ToMono()); } else { //already mono _micWaveOut.Init(sampleProvider); } } else { if (sampleProvider.WaveFormat.Channels == 1) { _micWaveOut.Init(sampleProvider.ToStereo()); } else { //already stereo _micWaveOut.Init(sampleProvider); } } _micWaveOut.Play(); } catch (Exception ex) { Logger.Error(ex, "Error starting mic audio Output - Quitting! " + ex.Message); ShowOutputError("Problem Initialising Mic Audio Output!"); Environment.Exit(1); } } if (mic != -1) { try { _waveIn = new WaveIn(WaveCallbackInfo.FunctionCallback()) { BufferMilliseconds = INPUT_AUDIO_LENGTH_MS, DeviceNumber = mic, }; _waveIn.NumberOfBuffers = 2; _waveIn.DataAvailable += _waveIn_DataAvailable; _waveIn.WaveFormat = new WaveFormat(INPUT_SAMPLE_RATE, 16, 1); _tcpVoiceHandler = new TCPVoiceHandler(_clientsList, guid, ipAddress, port, _decoder, this, inputManager, voipConnectCallback); var voiceSenderThread = new Thread(_tcpVoiceHandler.Listen); voiceSenderThread.Start(); _waveIn.StartRecording(); MessageHub.Instance.Subscribe <SRClient>(RemoveClientBuffer); } catch (Exception ex) { Logger.Error(ex, "Error starting audio Input - Quitting! " + ex.Message); ShowInputError("Problem initialising Audio Input!"); Environment.Exit(1); } } }
public void StartPreview(int mic, MMDevice speakers) { try { _settings = SettingsStore.Instance; _waveOut = new WasapiOut(speakers, AudioClientShareMode.Shared, true, 40); _buffBufferedWaveProvider = new BufferedWaveProvider(new WaveFormat(AudioManager.INPUT_SAMPLE_RATE, 16, 1)); _buffBufferedWaveProvider.ReadFully = true; _buffBufferedWaveProvider.DiscardOnBufferOverflow = true; RadioFilter filter = new RadioFilter(_buffBufferedWaveProvider.ToSampleProvider()); //add final volume boost to all mixed audio _volumeSampleProvider = new VolumeSampleProviderWithPeak(filter, (peak => SpeakerMax = (float)VolumeConversionHelper.ConvertFloatToDB(peak))); _volumeSampleProvider.Volume = SpeakerBoost; if (speakers.AudioClient.MixFormat.Channels == 1) { if (_volumeSampleProvider.WaveFormat.Channels == 2) { _waveOut.Init(_volumeSampleProvider.ToMono()); } else { //already mono _waveOut.Init(_volumeSampleProvider); } } else { if (_volumeSampleProvider.WaveFormat.Channels == 1) { _waveOut.Init(_volumeSampleProvider.ToStereo()); } else { //already stereo _waveOut.Init(_volumeSampleProvider); } } _waveOut.Play(); } catch (Exception ex) { Logger.Error(ex, "Error starting audio Output - Quitting! " + ex.Message); ShowOutputError("Problem Initialising Audio Output!"); Environment.Exit(1); } try { _speex = new Preprocessor(AudioManager.SEGMENT_FRAMES, AudioManager.INPUT_SAMPLE_RATE); //opus _encoder = OpusEncoder.Create(AudioManager.INPUT_SAMPLE_RATE, 1, FragLabs.Audio.Codecs.Opus.Application.Voip); _encoder.ForwardErrorCorrection = false; _decoder = OpusDecoder.Create(AudioManager.INPUT_SAMPLE_RATE, 1); _decoder.ForwardErrorCorrection = false; _waveIn = new WaveIn(WaveCallbackInfo.FunctionCallback()) { BufferMilliseconds = AudioManager.INPUT_AUDIO_LENGTH_MS, DeviceNumber = mic }; _waveIn.NumberOfBuffers = 2; _waveIn.DataAvailable += _waveIn_DataAvailable; _waveIn.WaveFormat = new WaveFormat(AudioManager.INPUT_SAMPLE_RATE, 16, 1); //debug wave file //_waveFile = new WaveFileWriter(@"C:\Temp\Test-Preview.wav", _waveIn.WaveFormat); _waveIn.StartRecording(); } catch (Exception ex) { Logger.Error(ex, "Error starting audio Input - Quitting! " + ex.Message); ShowInputError(); Environment.Exit(1); } }