|
Злой код |
|
|
|
Dec 2 2013, 16:02
|
Местный
  
Группа: Свой
Сообщений: 248
Регистрация: 2-02-09
Из: Тверь
Пользователь №: 44 309

|
Здравствуйте уважаемые! Написал такой вот код в keil 4.73 А он не компилируется не в какую, где может быть косяк??? Код #include <math.h>
unsigned int Massine[8000];
typedef union{ int ch1_ch2; char ch[2]; }chn;
void sinetest(void) { float ampvol_ch1 = 65; float period_ch1 = 20; //----------------------------------------- float ampvol_ch2 = 45; float period_ch2 = 30; //----------------------------------------- float pi = 3.14; int index = 8000; int i = 0; //----------------------------------------- chn channel; for(i=0; i<index; i++) { channel.ch[0] = 128 + (ampvol_ch1*sin(i*pi*period_ch1)); channel.ch[1] = 128 + (ampvol_ch2*sin(i*pi*period_ch2)); Massine[i] = channel.ch1_ch2; } } Интересует правильность синтексиса! А то я в майне вызываю эту функцию чтоб она заполнила массив, а код не компилируется! Но ведь с виду ошибок не вижу
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 14)
|
Dec 2 2013, 16:13
|
Местный
  
Группа: Участник
Сообщений: 406
Регистрация: 1-03-06
Пользователь №: 14 821

|
Цитата(uragan90 @ Dec 2 2013, 17:08)  Пишет что не нравится ему что float с int мешаю или типа того! но мне нужно синусойду в двух каналах по байту каждая запихать в слово двух байтовое ну так правильно, (float)i сделайте
|
|
|
|
|
Dec 2 2013, 17:29
|

Частый гость
 
Группа: Участник
Сообщений: 127
Регистрация: 31-10-12
Пользователь №: 74 189

|
Цитата(uragan90 @ Dec 2 2013, 20:59)  Теперь ругается на обьявление chn channel; пишет что ранее обьявлен мог быть... А Вы приведите тут варнинг как он есть, на английском. Попутно - А Вы там с union не перемудрили? Надо то и всего Massine[i] = ch[0] | ((unsigned int)ch[1] << 8) ...
- Зачем используете int для Massine, если на каждый сэмпл используется только 2 байта (по байту на канал).
Оставшиеся 4000 байт врагу подарите?  - float pi = 3.14 — это не наш метод! Про дефайн "M_PI" в хедере math.h знаете?
- Как насчет такого кода (ver.2):
Код #include <stdio.h> #include <stdlib.h> #define _USE_MATH_DEFINES // это нужно только для VisualStudio #include <math.h>
typedef union { unsigned short data; struct { unsigned char left; unsigned char right; } chan; } stereo_sample_t;
struct sine_param { float amp_vol; float period; };
static unsigned char get_sine_sample(const struct sine_param *p, int i) { return 128u + (unsigned char)(p->amp_vol * sin(M_PI * p->period * i)); }
static void sine_test(stereo_sample_t buf[], int num_samples) { struct sine_param left_ch = {65, 20}; struct sine_param right_ch = {45, 30}; int i;
for(i = 0; i < num_samples; i++) { buf[i].chan.left = get_sine_sample(&left_ch, i); buf[i].chan.right = get_sine_sample(&right_ch, i); } }
int main(void) { stereo_sample_t Massine[8000];
sine_test(Massine, sizeof(Massine) / sizeof(Massine[0])); return 0; } Так вот немного приятнее...
Сообщение отредактировал winipuh - Dec 2 2013, 20:19
|
|
|
|
|
Dec 2 2013, 18:17
|
Местный
  
Группа: Свой
Сообщений: 248
Регистрация: 2-02-09
Из: Тверь
Пользователь №: 44 309

|
Спасибо!!! Ну может и перемудрил конечно! M_PI не знал спасибо! Автор! Поаккуратнее с цитированием! Для того, чтобы сказать "спасибо" не обязательно бездумно копировать весь предыдущий пост кнопкой "Reply". От себя добавлю, что если Вы так же грамотно и внимательно пишете на С, как на русском, то удивляться совершенно нечему...
Сообщение отредактировал Herz - Dec 2 2013, 18:50
Причина редактирования: Избыточное цитирование
|
|
|
|
|
Dec 3 2013, 13:50
|
Местный
  
Группа: Свой
Сообщений: 248
Регистрация: 2-02-09
Из: Тверь
Пользователь №: 44 309

