Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Музыка и динамик

1.8K
21 июля 2011 года
CilCatblack
251 / / 20.09.2007
Народ помогите.

Как можно проиграть музыку через динамик(пиканьем...тобишь по нотам) используя СИ?:confused:
14
21 июля 2011 года
Phodopus
3.3K / / 19.06.2008
Используя Си.. где??!
1.8K
22 июля 2011 года
CilCatblack
251 / / 20.09.2007
на компе.
341
22 июля 2011 года
Der Meister
874 / / 21.12.2007
Пусть известна частота основного тона ля первой отктавы:
f("a1") = 440 (Гц)
Чстота тона ля второй октавы будет в два раза выше:
f("a2") = 2*440 = 880 (Гц)
Частота тонf ля третьей октавы будет ещё в два раза выше:
f("a3") = 2*880 = 1760 (Гц)
В октаве 12 полутонов, каждую октаву частота возрастает в два раза.
Для того, чтобы повысить звук с частотой f на n полутонов, можно воспользоваться формулой:
f' = f * 2^(n/12)
n могут быть и отрицательными.
Вот берёте за основу какую-либо ступень, а ноты задаёте приращением в полутонах.
Стандартную функцию для пищалки не знаю, в виндах юзал Beep().
Код:
#include <math.h>

#include <windows.h>

#define TEMPO 1200
#define BASE 440

DWORD GetDuration(nom, denom)
int nom, denom;
{
    return TEMPO * nom / denom;
}

void Play(n, nom, denom)
int n, nom, denom;
{
    DWORD frequency = (DWORD) (BASE * pow(2.0, n / 12.0));
    DWORD duration = GetDuration(nom, denom);

    Beep(frequency, duration);
}

void Pause(nom, denom)
int nom, denom;
{
    DWORD duration = GetDuration(nom, denom);
    Sleep(duration);
}

void PlayPhrase(int a, int b) {
    Play(a, 1, 8);
    Play(b, 1, 2);
    Pause(3, 8);
}

main() {
int i;
    while (1) {
        PlayPhrase(7, 10);
        PlayPhrase(10, 7);

        for (i = 0; i < 4; i++) {
            Play(12, 1, 8);
            Play(10, 1, 8);
        }

        PlayPhrase(12, 14);
    }

    return 0;
}
316
22 июля 2011 года
Alm3n
889 / / 29.05.2009
помнится мне на си такого нельзя было сделать. там можно писать в порты, но если это драйвер. что-то стандартных функций я не видел.
Цитата:
на компе.


шикарный ответ.

1.8K
22 июля 2011 года
CilCatblack
251 / / 20.09.2007
Цитата: Der Meister
Пусть известна частота тона ля первой отктавы:
f(a1) = 440 (Гц)
Чстота ля тона второй октавы будет в два раза выше:
f(a2) = 2*440 = 880 (Гц)
Частота тона ля третьей октавы будет ещё в два раза выше:
f(a3) = 2*880 = 1760 (Гц)
В октаве 12 полутонов, каждую октаву частота возрастает в два раза.
Для того, чтобы повысить звук с частотой f на n полутонов, можно воспользоваться формулой:
f' = f * 2^(n/12)
n могут быть и отрицательными.
Вот берёте за основу какую-либо ступень, а ноты задаёте приращением в полутонах.
Стандартную функцию для пищалки не знаю, в виндах юзал Beep()



А если использовать: printf("/a");?

1.8K
22 июля 2011 года
CilCatblack
251 / / 20.09.2007
Цитата: Alm3n


шикарный ответ.



Ну какой есть, зато правда:)))

316
22 июля 2011 года
Alm3n
889 / / 29.05.2009
Цитата: CilCatblack
Ну какой есть, зато правда:)))


никто просто не поймет какой звук(через системный бипер или через колонки), в какой ОСи и какими средствами нужно его воспроизвести и не даст полного ответа.
Api функция Beep, если Windows. sound функция, прототип в dos.h

1.8K
25 июля 2011 года
CilCatblack
251 / / 20.09.2007
Der Meister,Alm3n Спасибо. Типерь понятно.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог