Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <limits.h>
- #include <alsa/asoundlib.h>
- //compilar asi gcc 2tonos.c -o 2tonos -lasound
- //apt-get install libasound2-dev
- //sudo apt-get install alsa-utils
- //aplay -l
- //aplay -D plughw:X,Y audio.wav
- // Definir las frecuencias de los tonos en Hz
- #define FREQUENCY1 800
- #define FREQUENCY2 2000
- // Definir la duración de los tonos en segundos
- #define DURATION 1
- int main() {
- int sampleRate = 44100; // Frecuencia de muestreo típica para audio
- int numSamples = sampleRate * DURATION;
- // Abrir el dispositivo de audio
- snd_pcm_t *pcmHandle;
- snd_pcm_open(&pcmHandle, "default", SND_PCM_STREAM_PLAYBACK, 0);
- // Configurar los parámetros del dispositivo de audio
- snd_pcm_set_params(pcmHandle,
- SND_PCM_FORMAT_S16_LE,
- SND_PCM_ACCESS_RW_INTERLEAVED,
- 2, // Dos canales para estéreo
- sampleRate,
- 1,
- 500000); // Latencia deseada en microsegundos
- // Generar los datos de audio para el primer tono en el canal izquierdo
- short buffer1[numSamples];
- float samplePeriod1 = (float)sampleRate / FREQUENCY1;
- int sampleCount;
- for (sampleCount = 0; sampleCount < numSamples; sampleCount++) {
- buffer1[sampleCount] = (short)(sampleCount / samplePeriod1) % 2 ? SHRT_MAX : SHRT_MIN;
- }
- // Generar los datos de audio para el segundo tono en el canal derecho
- short buffer2[numSamples];
- float samplePeriod2 = (float)sampleRate / FREQUENCY2;
- for (sampleCount = 0; sampleCount < numSamples; sampleCount++) {
- buffer2[sampleCount] = (short)(sampleCount / samplePeriod2) % 2 ? SHRT_MAX : SHRT_MIN;
- }
- // Combinar los buffers de los dos tonos en un buffer estéreo
- short combinedBuffer[numSamples * 2];
- for (sampleCount = 0; sampleCount < numSamples; sampleCount++) {
- combinedBuffer[sampleCount * 2] = buffer1[sampleCount]; // Canal izquierdo
- combinedBuffer[sampleCount * 2 + 1] = buffer2[sampleCount]; // Canal derecho
- }
- // Enviar los datos de audio al dispositivo de audio
- snd_pcm_writei(pcmHandle, combinedBuffer, numSamples);
- // Cerrar el dispositivo de audio
- snd_pcm_close(pcmHandle);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement