C / C++ 14.11.2016 / 22:32 | | wRadchuk Пользователь Сейчас: Offline
Имя: Владимир Откуда: Метрополис Регистрация: 24.06.2014
| Helltar, в твоей ссылке этого нет. Там ты дал всё для виндовс. А эта либа что даёшь сейчас даже в ютубе не найдена. Сейчас буду гуглить как её на линукс поставить, так как прикладной к архиву мануал не актуален. Надеюсь пиндосы что путнее написали. Спасибо за первый полезный пост.
Изменено wRadchuk (14.11 / 22:33) (всего 1 раз) |
14.11.2016 / 23:01 | | vl@volk Пользователь Сейчас: Offline
Имя: Владислав Откуда: Земля Регистрация: 26.12.2012
| Цитата Naik: wRadchuk, http://www.johnath.com/beep/beep.cПрошу обратить внимание! Пример того как юзать ioctl __________________
знает толк |
15.11.2016 / 20:02 | | kalterfive Пользователь Сейчас: Offline
Имя: Гриб Откуда: Оренбург - Нежинка Регистрация: 16.10.2013
| Цитата wRadchuk: Там ты дал всё для виндовсЦитата wRadchuk: как её на линукс поставитьЦитата wRadchuk: Надеюсь пиндосы что путнее написалиЦитата wRadchuk: У меня линуксЯ не вижу ни одного оправдания с твоей стороны насчёт первостепенности инструмента над задачей. Раз такой принципиальный и опытный пользователь – ну, или знай как в общих чертах работает звуковая подсистема в линуксе, либо оставайся доволен редкими запусками виртуалки. Лагает? – ну, вообще‐то тоже не беда, знаешь. А если по теме, то вот. Читать долго, до прозрения. Если коротко, то звуковая подсистема – она же ALSA – располагается одновременно и в линуксе (как одна из его составных, она же работает с железом), и в юзерспейсе (как API, она же работает с ядром). Вот второе тебе и нужно. Кроме того, есть более высокоуровневые и технологичные инструменты вроде PulseAudio. Ну их работа, так или иначе, тоже сводится к взаимодействию с ядерной звуковой подсистемой. Конкретные примеры бери в зависимости от задачи – когда определишься. __________________
Homo homini penis est. Изменено kalterfive (15.11 / 20:06) (всего 5 раз) |
16.11.2016 / 17:02 | | DominaN Пользователь Сейчас: Offline
Имя: Кирилл Откуда: Смоленск Регистрация: 28.09.2011
| Цитата wRadchuk: У меня линуксКурица не птица, убунту не линукс Цитата kalterfive: высокоуровневые и технологичные инструменты вроде PulseAudioМда, щас бы Поттерингом обмазываться. Короче, хороший, годный пример работы с ALSA, для воспроизведения DTMF тонов: Открыть спойлер Закрыть спойлер /*
* Esse programa gera tons DTMF para discagem.
* sintaxe: ./dtmf <valor>
*
* Autor: Volnei Klehm
* Data: 04/01/2011
*/
#include "/usr/include/alsa/asoundlib.h"
#define MAX_AMP 120 /*como um uint8 vai de 0-255, e, no máximo, dois sinais são somados, deve-se evitar que a soma de ambos ultrapasse 255 (120+120<255)*/
#define FILTER_ORDER 2
#if 1
#define S_FREQ 8000
#define cos697 0.853869 //cos(2*M_PI*(697/S_FREQ));
#define sen697 0.520488 //sin(2*M_PI*(697/S_FREQ));
#define cos770 0.822641 //cos(2*M_PI*(770/S_FREQ));
#define sen770 0.568562 //sin(2*M_PI*(770/S_FREQ));
#define cos852 0.784343 //cos(2*M_PI*(852/S_FREQ));
#define sen852 0.620327 //sin(2*M_PI*(852/S_FREQ));
#define cos941 0.739102 //cos(2*M_PI*(941/S_FREQ));
#define sen941 0.673593 //sin(2*M_PI*(941/S_FREQ));
#define cos1209 0.582052 //cos(2*M_PI*(1209/S_FREQ));
#define sen1209 0.813152 //sin(2*M_PI*(1209/S_FREQ));
#define cos1336 0.498185 //cos(2*M_PI*(1336/S_FREQ));
#define sen1336 0.867071 //sin(2*M_PI*(1336/S_FREQ));
#define cos1477 0.399309 //cos(2*M_PI*(1477/S_FREQ));
#define sen1477 0.916816 //sin(2*M_PI*(1477/S_FREQ));
#endif
#if 0
#define S_FREQ 96000
#define cos697 0.998960 //cos(2*M_PI*(697/S_FREQ));
#define sen697 0.045603 //sin(2*M_PI*(697/S_FREQ));
#define cos770 0.998730 //cos(2*M_PI*(770/S_FREQ));
#define sen770 0.050375 //sin(2*M_PI*(770/S_FREQ));
#define cos852 0.998446 //cos(2*M_PI*(852/S_FREQ));
#define sen852 0.055734 //sin(2*M_PI*(852/S_FREQ));
#define cos941 0.998104 //cos(2*M_PI*(941/S_FREQ));
#define sen941 0.061549 //sin(2*M_PI*(941/S_FREQ));
#define cos1209 0.996871 //cos(2*M_PI*(1209/S_FREQ));
#define sen1209 0.079046 //sin(2*M_PI*(1209/S_FREQ));
#define cos1336 0.996179 //cos(2*M_PI*(1336/S_FREQ));
#define sen1336 0.087330 //sin(2*M_PI*(1336/S_FREQ));
#define cos1477 0.995331 //cos(2*M_PI*(1477/S_FREQ));
#define sen1477 0.096519 //sin(2*M_PI*(1477/S_FREQ));
#endif
typedef enum {
FREQ_697_HZ,
FREQ_770_HZ,
FREQ_852_HZ,
FREQ_941_HZ,
FREQ_1209_HZ,
FREQ_1336_HZ,
FREQ_1477_HZ
}DTMF_FREQS_enum;
static char *device = "default"; /* playback device */
unsigned char buffer[S_FREQ/2]; /* 0.5 s buffer */
snd_output_t *output = NULL;
float GenerateSignal(DTMF_FREQS_enum freq)
{
float ret_val;
static float Reg697[FILTER_ORDER]={1,0};
static float Reg770[FILTER_ORDER]={1,0};
static float Reg852[FILTER_ORDER]={1,0};
static float Reg941[FILTER_ORDER]={1,0};
static float Reg1209[FILTER_ORDER]={1,0};
static float Reg1336[FILTER_ORDER]={1,0};
static float Reg1477[FILTER_ORDER]={1,0};
static float In697;
static float In770;
static float In852;
static float In941;
static float In1209;
static float In1336;
static float In1477;
switch(freq){
case FREQ_697_HZ:
In697=2*cos697*Reg697[0]-Reg697[1];
Reg697[1]=Reg697[0];
Reg697[0]=In697;
return (sen697*Reg697[1]);
case FREQ_770_HZ:
In770=2*cos770*Reg770[0]-Reg770[1];
Reg770[1]=Reg770[0];
Reg770[0]=In770;
return (sen770*Reg770[1]);
case FREQ_852_HZ:
In852=2*cos852*Reg852[0]-Reg852[1];
Reg852[1]=Reg852[0];
Reg852[0]=In852;
return (sen852*Reg852[1]);
case FREQ_941_HZ:
In941=2*cos697*Reg941[0]-Reg941[1];
Reg941[1]=Reg941[0];
Reg941[0]=In941;
return (sen697*Reg697[1]);
case FREQ_1209_HZ:
In1209=2*cos1209*Reg1209[0]-Reg1209[1];
Reg1209[1]=Reg1209[0];
Reg1209[0]=In1209;
return (sen1209*Reg1209[1]);
case FREQ_1336_HZ:
In1336=2*cos1336*Reg1336[0]-Reg1336[1];
Reg1336[1]=Reg1336[0];
Reg1336[0]=In1336;
return (sen1336*Reg1336[1]);
case FREQ_1477_HZ:
In1477=2*cos1477*Reg1477[0]-Reg1477[1];
Reg1477[1]=Reg1477[0];
Reg1477[0]=In1477;
return (sen1477*Reg1477[1]);
default:
return 0;
}
}
unsigned char *getKeyTone(char key,int *bufferSize)
{
unsigned int i;
*bufferSize=sizeof(buffer);
for (i = 0; i < *bufferSize; i++){
switch(key){
case '0':
buffer[i] = ((int) (60*(2+GenerateSignal(FREQ_941_HZ)+GenerateSignal(FREQ_1336_HZ)))) & 0xff;
break;
case '1':
buffer[i] = ((int) (60*(2+GenerateSignal(FREQ_697_HZ)+GenerateSignal(FREQ_1209_HZ)))) & 0xff;
break;
case '2':
buffer[i] = ((int) (60*(2+GenerateSignal(FREQ_697_HZ)+GenerateSignal(FREQ_1336_HZ)))) & 0xff;
break;
case '3':
buffer[i] = ((int) (60*(2+GenerateSignal(FREQ_697_HZ)+GenerateSignal(FREQ_1477_HZ)))) & 0xff;
break;
case '4':
buffer[i] = ((int) (60*(2+GenerateSignal(FREQ_770_HZ)+GenerateSignal(FREQ_1209_HZ)))) & 0xff;
break;
case '5':
buffer[i] = ((int) (60*(2+GenerateSignal(FREQ_770_HZ)+GenerateSignal(FREQ_1336_HZ)))) & 0xff;
break;
case '6':
buffer[i] = ((int) (60*(2+GenerateSignal(FREQ_770_HZ)+GenerateSignal(FREQ_1477_HZ)))) & 0xff;
break;
case '7':
buffer[i] = ((int) (60*(2+GenerateSignal(FREQ_852_HZ)+GenerateSignal(FREQ_1209_HZ)))) & 0xff;
break;
case '8':
buffer[i] = ((int) (60*(2+GenerateSignal(FREQ_852_HZ)+GenerateSignal(FREQ_1336_HZ)))) & 0xff;
break;
case '9':
buffer[i] = ((int) (60*(2+GenerateSignal(FREQ_852_HZ)+GenerateSignal(FREQ_1477_HZ)))) & 0xff;
break;
case '*':
buffer[i] = ((int) (60*(2+GenerateSignal(FREQ_941_HZ)+GenerateSignal(FREQ_1209_HZ)))) & 0xff;
break;
case '#':
buffer[i] = ((int) (60*(2+GenerateSignal(FREQ_941_HZ)+GenerateSignal(FREQ_1477_HZ)))) & 0xff;
break;
default:
buffer[i] = 0; /*Silêncio*/
break;
}
}
return (buffer);
}
int main(int argc, char *argv[])
{
int err;
unsigned int i;
unsigned char *ptr=NULL;
int size_out;
char *valor=NULL;
snd_pcm_t *handle;
snd_pcm_sframes_t frames;
if(argc != 2)
{
printf("Argumentos incoerentes, usar valor a ser discado!\n");
return 0;
}
valor=argv[1];
if ((err = snd_pcm_open(&handle, device, SND_PCM_STREAM_PLAYBACK, 0)) < 0)
{
printf("Playback open error: %s\n", snd_strerror(err));
exit(EXIT_FAILURE);
}
if ((err = snd_pcm_set_params(handle,
SND_PCM_FORMAT_U8,
SND_PCM_ACCESS_RW_INTERLEAVED,
1,
S_FREQ,
1,
250000)) < 0)
{
printf("Playback open error: %s\n", snd_strerror(err));
exit(EXIT_FAILURE);
}
for(i=0;strlen(valor);i++,valor++)
{
ptr=getKeyTone(*valor,&size_out);
if(ptr != NULL)
{
frames = snd_pcm_writei(handle, ptr, size_out);
if (frames < 0)
frames = snd_pcm_recover(handle, frames, 0);
if (frames < 0)
{
printf("snd_pcm_writei failed: %s\n", snd_strerror(err));
snd_pcm_close(handle);
return 0;
}
if (frames > 0 && frames < (long)sizeof(buffer))
printf("Short write (expected %li, wrote %li)\n", (long)sizeof(buffer), frames);
}
}
snd_pcm_close(handle);
return 0;
}
|
12.12.2016 / 22:54 | | wRadchuk Пользователь Сейчас: Offline
Имя: Владимир Откуда: Метрополис Регистрация: 24.06.2014
| DominaN, спасибо. kalterfive, посмотрю на досуге ссылку, буду читать.
Изменено wRadchuk (12.12 / 22:55) (всего 1 раз) |
22.09.2017 / 16:06 | | Витаминыч Супермодератор Сейчас: Offline
Имя: Василиус Откуда: RZN Регистрация: 20.04.2012
| Мозг поплавлен от разнообразной инфы.. Кто-нибудь может простым языком объяснить, как унаследовать метод родительского класса? Article->Food->Bread, такая иерархия, создаю объект Bread, но метод toString() из Article не отрабатывает.. Открыть спойлер Закрыть спойлер int main() {
vector<Bread> fl;
Bread *b1 = new Bread(1000, "Хлеб", 34.4, "23.09.17", .480, 230, "Ржаной");
fl.push_back(*b1);
fl[0].toString();
return 0;
}
class Article {
int code;
string name;
double price;
string production;
public:
Article& operator =(Article const &obj) {
if (&obj && this != &obj) {
this->code = obj.code;
this->name = obj.name;
this->price = obj.price;
this->production = obj.production;
}
return *this;
}
friend bool operator ==(Article const &a, Article const &b) {
return a.code == b.code;
}
friend bool operator <(Article const &a, Article const &b) {
return a.code < b.code;
}
friend bool operator >(Article const &a, Article const &b) {
return a.code > b.code;
}
friend bool operator <=(Article const &a, Article const &b) {
return a < b || a == b;
}
friend bool operator >=(Article const &a, Article const &b) {
return a > b || a == b;
}
friend bool operator !=(Article const &a, Article const &b) {
return !(a == b);
}
int getCode() const {
return code;
}
const string& getName() const {
return name;
}
double getPrice() const {
return price;
}
const string& getProduction() const {
return production;
}
void setCode(int code) {
this->code = code;
}
void setName(const string& name) {
this->name = name;
}
void setPrice(double price) {
this->price = price;
}
void setProduction(const string& production) {
this->production = production;
}
Article() {
code = 0;
name = "product_default";
price = 0.0;
production = "01.01.17";
}
Article(int c, string n, double p, string prod) {
code = c;
name = n;
price = p;
production = prod;
cout << "Создан объект \"Товар\"" << endl;
}
Article(Article *obj) {
code = obj->code;
name = obj->name;
price = obj->price;
production = obj->production;
}
virtual ~Article() {
}
virtual string getFullName() {
ostringstream fullName;
fullName << "Наименование: " << this->name << "\tКод: " << this->code
<< "\tЦена: " << this->price << "\tДата произв-ва: "
<< this->production << "\n";
return fullName.str();
}
virtual string toString() {
ostringstream fullName;
fullName << this->name << " " << this->code << " " << this->price << " "
<< this->production << "\n";
return fullName.str();
}
class Food: virtual public Article {
double weight;
int storageLife;
public:
Food(int c, string n, double p, string prod, double w, int sl) :
Article(c, n, p, prod) {
weight = w;
storageLife = sl;
cout << "Создан объект \"Еда\"" << endl;
}
~Food() {
}
int getStorageLife() const {
return storageLife;
}
void setStorageLife(int sl) {
this->storageLife = sl;
}
double getWeight() const {
return weight;
}
void setWeight(double w) {
this->weight = w;
}
};
class Bread: public Food {
string type;
public:
Bread(int c, string n, double p, string prod, double w, int sl, string t) :
Food(c, n, p, prod, w, sl) {
type = t;
cout << "Создан объект \"Хлеб\"" << endl;
}
~Bread() {
}
const string& getType() const {
return type;
}
void setType(const string& type) {
this->type = type;
}
};
Мне что, надо копипастить каждый раз? В чем прикол тогда наследования такого? С переопределением понятно, тот же getFullName() копипастить и менять, но, типа, как тогда изменить не полностью? Например, как конструктор? ну, теперь то я понимаю, почему придумали Java и С#, это для нормальных людей.. __________________
わからない!! |
22.09.2017 / 16:13 | | SeTSeR Пользователь Сейчас: Offline
Имя: Сергей Откуда: Где-то возле Москвы Регистрация: 01.07.2012
| Витаминыч, но подожди, ты же нигде не используешь возвращаемое toString значение, откуда ты знаешь, что он не отрабатывает? Или это ты в посте опечатался? В любом случае, в чём тут вина C++ не понимаю
Изменено SeTSeR (22.09 / 16:14) (всего 1 раз) |
22.09.2017 / 22:29 | | Витаминыч Супермодератор Сейчас: Offline
Имя: Василиус Откуда: RZN Регистрация: 20.04.2012
| SeTSeR, я всё __________________
わからない!! |
23.09.2017 / 06:30 | | SeTSeR Пользователь Сейчас: Offline
Имя: Сергей Откуда: Где-то возле Москвы Регистрация: 01.07.2012
| Витаминыч, разобрался? |
23.09.2017 / 13:10 | | Витаминыч Супермодератор Сейчас: Offline
Имя: Василиус Откуда: RZN Регистрация: 20.04.2012
| SeTSeR, да я просто расслабился, забыл, что компилятору пофигу и он почти все компилирует В яве мне иде бы уже кричать начала, что я олень и не присвоил возвращаемое значение переменной, а тут эклипс молчит (он вообще почти бесполезен), билдер молчит, и запускается, главное Т.е., без этой глупости мой код нормальный? __________________
わからない!! |
Всего сообщений: 2777 Фильтровать сообщения Поиск по теме Файлы топика (111)
|