示例#1
0
        //Va a generar una señal con una frecuencia de 440 y la guardara en un wav
        private void btnCrearFrecuencia_Click(object sender, RoutedEventArgs e)
        {
            var sampleRate      = 44100;
            var channelCount    = 1;
            var signalGenerator = new SignalGenerator(sampleRate, channelCount);

            signalGenerator.Type      = SignalGeneratorType.Sin;
            signalGenerator.Frequency = 440;
            signalGenerator.Gain      = 0.5;

            var waveFormat = new WaveFormat(sampleRate, 16, channelCount);

            var writer = new CueWaveFileWriter("tono.wav", waveFormat);

            var muestrasPorSegundo = sampleRate * channelCount;

            var buffer = new float[muestrasPorSegundo];

            for (int i = 0; i < 5; i++)
            {
                var muestras = signalGenerator.Read(buffer, 0, muestrasPorSegundo);
                writer.WriteSamples(buffer, 0, muestras);
            }
            writer.Dispose();
        }
示例#2
0
    public int Read(float[] buffer, int offset, int count)
    {
        if (started)
        {
            int sampleRead = signalGenerator.Read(buffer, offset, count);
            return sampleRead;
        }

        return 0;
    }
示例#3
0
        private void FillTable(SignalGeneratorType signalGeneratorType)
        {
            waveTable = new float[(int)sampleRate];
            var sigGen = new SignalGenerator(44100, 1)
            {
                Frequency = 1, Gain = 1, Type = signalGeneratorType
            };

            sigGen.Read(waveTable, 0, (int)sampleRate);

            // debug
            System.Diagnostics.Debug.WriteLine(String.Format("start: {0}, mid: {1}, end: {2}", waveTable[0], waveTable[(int)((sampleRate / 2))], waveTable[(int)sampleRate - 1]));

            readPosition = 0;
        }
        public int Read(float[] buffer, int offset, int count)
        {
            var samples   = _source.Read(buffer, offset, count);
            var lfoBuffer = new float[count];

            _lfo.Read(lfoBuffer, offset, count);

            for (int i = 0; i < samples; i++)
            {
                if (_lfo.Gain > 0.0f)
                {
                    buffer[offset + i] += buffer[offset + i] * lfoBuffer[offset + i];
                }
            }

            return(samples);
        }
示例#5
0
        //Va a generar una señal con una frecuencia de 440
        //y la guardara en un wav
        private void btnCrearFrecuencia_Click(object sender, RoutedEventArgs e)
        {
            var sampleRate      = 44100;
            var channelCount    = 1;
            var signalGenerator = new SignalGenerator(sampleRate, channelCount);

            signalGenerator.Type      = SignalGeneratorType.Sin;
            signalGenerator.Frequency = Int32.Parse(txtFrecuencia.Text);
            signalGenerator.Gain      = 0.5; //ganancia = toma la amplitud maxima
            var waveFormat         = new WaveFormat(sampleRate, 16, channelCount);
            var writer             = new WaveFileWriter(txtNombreArchivo.Text, waveFormat);
            var muestrasPorSegundo = sampleRate * channelCount;
            var buffer             = new float[muestrasPorSegundo];

            for (int i = 0; i < Int32.Parse(txtSegundos.Text); i++)
            {
                var muestras = signalGenerator.Read(buffer, 0, muestrasPorSegundo);
                writer.WriteSamples(buffer, 0, muestras);
            }
            writer.Dispose();
        }
示例#6
0
        /// <summary>
        /// Sends a sample from a signal generator generated waveform.
        /// </summary>
        private void SendSignalGeneratorSample(object state)
        {
            lock (_audioStreamTimer)
            {
                int inputBufferSize  = RTP_TIMESTAMP_RATE / 1000 * AUDIO_SAMPLE_PERIOD_MILLISECONDS;
                int outputBufferSize = RTP_TIMESTAMP_RATE / 1000 * AUDIO_SAMPLE_PERIOD_MILLISECONDS;

                // Get the signal generator to generate the samples and then convert from
                // signed linear to PCM.
                float[] linear = new float[inputBufferSize];
                _signalGenerator.Read(linear, 0, inputBufferSize);
                short[] pcm = linear.Select(x => (short)(x * 32767f)).ToArray();

                byte[] encodedSample = new byte[outputBufferSize];

                for (int index = 0; index < inputBufferSize; index++)
                {
                    encodedSample[index] = MuLawEncoder.LinearToMuLawSample(pcm[index]);
                }

                _peerConnection.SendAudioFrame((uint)outputBufferSize, _peerConnection.GetSendingFormat(SDPMediaTypesEnum.audio).FormatCodec.GetHashCode(), encodedSample);
            }
        }
示例#7
0
 public int Read(float[] buffer, int offset, int count)
 {
     return(FSigGen.Read(buffer, offset, count));
 }
示例#8
0
 public int Read(float[] buffer, int offset, int count)
 {
     return(_useRead ? _signalrGenerator.Read(buffer, offset, count) : 0);
 }