|
Написал для теста в Dev-C++ код который бы должен был по идеи вывести значения в отдельный файл txt Но не прокатывает В файл пишется ерунда всякая, но не то что ожидалось... Код #include <iostream> #include <fstream> #include <math.h>
using namespace std;
typedef union { unsigned short data; struct { unsigned char left; unsigned char right; } chan; } stereo_sample_t;
struct sine_param { float amp_vol; float period; };
static unsigned char get_sine_sample(const struct sine_param *p, int i) { return 128u + (unsigned char)(p->amp_vol * sin(M_PI * p->period * i)); }
static int sine_test(stereo_sample_t buf[], int num_samples) { struct sine_param left_ch = {65, 20}; struct sine_param right_ch = {45, 30}; int i;
for(i = 0; i < num_samples; i++) { buf[i].chan.left = get_sine_sample(&left_ch, i); buf[i].chan.right = get_sine_sample(&right_ch, i); } }
int main(void) { ofstream File1; File1.open("C:/MasCH1.txt");
stereo_sample_t Massine[8000] = {0}; sine_test(Massine, sizeof(Massine) / sizeof(Massine[0])); for(int i = 0; i < sizeof(Massine) / sizeof(Massine[0]); i++) { File1 << Massine[i].data << endl; }
File1.close(); }
|
|
|
|
|
Dec 3 2013, 15:49
|

Частый гость
 
Группа: Участник
Сообщений: 127
Регистрация: 31-10-12
Пользователь №: 74 189

|
Цитата(uragan90 @ Dec 3 2013, 17:50)  В файл пишется ерунда всякая, но не то что ожидалось... А что именно Вы ожидали? Тут телепатов нет  Для начала Цитата ampvol_ch1*sin(i*pi*period_ch1) 1) Есть понятие кол-во отсчетов в секунду — SampleRate (1/SampleRate — это интервал дискретизации) 2) Есть частота генерируемого синуса — Frequency (1/Frequency — это период синуса) Итого — i-ый отсчет синуса выражается так: A * sin(2 * PI * Freq * i / SampleRate) Дело за малым: 1) Перевести эту формулу в С/С++ 2) Подумать/подправить структуры данных, функции и т.д. (чтобы не засрать исходник)...
Сообщение отредактировал winipuh - Dec 3 2013, 15:50
|
|
|
|
|
Dec 3 2013, 16:24
|

Частый гость
 
Группа: Участник
Сообщений: 127
Регистрация: 31-10-12
Пользователь №: 74 189

|
Без обид, но... Вам сколько лет?  Цитата(uragan90 @ Dec 3 2013, 20:11)  Понемемаете мне нужна функция тестовая которая в массив сложила жы синус, два канала CODE #include <iostream> #include <fstream> #define _USE_MATH_DEFINES #include <math.h>
class SinGen { float amp; float phase_inc; public: SinGen(float amplitude, float frequency, unsigned int rate = 8000) { amp = amplitude; phase_inc = (float(2 * M_PI) * frequency) / rate; } unsigned char getSample(int i) { return 128u + (unsigned char)(amp * sin(phase_inc * i)); } };
typedef union { unsigned short data; struct { unsigned char left; unsigned char right; } chan; } stereo_sample_t;
static void sine_test(stereo_sample_t *buf, int num_samples) { SinGen left_ch(65, 10); SinGen right_ch(45, 20);
for(int i = 0; i < num_samples; i++) { buf[i].chan.left = left_ch.getSample(i); buf[i].chan.right = right_ch.getSample(i); } }
int main(void) { using namespace std;
enum {BUF_SIZE = 8000}; stereo_sample_t sine_buf[BUF_SIZE]; sine_test(sine_buf, BUF_SIZE);
ofstream SinDataFile; SinDataFile.open("sin.txt"); for (int i = 0; i < BUF_SIZE; i++) { SinDataFile << i << '\t'; SinDataFile << (unsigned)sine_buf[i].chan.left << '\t' << (unsigned)sine_buf[i].chan.right; SinDataFile << endl; }
SinDataFile.close(); return 0; }
|
|
|
|
|
Dec 3 2013, 17:00
|

Гуру
     
Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514

|
Цитата(winipuh @ Dec 3 2013, 20:24)  Без обид, но... Вам сколько лет?  Цитата(uragan90) не в какую синтексиса синусойду обьявление по идеи Понемемаете будут братся новичёк когда нибуть Цитата(uragan90) хоть и стар уже!!! не верю про запятые вообще молчу
|
|
|
|
|
Dec 3 2013, 18:04
|
Местный
  
Группа: Свой
Сообщений: 248
Регистрация: 2-02-09
Из: Тверь
Пользователь №: 44 309

|
toweroff
Во дворе весь день стучат Двое стриженых внучат.
Дед им вынес настоящий С круглой шляпкой молоток: - Вот, ребята, сбейте ящик Из распиленных досок.
Яша стукнул по доске, А попало по руке.
Больно пальцу - не беда, Так бывает иногда.
Белой тряпочкой завязан Средний палец у него. Но и к деду ведь не сразу Приходило мастерство.
Повнимательнее будь, К мастерству не лёгок путь!
Взял Никита молоток И ударил ловко. Покосилась только вбок У гвоздя головка.
Покосилась - не беда. Так бывает иногда.
- Не беда, что у ребят, Как заметил кто-то, Ящик вышел кривоват, - Первая работа!
Главное по спокойнее! Вы не дали не одного умного совета даже и на грамм, но умника стриите на целый киллограм!
ВИНИПУХУ огромное спассибо за науку!!!!!!
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|