2009-12-11 1 views
0

Как вывести частоту 1 кГц и мощность/объем = 60% в Linux (Ubuntu)?Как вывести частоту 1 кГц и мощность/объем = 60% в Linux (Ubuntu)?

Мне нужен образец кода в C/C++. Благодаря!

+0

Какой API вы используете для управления аудио? –

+0

Я никогда не пробовал и не знал, какой из них я должен использовать. Прошу вас посоветуйте. Спасибо! – Viet

ответ

2

Посмотрите на библиотеку portaudio. http://www.portaudio.com/

Это очень простая в использовании кросс-платформа и поставляется с множеством небольших примеров программ. Среди прочего вы найдете тот, который синтезирует и играет синусоидальную волну.

Изменение частоты и объема тривиально. Если я правильно помню, пример был всего лишь одной страницей кода, включая инициализацию и все.

+0

+1 Спасибо Нильсу! Вау, это даже кросс-платформенный. Я изучаю это. – Viet

1

Ниже приводится способ вывода звукового сигнала пользовательской частоты (в герцах) и длины (в миллисекундах). Как установить том, который я не уверен. Обратите внимание, что эта программа C просто вызывает вызов system() для «echo -e», поэтому технически вам даже не нужно C для этого, но вы спросили, чтобы я дал.

#include <stdio.h> 
#include <stdlib.h> 

int main(int argc, char* argv[]) 
{ 
    long freq; 
    long len; 
    char cmd[60]; 

    if (argc != 3) 
    { 
     printf("Usage: %s freq_hz length_ms\n", argv[0]); 
     return 1; 
    } 

    freq = strtol(argv[1],(char**)NULL,10); 
    len = strtol(argv[2],(char**)NULL,10); 

    sprintf(cmd,"echo -e \"\33[10;%ld]\33[11;%ld]\a\33[10]\33[11]\"",freq,len); 
    system(cmd); 

    return 0; 
} 
+0

+1 Спасибо SiegeX! Это выглядит круто. Мне нужно, чтобы он использовал библиотеку напрямую. В любом случае хорошая штука. – Viet

+0

Пожалуйста, добавьте источник для этих специальных управляющих символов ... – Dor

+1

@Dor VT100 терминальные коды: http://wiki.bash-hackers.org/scripting/terminalcodes – SiegeX

Смежные вопросы