Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Работа со звуком Добавлено: 09.10.06 21:59  

Автор вопроса:  RNB-X
Как определить частоту сигнала подаваемого на вход звуковой карты? И наоборот - как подать на выход звуковой карты сигнал определённой частоты! Буду очень благодарен за дельные советы!

Ответить

  Ответы Всего ответов: 12  

Номер ответа: 1
Автор ответа:
 vito



Разработчик Offline Client

Вопросов: 23
Ответов: 879
 Web-сайт: softvito.narod2.ru
 Профиль | | #1
Добавлено: 09.10.06 23:35
Direct Sound все это умеет.
Примеры в SDK. Скачать можно с сайта MS.

Ответить

Номер ответа: 2
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #2
Добавлено: 10.10.06 18:49
Создание звука с определенной частотой:

#include <windows.h>
#include <iostream>
#include <cstdio>
#include <cmath>

#pragma comment (lib, "winmm.lib";)

using namespace std;

#ifndef ANY_SIZE
#define ANY_SIZE 1
#endif


#define FOURCC(x) ((x[0] + (x[1] << 8) + (x[2] << 16) + (x[3] << 24)))
#define PI 3.14159265358979323


struct WAVEDATA {
DWORD dID; // "data"
DWORD dLen; // Length of data in the dData field
BYTE dData[ANY_SIZE]; // The actual waveform data
};

struct WAVE {
DWORD wID; // "WAVE"
// Format
DWORD fID; // "fmt "
DWORD fLen; // Length of data in the format chunk
WORD wFormatTag; // format type
    WORD nChannels; // number of channels (i.e. mono, stereo, etc.)
    ;DWORD nSamplesPerSec; // sample rate
    ;DWORD nAvgBytesPerSec; // for buffer estimation
    WORD nBlockAlign; // block size of data
WORD FormatSpecific; // Format specific data area
// Data
WAVEDATA wd;
};

struct RIFF {
DWORD rID; // "RIFF"
DWORD rLen; // The length of the data in the next chunk
WAVE rData; // The data chunk
};



int main(){
// Одна секунда звука 440 Hz, частота дискретизации 11025 Hz, 8-битный, несжатый

int freq = 440;
int discr = 11025;
int bits = 8;
int t = 2;

// Генерим звук
double currtime, ampl;
int a;

int datalen = t * discr * bits / 8;

BYTE *data = new BYTE [datalen];
for(int i = 0; i < t * discr; i++){
currtime = (double)i / (double)discr;
// Вычисление амплитуды
ampl = sin(currtime * freq * 2 * PI);
// Нормализация и запись
switch(bits){
case 8:
a = (int)((ampl + 1) / 2 * 255);
data[i] = a;
break;
case 16:
a = (int)(ampl * (2^15 - 1));
data[i*2] = a % 256;
data[i*2+1] = a / 256;
break;
}
}

RIFF riff;
riff.rID = FOURCC("RIFF";);
riff.rLen = sizeof(WAVE) - 1 + datalen;

riff.rData.wID = FOURCC("WAVE";);
riff.rData.fID = FOURCC("fmt ";);
riff.rData.nBlockAlign = bits / 8;
riff.rData.nChannels = 1;
riff.rData.nSamplesPerSec = discr;
riff.rData.FormatSpecific = 8; // hz
riff.rData.fLen = 16;
riff.rData.wFormatTag = 1;
riff.rData.nAvgBytesPerSec = discr * bits / 8;
riff.rData.wd.dID = FOURCC("data";);
riff.rData.wd.dLen = datalen;

BYTE *image = new BYTE [sizeof(RIFF) - 1 + datalen];

CopyMemory((void *)image, (const void *)&riff, sizeof(RIFF) - 1);
CopyMemory((void *)&image[sizeof(RIFF) - 1], (const void *)data, datalen);

PlaySound((LPCTSTR)image, NULL, SND_MEMORY);

delete [] image;
delete [] data;

return 0;
}


Определение частоты поступающего сигнала основано на быстром преобразовании Фурье (БПФ aka FFT), получаешь сигнал, раскладываешь в спектр и ищешь частотный максимум.

Ответить

Номер ответа: 3
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #3
Добавлено: 15.10.06 11:56
О ужос! ЭТО ЖЕ C++! :)

Ответить

Номер ответа: 4
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #4
Добавлено: 15.10.06 16:16
Это не ужас, а единственный нормальный язык программирования, избавленный от костылей Java и детских побрякушек в стиле "сделай говносайт за 5 минут" а ля .NET. Не нравится? Забудь о программировании.

Ответить

Номер ответа: 5
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #5 Добавлено: 15.10.06 16:29
Да ну, как язык в котором есть даже циклы может считаться нормальным языком? Это те же костыли, для тех кто не может рализовать цикл с помощью машинных кодов.

Вообще после того как я познакомился с машинным кодом, я ни один язык не считаю нормальным языком, тк в каждом языке тем или иным образом есть костыли и побрякушки, даже в ассемблере.

Ответить

Номер ответа: 6
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #6 Добавлено: 15.10.06 19:08
ой как Sharp в точку сказанул, прям передал все одним предложением, что я хотел сказать от .нете :)

только чуть чуть бы перефразировать, чтобы не только сайты обосрать но и проги под винду :)) Сам трогать произведение боюсь, пусть лучше Sharp :)

Ответить

Номер ответа: 7
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #7
Добавлено: 15.10.06 23:33
Это те же костыли, для тех кто не может рализовать цикл с помощью машинных кодов.

Как можно называть столь примитивный набор из 1-2 сотен инструкций с жестко фиксированным синтаксисом языком? В нем даже думать не над чем, только печатать надо.
чтобы не только сайты обосрать но и проги под винду

Как вообще можно называть кусок говнокода, делающего вид, что исполняется под другим куском говнокода, слепленного из говнокода 70-х, 80-х и 90-х годов, написанного малограмотными грязными индусами за 20$ в месяц, программой?

Ответить

Номер ответа: 8
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #8 Добавлено: 15.10.06 23:44
оооо фсее.. print и в рамку!!! Respect!! =)))

Ответить

Номер ответа: 9
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #9 Добавлено: 15.10.06 23:50
Как можно называть столь примитивный набор из 1-2 сотен инструкций с жестко фиксированным синтаксисом языком?


А я что назвал его языком?

В нем даже думать не над чем, только печатать надо.

Типа на ассемблере или .NET думать надо :)

Ответить

Номер ответа: 10
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #10 Добавлено: 16.10.06 04:11
не ну на ассемблере можно долго и нудно высчитывать позицию чего-то в памяти... это иногда бывает увлекательно, например при многомерых матрицах :)))

Ответить

Номер ответа: 11
Автор ответа:
 RNB-X



Вопросов: 17
Ответов: 29
 Профиль | | #11 Добавлено: 04.12.06 21:25
может кто-то по сути проблемы выскажется???

Ответить

Номер ответа: 12
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #12
Добавлено: 04.12.06 23:26
Археолог, а ты пост 2 прочитал? В нем содержится полный развернутый ответ на твой вопрос с исходником. После этого, согласно неписанному кодексу митуя, мы все можем славно пофлудить.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам